Kordinatensystem Zeichen und Außen abgrenzen

Status
Nicht offen für weitere Antworten.

DerAnfänger

Mitglied
Hi , ich bin neu hier und habe auch gleich ein frage. Aber zuerst mal ein großes HALLO an alle. :)

Ich möchte gerne ein Kordinaten System zeichen , mit 25x25 Feldern. Wichtig ist das jedes Feld eine Koordinate zugewiesen bekommt. Links oben soll (1;1) sein u.s.w . Das brauche ich weil ich in das Kordinatenen System zwei beweglich Punkte machen möchte (da müsste mir auch wer sagen wie das funktioniert). Die festen Kordinaten sind so wichtig weil ich per Key Listiner den Punkt in eine gewisse Richtung bewegen will. Ich möchte den KeyListiner so einstellen , das wenn die Taste gedrückt wird die Kordinate des Punktes um einen erhöht (bei drücken nach oben) oder um eine verringert wird (Bei drücken nach unten). Das alles habe ich schon programmiert . Jetzt brauche ich nur noch das Kordinaten System und den Punkt dadrin.

Und dann würde ich es noch gerne so ein richten das wenn der Roboter sich außerhalb des Feldes bewegt eine Fehlermeldung kommt und der Schritt nicht ausgeführt wird. Aber da habe ich auch schon eine Idee.

Ich brauche eigentlich "nur" ein Koordinaten System mit festen Koordinaten je Feld und einen Punkt dadrin.

Zuerst habe ich ein Schachbrett ähnliches Feld entworfen aber da gibt es keine Einzelnen Felder mit Koordinaten.

Ich hoffe ihr könnt mir helfen , habe echt schon vieles Versucht aber nicht liefert mir das gewünschte Ergebnis.

Grüße DerAnfänger
 

Marco13

Top Contributor
Was genau ist jetzt die Frage? Wenn es nur um's zeichnen geht: Eine Klasse von JPanel ableiten, darin paintComponent überschreiben, und mit g.drawLine usw. Linien zeichnen...
 

DerAnfänger

Mitglied
Bei dem Link habe ich zwar ein wunderschönes Kordinaten System gezeichnet . Aber hat jedes Feld da jetzt auch eine Kordinate? Und vorallendingen welche?
 

Quaxli

Top Contributor
Wenn ich Dein Problem recht verstanden habe, würde ich folgenden Lösungsansatz vorschlagen.

Generiere ein 2-dimensioniales Array aus Objekten vom Typ Rectangle. Damit könntest Du das Problem mit dem Koordinatensystem erschlagen. Jedes Rectangle hätte dann eine Koordinate (wobei links oben standardmäßig aber 0,0 wäre - wobei man das mit ein bißchen Kreativität ändern kann). Und Du hast über das Rectangle sowohl Deine gewünschten Koordinaten, als auch die tatsächliche x/y-Positon auf dem JPanel.

Ein schnell zusammengeklappertes Beispiel dazu (mit Ausgabe in der Konsole):

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;

public class Test extends JPanel implements MouseListener{

    Rectangle[][] grid;
    
    public static void main(String[] args) {
        new Test();
    }
    
    public Test(){
    createGrid();
        
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocation(100,100);
        setPreferredSize(new Dimension(300,300));
        addMouseListener(this);
        frame.add(this);
        frame.pack();
        frame.setVisible(true);

    }
    
    private void createGrid(){
        
        grid = new Rectangle[10][10];
        
        for(int x=0;x<grid.length;x++){
            for(int y=0;y<grid[0].length;y++){
                grid[x][y] = new Rectangle(x*30,y*30,30,30);
            }
        }
        
        
    }
    
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(Color.red);
        for(int x=0;x<grid.length;x++){
            for(int y=0;y<grid[0].length;y++){
                g.drawRect(grid[x][y].x,grid[x][y].y,grid[x][y].width,grid[x][y].height);
            }
        }
        
    }

    public void mouseClicked(MouseEvent e) {}

    public void mouseEntered(MouseEvent e) {}

    public void mouseExited(MouseEvent e) {}

    public void mousePressed(MouseEvent e) {}

    public void mouseReleased(MouseEvent e) {
    
        for(int x=0;x<grid.length;x++){
            for(int y=0;y<grid[0].length;y++){
                if(grid[x][y].contains(e.getPoint())){
                    System.out.println("Punkt = " + e.getPoint().x + "/" + e.getPoint().y);
                    System.out.println("Koordinate = " + x + "/" + y);
                    System.out.println("-------------------");
                    return;
                }
            }
        }
        
        
    }

}

<edit>
Und bevor wieder einer was sagt: Ja, man könnte die Koordinaten des Rechtecks auch ausrechnen, statt der verschachtelten for-Schleifen und Prüfung auf Rectangle.contains(). ;)
<edit>
 

DerAnfänger

Mitglied
Das ist schon Super , nur wollte ich es jetzt in mein Layout einbringen aber es klappt nicht. Wenn ich nur die von dir geschriebende Klasse starte gibt es keine Probleme nur sobald ich es nun in mein eigentliches Programm implementieren will gibt es Probleme. Ich habe schon versucht die Mouse Listiner zu löschen und nur die Grid und die Paint Methode überzulassen aber wenn ich es dann implementieren will gibts Probleme.

Hier mal mein Quellcode:

package gui_final;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Interface_JoBots extends JFrame {

public Interface_JoBots() {




/*Buttons werden erstellt*/

JButton Start = new JButton ("Start");
JButton Info = new JButton ("Info");
JButton Hilfe = new JButton ("Hilfe");
JButton Pfeil_Hoch = new JButton ("Hoch");
JButton Pfeil_Runter = new JButton ("Runter");
JButton Pfeil_Links = new JButton ("Links");
JButton Pfeil_Rechts = new JButton ("Rechts");
JButton Waffe_Rechts = new JButton ("Waffe schwenken (R)");
JButton Waffe_Links = new JButton ("Waffe schwenken (L)");
JButton Feuer = new JButton ("Feuer");

/*Menü und Sub Menü wird erstellt*/

JMenuBar mb = new JMenuBar ();
JMenu Hauptmenu = new JMenu ("Hauptmenu");
JMenu Einstellung = new JMenu ("Einstellungen");
JMenu Neues_Spiel = new JMenu ("Neues Spiel"); // für Menu 1
JMenu Neues_Fenster = new JMenu ("Neues Fenster"); // für Menu 1
JMenu Schließen = new JMenu ("Schließen"); // für Menu 1
JMenu Optionen = new JMenu ("Optionen"); // für Menu 2
JMenu Sprache = new JMenu ("Sprache "); // für Menu 2

JMenuItem Deutsch = new JMenuItem ("Deutsch");
JMenuItem Englisch = new JMenuItem ("Englisch");
JMenuItem Französisch = new JMenuItem ("Französisch");

Panel Feld = new Panel();
Feld.setSize(100,100);
Feld.setBackground(Color.black);
Feld.setPreferredSize(new Dimension(100,100));


//hinzufügen von Menu leisten

mb.add(Hauptmenu);
mb.add(Einstellung);

//Untermenüs hinzufügen

Hauptmenu.add(Neues_Spiel);
Hauptmenu.add(Neues_Fenster);
Hauptmenu.add(Schließen);
Einstellung.add(Optionen);
Einstellung.add(Sprache);

Sprache.add(Deutsch);
Sprache.add(Englisch);
Sprache.add(Französisch);

setJMenuBar(mb);

Container cp = getContentPane();

cp.add(Start);
cp.add(Feld);





setContentPane(cp);
}






public static void main (String[]args){
JFrame Fenster = new Interface_JoBots ();

WindowListener exit = new WindowAdapter(){

public void windowsClosing (WindowEvent we)
{
System.exit(0);
}
} ;

Fenster.addWindowListener(exit);
Fenster.setSize(500,500);
Fenster.setVisible(true);
}
}

Ich möchte alle oben beschriebenden Button in mein Interface bekommen und in der mitte soll das Gitternetz sein. Ich habe mal ne Grafik im Anhand wie ich mir das INterface vorstelle.

Der Code oben ist noch unfertig ich muss noch die restlichen Buttons hinzufügen ich wollte euch nur zeigen wie er aussieht , damit ihr besser versteht worein ich das Feld machen möchte.

Und ich verwende da oben noch keinen Layout Manager das weiß , aber wer sich die Grafik anguckt , wird vieleicht verstehen das ich nicht weiß welcher LAyout Manager am besten funktioniert.

Nur noch mal kurz was ich gerne haben möchte : Ich möchte das Gitternetz wie in der Grafik in mein Layout bringen.

Hoffe ihr könnt mir helfen,

Grüße DerAnfänger
 

Anhänge

  • Interface.pdf
    81,3 KB · Aufrufe: 7
Zuletzt bearbeitet:

Quaxli

Top Contributor
In Swing-Componenten überschreibt man nicht paint, sondern paintComponent. Du mußt den Punkt dort pinseln, wo ich das Koordinatensystem zeichne.
Wie Du das machst, darfst Du erst mal selbst auskapsern, dann lernst Du mehr dabei ;) Wenn Du Fragen hast, melde Dich mit dem was Du bis dahin gebastelt hast.
 

Quaxli

Top Contributor
Ich hab mal bißchen dran rumgewerkelt und einiges rausgworfen, was momentan nicht benötig wird, um das Ganze übersichtlicher zu machen.

Vorher noch ein paar Anmerkungen:

- Du solltest in Java nicht unbedingt den Begriff Interface für ein GUI verwenden. Das ist misverständlich, da Interface in Java ein eigenständiger Begriff ist.

- keine Unterstriche in Klassennamen
- Variablennamen schreibt man klein
- In Swing kannst Du Dir den WindowListener sparen, wenn Du setDefaultCloseOperation benutzt

Zusätzlich
- das folgende Beispiel funktioniert nur, wenn Du die Klasse Test, die ich oben erstellt habe mitverwendest
- ich habe keine Komentare eingebaut, da ich doch etliches geändert habe. Schau es Dir in Ruhe durch, verwende was Dir gefällt, den Rest mach' so wie Du denkst
- In der Klasse Test habe ich auch keine Anpassungen vorgenommen, so daß das Gitter unvollständig gezeichnet wird. Hier mußt Du auch noch Änderungen vornehmen. Das war mir für reine Demozwecke jetzt zu viel ;)

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class GUI extends JFrame {

    public GUI() {

        setLocation(100,100);
        setSize(500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout(10,10));
        
        /* Buttons werden erstellt */

        JButton Start = new JButton("Start");

        /* Menü und Sub Menü wird erstellt */

        JMenuBar mb = new JMenuBar();
        JMenu hauptmenu = new JMenu("Hauptmenu");
    JMenu einstellungen = new JMenu("Einstellungen");

        JMenuItem Deutsch = new JMenuItem("Deutsch");
        JMenuItem Englisch = new JMenuItem("Englisch");
        JMenuItem Französisch = new JMenuItem("Französisch");
        // Untermenüs hinzufügen

        hauptmenu.add(new JMenuItem("neues Spiel"));
        hauptmenu.add(new JMenuItem("neues Fenster"));
        hauptmenu.add(new JMenuItem("Schließen"));
        einstellungen.add(new JMenuItem("Optionen"));
        JMenuItem sprache = new JMenuItem("Sprache");


        sprache.add(Deutsch);
        sprache.add(Englisch);
        sprache.add(Französisch);
        einstellungen.add(new JMenuItem("Sprache"));
        
        // hinzufügen von Menu leisten

        mb.add(hauptmenu);
        mb.add(einstellungen);

        setJMenuBar(mb);

    JPanel north = new JPanel();
        north.add(Start);
        
        add(north,BorderLayout.NORTH);
        add(new Test(),BorderLayout.CENTER);

        setVisible(true);


    }

    public static void main(String[] args) {
        new GUI();
    }

}
 

Quaxli

Top Contributor
Nachtrag: Wenn Du was geändert hast, mach' einen neuen Beitrag und verändere nicht alte Beiträge. Sosnt geht die Übersichtlichkeite verloren, wenn Dritte das hier mitverfolgen oder das Problem nachvollziehen wollen.
 

DerAnfänger

Mitglied
Ja als ich geändert habe war dein Post noch nicht da und ich dachte Doppelpost sind hier Verboten. Aber das nächste mal mach ich es dann direkt so.

Und danke für die Tipps , da ist mir mal bewusst geworden wie Unsauber ich noch Programmiere. Aber naja ich lerne ja noch.
 

Quaxli

Top Contributor
Wie Du an meinem Beispiel siehst, ist das Ganze nicht nötig.
Wie ALT ist denn das Lehrbuch? ;)
 

HannsW

Bekanntes Mitglied
Was passiert denn hier?
Du holst Dir die aktuelle ContentPane
Code:
Container cp = getContentPane();
Diesem object fügst Du zwei Dinge hinzu
Code:
cp.add(Start);
cp.add(Feld);
und nun wird das Geholte durch das Geholte ersetzt
Code:
 setContentPane(cp);
//das ist doch aber gleich mit 
setContentPane(getContentPane())
Oder liege ich da falsch? ( das war ne Frage an Alle)
 

DerAnfänger

Mitglied
Ich glaube das ist noch aus DM zeiten. Ich habe es aus der Bücherei . Aber es erklärt das ganze halt recht gut und verständlich. Aber anscheinend auch etwas unnötig :)

Das Buch heißt Swing und ist von bhv Verlag. Die machen eine ganze menge von solchen Büchern und eigentlich sind sie alle sehr einfach zu verstehn , deswegen habe ich mir dieses Buch ausgeliehn.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Quelltext mit komischen griechischen Zeichen Java Basics - Anfänger-Themen 4
T or zeichen Java Basics - Anfänger-Themen 2
L 4 stelliges Passwort aus bestimmten Zeichen. Java Basics - Anfänger-Themen 27
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
I Eindeutiger String mit maximaler Anzahl an Zeichen Java Basics - Anfänger-Themen 11
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
O Array mit einem Zeichen vergleichen Java Basics - Anfänger-Themen 1
S Was bedeutet das Zeichen := Java Basics - Anfänger-Themen 9
K Wie String prüfen ob drei mal das gleiche Zeichen vorkommt? Java Basics - Anfänger-Themen 7
L Zeichen an bestimmter Stelle auslesen Java Basics - Anfänger-Themen 4
S Arrayausgabe und nur einmal ein Zeichen davor Java Basics - Anfänger-Themen 12
johnboyne Java Zeichen Trennen Java Basics - Anfänger-Themen 1
T Zeichen im String verschiebe Java Basics - Anfänger-Themen 17
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
Tino1993 for-Schleife, die eine vorgegebene Anzahl von Zeichen ausgibt Java Basics - Anfänger-Themen 3
pkm Regexproblem - Wie kann ich zwei oder mehr beliebige Zeichen matchen? Java Basics - Anfänger-Themen 7
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
Dimax Erste Schritte String replace alle Zeichen Java Basics - Anfänger-Themen 10
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
F RegEx "+" nur als Zeichen, nicht als Operator oder Sonstiges Java Basics - Anfänger-Themen 2
J Zeichen im String zählen Java Basics - Anfänger-Themen 3
J ObjectOutputStream writeChars, komische Zeichen nur in 1. Zeile Java Basics - Anfänger-Themen 2
H Fehlerausgabe (Ungewollte Zeichen) Java Basics - Anfänger-Themen 1
R Komische Zeichen in Java Java Basics - Anfänger-Themen 5
N Zeichen in einem Textfeld zählen und hinterlegen Java Basics - Anfänger-Themen 6
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
J Vorkommen von Zeichen Java Basics - Anfänger-Themen 44
H Verschiebung von Zeichen Java Basics - Anfänger-Themen 18
O String von vorne nach hinten an einem Zeichen Java Basics - Anfänger-Themen 10
S char auf buchstabe/zeichen prüfen Java Basics - Anfänger-Themen 1
P Zeichenkette Zeichen ausschlißen funktioniert nicht richtig Java Basics - Anfänger-Themen 9
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
L String auf bestimmte zeichen untersuchen Java Basics - Anfänger-Themen 9
D gebe string zurück mit von bis bestimmtes Zeichen Java Basics - Anfänger-Themen 4
L Rekursion größtes Zeichen Java Basics - Anfänger-Themen 8
S Zeichen zählen kopierter Text Java Basics - Anfänger-Themen 6
Y String auf allgemein Zeichen untersuchen Java Basics - Anfänger-Themen 3
S String trennen nach beliebigen Zeichen Java Basics - Anfänger-Themen 3
C Zeichen im String bis zu bestimmter Stelle entfernen Java Basics - Anfänger-Themen 6
S Java Text splitten mit Tabs, Zeilen, Zeichen und Klammern. Java Basics - Anfänger-Themen 6
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
S Das Anführungszeichen(") Zeichen in einen String setzen Java Basics - Anfänger-Themen 1
G Zeichen suchen und Ausgeben. Java Basics - Anfänger-Themen 3
D Input/Output Split am Zeichen | Java Basics - Anfänger-Themen 2
B zeichen eines String mit der kleinsten Frequenz zurückgeben Java Basics - Anfänger-Themen 25
m0n4ch Variablen String auf ungültige Zeichen überprüfen Java Basics - Anfänger-Themen 13
Voreck String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 9
R Zeichen in String vergleichen Java Basics - Anfänger-Themen 75
G Gibt es eine Methode die bei einem StringBuilder n mal das Zeichen c hinzufügt? Java Basics - Anfänger-Themen 6
D String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 5
S Zeichen ab Suchstring einlesen Java Basics - Anfänger-Themen 6
Z char Array unbekanntes Zeichen selbstständig anlegen Java Basics - Anfänger-Themen 6
M Pipe-Zeichen "|" in Java Java Basics - Anfänger-Themen 1
S Zeichen von abgerundeten Rechtecken auf einem Applet Java Basics - Anfänger-Themen 5
R Anzahl von Zeichen in einem Char Array Java Basics - Anfänger-Themen 4
F StringBuilder: Zeilenumbruch nach x Zeichen ohne Worttrennung Java Basics - Anfänger-Themen 1
F Zeichen einer Datei zaehlen Java Basics - Anfänger-Themen 1
D Java doppelte Zahl/Zeichen in einem String entfernen Java Basics - Anfänger-Themen 6
W JTextField-Objekt liest Umlaute mit falschen Zeichen ein Java Basics - Anfänger-Themen 5
G zeichen einer Zeile löschen Java Basics - Anfänger-Themen 4
M problem mit diesem zeichen | Java Basics - Anfänger-Themen 10
N Bestimmte Zeichen eines Strings umwandeln Java Basics - Anfänger-Themen 4
W char-Array auf bestimmte Zeichen prüfen Java Basics - Anfänger-Themen 10
B lanterna einzelne Zeichen aus dem Terminal löschen Java Basics - Anfänger-Themen 0
S Input/Output Alphabet in eine Datei schreiben und Anzahl von Zeichen ausgeben. Java Basics - Anfänger-Themen 4
C Anzahl bestimmter Zeichen in einem String ausgeben Java Basics - Anfänger-Themen 7
I String abschneiden erste und letzte Zeichen Java Basics - Anfänger-Themen 3
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
S Leerzeichen zwischen zwei Zeichen im String entfernen Java Basics - Anfänger-Themen 19
F Methoden split() - Mehrere Zeichen Java Basics - Anfänger-Themen 5
M Input/Output Text auf Fenster zeichen Java Basics - Anfänger-Themen 2
F In einem String nach einem String suchen und Zeichen danach ausgeben Java Basics - Anfänger-Themen 6
S Kleines Zeichen berechnen Java Basics - Anfänger-Themen 5
Q Erste Schritte Zeichen in String farblich hervorheben Java Basics - Anfänger-Themen 4
U markierten Text auf Zeichen zuvor/danach pruefen Java Basics - Anfänger-Themen 9
M Input/Output Zeichen on Konsole einlesen Java Basics - Anfänger-Themen 3
DStrohma Operatoren Kleiner-Zeichen in Größer-Zeichen ändern wenn boolen true? Java Basics - Anfänger-Themen 6
G Input/Output Verhalten BuffferedReader bei unvollständigen Zeichen Java Basics - Anfänger-Themen 1
T Auf jedes Zeichen eines Strings zugreifen? Java Basics - Anfänger-Themen 2
P String Zeichen zuweisen Java Basics - Anfänger-Themen 3
Q Erste Schritte In CharArrayWriter Zeichen an Stelle einfügen Java Basics - Anfänger-Themen 4
H Programm zum Zählen von Zeichen Java Basics - Anfänger-Themen 5
P Methode die String auf Zeichen überprüft Java Basics - Anfänger-Themen 2
A Seltsame Zeichen vor Clienteingabe Java Basics - Anfänger-Themen 5
M Prüfen, ob Zeichen eine Zahl ist Java Basics - Anfänger-Themen 3
T Wörter mit @ als Zeichen finden Java Basics - Anfänger-Themen 13
E Zeichen von Kommandozeilenparameter zählen Java Basics - Anfänger-Themen 6
W String von hinten alle drei Zeichen abschneiden und in umgekehrter Reihenfolge ausgeben. Java Basics - Anfänger-Themen 9
J String Ausgabe nicht-leerer Zeichen nicht korrekt Java Basics - Anfänger-Themen 10
H JEditorPane: ermitteln, ob Zeichen unterstrichen Java Basics - Anfänger-Themen 4
I Zeichen aus String ziehen Java Basics - Anfänger-Themen 3
X Klassen mit Suffix hinter @-Zeichen Java Basics - Anfänger-Themen 7
J Zeichen aus String Array lesen Java Basics - Anfänger-Themen 13
P Input/Output Textdatei einlesen - 1. Zeichen fehlt Java Basics - Anfänger-Themen 7
S Zeichen von Telnet lesen Java Basics - Anfänger-Themen 5
B Strings nur aus bestimmten Zeichen? Java Basics - Anfänger-Themen 4
T String - kleinstes Zeichen bestimmen Java Basics - Anfänger-Themen 3
M Einzelne Zeilen nach Zeichen auslesen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben