Hallo, folgendes Problem:
Ich habe ein JFrame mit einem TextArea, in dem Eingaben erwartet werden und das daher den
Focus erhalten soll.
Wenn ich über ein Menü einen modalen JDialog aufrufe
und nach dessen Schließen dem TextArea den Focus (zurück) zu geben versuche, erscheint
der blinkende Cursor nicht, und Texteingaben mittels Tastatur werden ebenfalls nicht angenommen.
Erst wenn ich mit der Maus an beliebiger Stelle im Frame klicke, wird der Cursor sichtbar und
Tastatureingaben landen im TextArea.
Das Frame ist allerdings bereits vor dem Klick das aktive Fenster, wie an der Färbung des Rahmens
erkennbar ist - und andere Fenster existieren zu dem Zeitpunkt nicht.
Das Problem tritt nur nach Aufruf des modalen Dialogs auf; zu anderen Zeitpunkten erhält das
TextArea problemlos den Focus.
Gelöst werden kann das Problem zwar mit Einrichtung eines WindowFocusListener:
Aber: schön ist das nicht, auch die Alternative über einen KeyListener nicht.
Alternativen?
Ich habe ein JFrame mit einem TextArea, in dem Eingaben erwartet werden und das daher den
Focus erhalten soll.
Wenn ich über ein Menü einen modalen JDialog aufrufe
Java:
jMenuMenuSelected(){
aDlg.setVisible(true);
//Dialog wird angezeigt, Interaktion erfolgt
//Dialog wird mit aDlg.setVisible(false) geschlossen
textArea.requestFocusInWindow();
}
und nach dessen Schließen dem TextArea den Focus (zurück) zu geben versuche, erscheint
der blinkende Cursor nicht, und Texteingaben mittels Tastatur werden ebenfalls nicht angenommen.
Erst wenn ich mit der Maus an beliebiger Stelle im Frame klicke, wird der Cursor sichtbar und
Tastatureingaben landen im TextArea.
Das Frame ist allerdings bereits vor dem Klick das aktive Fenster, wie an der Färbung des Rahmens
erkennbar ist - und andere Fenster existieren zu dem Zeitpunkt nicht.
Das Problem tritt nur nach Aufruf des modalen Dialogs auf; zu anderen Zeitpunkten erhält das
TextArea problemlos den Focus.
Gelöst werden kann das Problem zwar mit Einrichtung eines WindowFocusListener:
Java:
public class aFrame extends javax.swing.JFrame implements WindowFocusListener {
public aFrame() {
addWindowFocusListener(this);
//...
}
public void windowGainedFocus(WindowEvent e) {
textArea.requestFocusInWindow();
//plus einigen Overhead, weil das textArea nicht jedesmal den Focus erhalten soll
}
public void windowLostFocus(WindowEvent e) {}
}
Aber: schön ist das nicht, auch die Alternative über einen KeyListener nicht.
Alternativen?