Guten Tag,
ich bin schon seit einiger Zeit dabei, ein Snake-Spiel zu implementieren. Es funktioniert auch soweit, jedoch tritt ein sehr merkwürdiges Problem / Fehler auf:
Mein "Spielfeld" besteht aus 2 JFrames: JFrame frameSpielfeld und JFrame frameSteuerung.
Dem Frame frameSpielfeld wird ein Objekt (mit Namen panel) einer Klasse die von JPanel erbt hinzugefügt, deren paintComponent()-Methode ich überschrieben habe.
Dem Frame frameSteuerung wird ein normales JPanel (mit Namen panel2) geaddet, welchem wiederum die 4 angesprochenen JButtons hinzugefügt werden.
Der Fehler, der nun auftritt, ist der Folgende: (siehe Anhang)
Die 4 Buttons werden wie gewünscht im Frame frameSteuerung (dem rechten) dargestellt, jedoch tauchen sie (übereinanderliegend) auch im (linken) Frame frameSpielfeld auf. Fährt man mit dem Mauszeiger über die Buttons im rechten Frame, so wird nun der entsprechende Button auf dem linken Frame angezeigt (bemerkbar daran, dass die Aufschrift wechselt). Aber ich habe die Buttons nie dem linken Frame frameSpielfeld hinzugefügt.
Mein Code:
Die Frames und Buttons werden von mir (noch) global definiert.
Auch in der von mir erstellten Kindklasse von JPanel wird nie etwas mit Buttons getan.
Im linken Frame frameSpielfeld werden die Buttons in der oberen linken Ecke dargestellt. Das hat etwas mit dem Null-Layout zu tun. Gebe ich dem rechten Frame frameSteuerung oder dem panel2 ein anderes Layout (z.B. das Border-Layout), und füge die Buttons jeweils dem Norden, Osten, ... zu, dann werden die Buttons auch im linken Frame frameSpielfeld im Norden, Osten, ... angezeigt.
Mögliche Fehlerquellen:
Da ich in Java noch nicht so erfahren bin, kann ich die Auswirkungen einer Sachen nicht richtig einschätzen, vlt liegt es ja daran:
1. Die von mir implementierten Kindklasse SnakePanel implementiert das Interface Runnable und startet einen neuen Thread. Dieser sorgt für einen beständigen Repaint-Vorgang.
Schon mal vielen Dank im Voraus für eure Antworten!
Viele Grüße
Bubi
PS: Das ist mein erster Beitrag in diesem Forum, ich hoffe ich habe alles richtig gemacht.
ich bin schon seit einiger Zeit dabei, ein Snake-Spiel zu implementieren. Es funktioniert auch soweit, jedoch tritt ein sehr merkwürdiges Problem / Fehler auf:
Mein "Spielfeld" besteht aus 2 JFrames: JFrame frameSpielfeld und JFrame frameSteuerung.
Dem Frame frameSpielfeld wird ein Objekt (mit Namen panel) einer Klasse die von JPanel erbt hinzugefügt, deren paintComponent()-Methode ich überschrieben habe.
Dem Frame frameSteuerung wird ein normales JPanel (mit Namen panel2) geaddet, welchem wiederum die 4 angesprochenen JButtons hinzugefügt werden.
Der Fehler, der nun auftritt, ist der Folgende: (siehe Anhang)
Die 4 Buttons werden wie gewünscht im Frame frameSteuerung (dem rechten) dargestellt, jedoch tauchen sie (übereinanderliegend) auch im (linken) Frame frameSpielfeld auf. Fährt man mit dem Mauszeiger über die Buttons im rechten Frame, so wird nun der entsprechende Button auf dem linken Frame angezeigt (bemerkbar daran, dass die Aufschrift wechselt). Aber ich habe die Buttons nie dem linken Frame frameSpielfeld hinzugefügt.
Mein Code:
Code:
frameSpielfeld = new JFrame("Willkommen bei Snake");
frameSpielfeld.setBounds(200, 200, 750, 750);
frameSpielfeld.setLayout(null);
frameSpielfeld.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new SnakePanel(this);
frameSpielfeld.add(panel);
frameSteuerung = new JFrame("Steuerung");
frameSteuerung.setBounds(200 + 750, 200, 750, 750);
frameSteuerung.setLayout(null);
frameSteuerung.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel2 = new JPanel();
panel2.setSize(750, 750);
panel2.setLayout(null);
panel2.setVisible(true);
frameSteuerung.add(panel2);
buttonNorden = new JButton("Hoch");
buttonNorden.addActionListener(this);
buttonNorden.setBounds((750 / 2) - (100 / 2), 400, 100, 25);
buttonNorden.setSize(100, 25);
panel2.add(buttonNorden);
buttonOsten = new JButton("Rechts");
buttonOsten.addActionListener(this);
buttonOsten.setBounds(buttonNorden.getX() + 52, buttonNorden.getY() + 30, buttonNorden.getWidth(), buttonNorden.getHeight());
panel2.add(buttonOsten);
buttonSueden = new JButton("Runter");
buttonSueden.addActionListener(this);
buttonSueden.setBounds(buttonNorden.getX(), buttonNorden.getY() + 60, buttonNorden.getWidth(), buttonNorden.getHeight());
panel2.add(buttonSueden);
buttonWesten = new JButton("Links");
buttonWesten.addActionListener(this);
buttonWesten.setBounds(buttonNorden.getX() - 52, buttonNorden.getY() + 30, buttonNorden.getWidth(), buttonNorden.getHeight());
panel2.add(buttonWesten);
Die Frames und Buttons werden von mir (noch) global definiert.
Auch in der von mir erstellten Kindklasse von JPanel wird nie etwas mit Buttons getan.
Im linken Frame frameSpielfeld werden die Buttons in der oberen linken Ecke dargestellt. Das hat etwas mit dem Null-Layout zu tun. Gebe ich dem rechten Frame frameSteuerung oder dem panel2 ein anderes Layout (z.B. das Border-Layout), und füge die Buttons jeweils dem Norden, Osten, ... zu, dann werden die Buttons auch im linken Frame frameSpielfeld im Norden, Osten, ... angezeigt.
Mögliche Fehlerquellen:
Da ich in Java noch nicht so erfahren bin, kann ich die Auswirkungen einer Sachen nicht richtig einschätzen, vlt liegt es ja daran:
1. Die von mir implementierten Kindklasse SnakePanel implementiert das Interface Runnable und startet einen neuen Thread. Dieser sorgt für einen beständigen Repaint-Vorgang.
Schon mal vielen Dank im Voraus für eure Antworten!
Viele Grüße
Bubi
PS: Das ist mein erster Beitrag in diesem Forum, ich hoffe ich habe alles richtig gemacht.