Focus beim öffnen eines neuen JFrames

Status
Nicht offen für weitere Antworten.

m1cHi

Mitglied
huhu,
ich hab ein kleines Problem mit dem Focus.
Ich habe ein kleines Spielchen programmiert welches man mit den Pfeiltasten (KeyListener) gesteuert wird. Dieses Spiel läuft in einem JFrame ab. Diesem JFrame ist auch der KeyListener geadded.
Jetzt wollte ich noch ein kleines Menü schreiben indem man ein paar Einstellungen machen kann und das Level auswählen kann (ein extra JFrame mit einer JCombobox und einigen Buttons).

Das ganze soll so funktionieren:
Wenn das Programm gestartet wird öffnet sich das kleine Fenster für die Einstellungen. Sind alle Einstellungen gemacht drückt der Spieler einen "start" Button in diesem Fenster. Das kleine Fenster soll sich schliessen und das große Fenster in dem das Spiel abläuft soll sichtbar werden. Ist das Spiel zuende soll sich das große Fenster wieder schliessen und das kleine Fenster wieder sichtbar werden.

sobalt ich nun "start" drücke öffnet sich zwar das große Fenster. Aber der KeyListener funktioniert nicht. Nach ein bisschen suchen bin ich dazu gekommen das es wohl daran liegt das der JFrame des großen Fensters kein Focus hat.
Ich habe es jetzt mit requestFocus() probiert, allerdings ohne Erfolg. Wenn ich mir danach isFocused() ausgeben lasse kriege ich immernoch false als Ergebnis.
Wie kriege ich den Focus auf dieses Fenster? :?:


Der ActionListener in meinem kleinen Fenster:

Code:
	public void actionPerformed(ActionEvent e) {
   		if (e.getActionCommand() == "Start") {
            frame.setVisible(false);
			   game = new Game();
            frame.setVisible(true);
		}
                .....
	}


Im Konstruktor meiner Game Klasse steht folgendes:
Code:
Game() {
		frame = new JFrame(":)");
		frame.setBounds(100,100,SIZE_X,SIZE_Y);
		frame.setResizable(false);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setFocusable(true);
		frame.requestFocus();
		frame.addKeyListener(new GameKeyListener(background));
	   frame.setVisible(true);
                ....
}

/e:
Um eventuelle Verwirrung zu beseitigen: frame heißt mein JFrame in dem kleinen Fenster und der JFrame in dem großen Fenster. Es sind also beides nicht die selben JFrames.
 

m1cHi

Mitglied
Habe ich schon. Habe aber auch keinen Unterschied feststellen können :(

Ich habe eben bemerkt das der KeyListener doch reagiert. Allerdings erst am Ende des Spiels (wenn sich das große Fenster wieder schliesst).
Um dahinter zu kommen hab ich eben mal 2 Testprogramme geschrieben in denen genau das selbe Problem auftritt.

Code:
public class Fenster1 {
    private JFrame frame;
    private JButton button;
    
    Fenster1() {
        frame = new JFrame("Fenster1");
        button = new JButton("Button");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("button gedrückt");
                frame.setVisible(false);
                new Fenster2();
            }
        });
        frame.add(button);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(300, 300, 200, 200);
        frame.setVisible(true);
    }
    
    public static void main(String args[]) {
        new Fenster1();
    }
}

Code:
public class Fenster2 {
    private JFrame frame;
    
    Fenster2() {
        frame = new JFrame("Fenster2 :)");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(100, 100, 200, 400);
        frame.setVisible(true);
        
        frame.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                System.out.println("Taste gedrückt (Fenster2)");
            }
        });
        for (int a=0; a<50; a++) {
            try {
                Thread.sleep(100);
            } catch (Exception e) { }
            Graphics g = frame.getGraphics();
            g.drawRect(a, a, 100, 100);
        }
    }
    
    public static void main (String args[]) {
        new Fenster2();
    }
}

Die Klasse Fenster1 erstellt einfach nur ein Fenster mit einem JButton. Sobalt man den Button drückt öffnet sich Fenster2. Fenster2 zeichnet 50 Rechtecke mit kleinen Zeitabständen. Zudem hat Fenster2 einen KeyListener der "Taste gedrückt" ausgibt sobalt man eine Taste drückt.

Wenn ich jetzt die main Methode der Klasse Fenster2 aufrufe funktioniert alles wunderbar. Die Rechtecke werden gezeichnet und wenn ich währenddessen eine Taste drücke wird "Taste gedrückt" auf der Console ausgegeben.

Wenn ich allerdings die main Methode von der Klasse Fenster1 starte öffnet sich das Fenster mit dem Button. Wenn ich den Button drücke verschwindet das Fenster wieder und Fenster2 erscheint. Die Rechtecke werden gezeichnet. Allerdings passiert nichts wenn ich eine Taste drücke. Wenn dann alle Rechtecke gezeichnet sind werden auf der Console erst die Meldungen "Taste gedrückt" ausgegeben.

Woran liegt das und wie krieg ich das weg? :?
 

Wildcard

Top Contributor
Deine Schleife blockiert den EventDispatcher-Thread. Solange sie läuft können keine Events verarbeitet werden.
 

m1cHi

Mitglied
Aber wieso blockiert die Schleife diesen Thread nur wenn ich das Fenster aus dem anderen Fenster heraus starte? Wenn ich es direkt starte funktioniert ja alles wunderbar :(
 

Wildcard

Top Contributor
Die main Methode läuft nicht im EDT. Der wird still und leise im Hintergrund gestartet.
Wenn du das eine Fenster aber aus dem anderen heraus started, dann bist du bereits im EDT, woraufhin dieser blockiert.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D ComboBoxCellEditor Refresh beim Focus AWT, Swing, JavaFX & SWT 4
D Beim Starten ein JTextfield Focus geben AWT, Swing, JavaFX & SWT 7
E Focus auf titledborder AWT, Swing, JavaFX & SWT 8
B JavaFX TextInputDialog: Focus auf Eingabefeldinhalt setzen und nach OK Inhalt leeren AWT, Swing, JavaFX & SWT 5
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
xYurisha Gui Focus von JTextField weglenken AWT, Swing, JavaFX & SWT 6
O Focus zwischen Chat und Spiel wechselns AWT, Swing, JavaFX & SWT 3
T bekomme keinen Focus auf JTextField AWT, Swing, JavaFX & SWT 3
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
K JavaFX Focus Listener für gesamte Scene AWT, Swing, JavaFX & SWT 1
C JOptionPane.showConfirmDialog() -> Focus auf NEIN -> Enter gibt YES_OPTION zurück AWT, Swing, JavaFX & SWT 6
T SWT Button soll nur sichbar sein,wenn im Textfeld der Focus ist AWT, Swing, JavaFX & SWT 4
B Swing JTextfeld bekommt nur jedes Zweite mal Focus AWT, Swing, JavaFX & SWT 11
E JTextPane Focus AWT, Swing, JavaFX & SWT 1
A Swing Focus der Radio Buttons + text bleibt gleich und gleichzeitige ausgabe zweier Objekte in 1. Fenster AWT, Swing, JavaFX & SWT 3
A Focus Problem AWT, Swing, JavaFX & SWT 4
I focus an ein jdialog geben AWT, Swing, JavaFX & SWT 3
B JInternalFrame Focus setzten geht nicht AWT, Swing, JavaFX & SWT 2
A Swing Focus auf gemalte Component AWT, Swing, JavaFX & SWT 5
H Swing JTextField in JWindow, JWindow bekommt focus zurück? AWT, Swing, JavaFX & SWT 9
M Swing Focus für Buttons deaktiviert --> keine Reaktion mehr auf Tastendrücke AWT, Swing, JavaFX & SWT 5
M focus subFrame AWT, Swing, JavaFX & SWT 3
G Force Focus für JButton AWT, Swing, JavaFX & SWT 2
lumo SWT Composite Focus AWT, Swing, JavaFX & SWT 2
T disabled Checkbox soll trotzdem Focus bekommen AWT, Swing, JavaFX & SWT 9
C Swing Focus Management AWT, Swing, JavaFX & SWT 3
lumo SWT Table Selection Color +Focus Out AWT, Swing, JavaFX & SWT 14
H Swing Focus bekommen AWT, Swing, JavaFX & SWT 4
D Swing keine Tabellen Zeilen ohne Focus AWT, Swing, JavaFX & SWT 7
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
L AWT Focus auf Fenster setzen AWT, Swing, JavaFX & SWT 4
H warum kann ich das focus event nicht abfangen ? AWT, Swing, JavaFX & SWT 5
L Swing Input Focus eines JTextFields in einer JList AWT, Swing, JavaFX & SWT 2
A Focus in JTable Cell AWT, Swing, JavaFX & SWT 3
A Focus für JApplet AWT, Swing, JavaFX & SWT 7
R Focus ermitteln AWT, Swing, JavaFX & SWT 2
C JTable Focus Handling AWT, Swing, JavaFX & SWT 2
Nitram Swing Focus im JFrame AWT, Swing, JavaFX & SWT 10
I Swing Focus Listener bei PComboBox von pswing Erweiterung AWT, Swing, JavaFX & SWT 7
V Swing Problem mit Focus setzen AWT, Swing, JavaFX & SWT 7
thE_29 Swing JTabbedPane Focus von Komponenten außerhalb AWT, Swing, JavaFX & SWT 10
B JTable getselectedrow liefert -1 wenn Focus verloren AWT, Swing, JavaFX & SWT 4
S Versuch den Focus zu klauen detektieren? AWT, Swing, JavaFX & SWT 14
SebSnake JFrame "Focus" erzwingen (wie JOptionPane) AWT, Swing, JavaFX & SWT 3
V JTabbedPane - keine "Focus"-Box auf selektiertem T AWT, Swing, JavaFX & SWT 2
L Focus für KeyListener auf verschiedene Panels AWT, Swing, JavaFX & SWT 2
O Focus im GBL steuern. AWT, Swing, JavaFX & SWT 3
K Focus an das JPanel übergeben AWT, Swing, JavaFX & SWT 2
K Focus-Problem AWT, Swing, JavaFX & SWT 9
O TextBoxen Focus über Pfeiltasten steuern AWT, Swing, JavaFX & SWT 3
G Problene mt Focus unter Swing AWT, Swing, JavaFX & SWT 7
G JTable und Focus AWT, Swing, JavaFX & SWT 30
J JTextPane bekommt keinen Focus! AWT, Swing, JavaFX & SWT 3
P TextFeld Focus entfernen AWT, Swing, JavaFX & SWT 2
F Problem mit Actions, TextComponents und Focus AWT, Swing, JavaFX & SWT 2
K Focus mit Mouseclick auf JPanel setzen AWT, Swing, JavaFX & SWT 4
D Focus auf JPanel setzen AWT, Swing, JavaFX & SWT 2
B JTable - Focus - TabTaste AWT, Swing, JavaFX & SWT 2
D Focus in bestimmter Celle in JTable AWT, Swing, JavaFX & SWT 3
B Komponente in JTable bekommt keinen Focus AWT, Swing, JavaFX & SWT 3
O JTextField- Selection / Focus bei nicht editierbaren Feldern AWT, Swing, JavaFX & SWT 2
J Focus auf JFrame AWT, Swing, JavaFX & SWT 3
B Focus für Textfeld AWT, Swing, JavaFX & SWT 5
B im JTree Focus setzen und navigieren AWT, Swing, JavaFX & SWT 3
B JInternalFrame in den Vordergrund rücken + Focus AWT, Swing, JavaFX & SWT 15
D JTable: Focus auf Zelle markiert ihren Text zum editieren AWT, Swing, JavaFX & SWT 2
C Komponente mit Focus bevor JButton-Klick merken. AWT, Swing, JavaFX & SWT 6
L Focus setzen AWT, Swing, JavaFX & SWT 3
G JTabbedPane, Focus, ChangeListener AWT, Swing, JavaFX & SWT 1
B Focus in JOptionPane AWT, Swing, JavaFX & SWT 2
J Focus-Problem bei Vollbildmodus AWT, Swing, JavaFX & SWT 7
A Combobox Focus-Events, Tab in Tabelle AWT, Swing, JavaFX & SWT 7
F Fenster in den Vordergrund aber nicht im Focus AWT, Swing, JavaFX & SWT 21
O Abfrage ob eine bstimmte Komponente den Focus hat AWT, Swing, JavaFX & SWT 4
T JTable Focus auf Zelle setzen AWT, Swing, JavaFX & SWT 3
R Focus durch "tabben" von JTable Zelle auf andere K AWT, Swing, JavaFX & SWT 8
R Focus speeren AWT, Swing, JavaFX & SWT 2
K JList - merkwürdiges Verhalten bei Leertaste (unter Focus) AWT, Swing, JavaFX & SWT 7
W Components Focus mit TAB-Taste VERTIKAL bewegen AWT, Swing, JavaFX & SWT 4
V JTextField Focus Cursor setzen AWT, Swing, JavaFX & SWT 2
D jcolorchooser - lost focus AWT, Swing, JavaFX & SWT 2
R Focus auf bereits geöffnetes Fenster setzen AWT, Swing, JavaFX & SWT 9
O Welche Möglichkeit zum Focus setzen! AWT, Swing, JavaFX & SWT 2
R JMenu copy Focus-Problem AWT, Swing, JavaFX & SWT 2
M Focus einstellen AWT, Swing, JavaFX & SWT 3
G Focus so setzen, daß in einer jTextArea der Cursor blinkt AWT, Swing, JavaFX & SWT 7
G JTable: Rahmen bei Focus um Zelle AWT, Swing, JavaFX & SWT 2
thE_29 Modaler Dialog - close on not focus AWT, Swing, JavaFX & SWT 3
P Focus auf JFrame AWT, Swing, JavaFX & SWT 5
G JOptionPane verliert Focus AWT, Swing, JavaFX & SWT 3
A JTree Problem mit Focus bzw. Selection AWT, Swing, JavaFX & SWT 5
C Focus setzen AWT, Swing, JavaFX & SWT 2
G JTree Focus setzen AWT, Swing, JavaFX & SWT 2
F HILFE!!! Focus-Probleme bei unterschiedlichen Panel's AWT, Swing, JavaFX & SWT 3
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe AWT, Swing, JavaFX & SWT 10
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben