Hi
Nachdem ich mich etwas mit anderen Programmiersprachen beschäftigt habe möchte ich nun wieder einmal ein 2D Spiel in Java programmieren. Ich habe dabei einen JFrame, den ich maximiere. Dieser hat dann by default den Fokus. Zu Beginn wird ein Menu (in einem JPanel, der mit maximaler Grösse auf dem JFrame liegt) angezeigt mit einem Start JButton. Wenn dieser angeklickt wird soll der JPanel "GamePanel" mit maximaler Grösse erscheinen. Dem GamePanel möchte ich nun einen KeyListener hinzufügen, was jedoch nicht so läuft wie ich möchte, da der GamePanel nie den Fokus bekommt.
Da es bereits einiges an Code ist kann ich schlecht den ganzen Code zeigen. Ich kann euch aber ein par Ausschnitte geben. Wenn ihr mehr braucht kann ich das dann gerne nachliefern:
Der Konstruktor der Klasse Main (Main ist von JFrame abgeleitet)
[Java]
private Main() {
container = getContentPane();
showMenu();
initializeMainWindow();
}
[/Java]
und noch zwei Methoden aus der Klasse Main:
[Java]
public void showMenu(){
container.removeAll();
if( gameMenu == null )
gameMenu = new GameMenu( this );
container.add( gameMenu );
container.repaint();
}
private void initializeMainWindow() {
this.setExtendedState( JFrame.MAXIMIZED_BOTH );
this.setUndecorated( true );
this.setVisible( true );
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
[/Java]
Um nun den GamePanel anzuzeigen habe ich folgende Methode in der Klasse Main:
[Java]
public void showGamePanel(){
container.removeAll();
gamePanel = new GamePanel( this );
container.add( gamePanel );
container.repaint();
}
[/Java]
Der Konstruktor von GamePanel sieht so aus:
[Java]
protected GamePanel( Main main ) {
this.main = main;
this.setSize( Main.getScreenWidth(), Main.getScreenHeight() );
this.addKeyListener( new GamePanelListener( this ) );
initializeLists(); // creates lists and adds the levels
}
[/Java]
Ich hatte schon früher Probleme damit, dass die gewünschte Komponente nicht den Fokus hat. Wenn ich den KeyListener auf den JFrame lege, dann funktioniert er. Ich möchte den KeyListener aber lieber nicht auf dem JFrame.
Hat jemand eine Idee wie ich dieses Problem lösen kann? Ich habe schon diverse Dinge ausprobiert wie 'requestFocusInWindow()' und solches. Hat leider nichts gebracht.
PS:
Ich hoffe, dass ich mich verständlich ausdrücken konnte ^^
Nachdem ich mich etwas mit anderen Programmiersprachen beschäftigt habe möchte ich nun wieder einmal ein 2D Spiel in Java programmieren. Ich habe dabei einen JFrame, den ich maximiere. Dieser hat dann by default den Fokus. Zu Beginn wird ein Menu (in einem JPanel, der mit maximaler Grösse auf dem JFrame liegt) angezeigt mit einem Start JButton. Wenn dieser angeklickt wird soll der JPanel "GamePanel" mit maximaler Grösse erscheinen. Dem GamePanel möchte ich nun einen KeyListener hinzufügen, was jedoch nicht so läuft wie ich möchte, da der GamePanel nie den Fokus bekommt.
Da es bereits einiges an Code ist kann ich schlecht den ganzen Code zeigen. Ich kann euch aber ein par Ausschnitte geben. Wenn ihr mehr braucht kann ich das dann gerne nachliefern:
Der Konstruktor der Klasse Main (Main ist von JFrame abgeleitet)
[Java]
private Main() {
container = getContentPane();
showMenu();
initializeMainWindow();
}
[/Java]
und noch zwei Methoden aus der Klasse Main:
[Java]
public void showMenu(){
container.removeAll();
if( gameMenu == null )
gameMenu = new GameMenu( this );
container.add( gameMenu );
container.repaint();
}
private void initializeMainWindow() {
this.setExtendedState( JFrame.MAXIMIZED_BOTH );
this.setUndecorated( true );
this.setVisible( true );
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
[/Java]
Um nun den GamePanel anzuzeigen habe ich folgende Methode in der Klasse Main:
[Java]
public void showGamePanel(){
container.removeAll();
gamePanel = new GamePanel( this );
container.add( gamePanel );
container.repaint();
}
[/Java]
Der Konstruktor von GamePanel sieht so aus:
[Java]
protected GamePanel( Main main ) {
this.main = main;
this.setSize( Main.getScreenWidth(), Main.getScreenHeight() );
this.addKeyListener( new GamePanelListener( this ) );
initializeLists(); // creates lists and adds the levels
}
[/Java]
Ich hatte schon früher Probleme damit, dass die gewünschte Komponente nicht den Fokus hat. Wenn ich den KeyListener auf den JFrame lege, dann funktioniert er. Ich möchte den KeyListener aber lieber nicht auf dem JFrame.
Hat jemand eine Idee wie ich dieses Problem lösen kann? Ich habe schon diverse Dinge ausprobiert wie 'requestFocusInWindow()' und solches. Hat leider nichts gebracht.
PS:
Ich hoffe, dass ich mich verständlich ausdrücken konnte ^^