2016-04-09 11 views
0

Wenn es schreibt über eine Zelle von JTable, ohne diese Zelle ist im Bearbeitungszustand. Dh wenn es mit einer blauen Hintergrundfarbe gezeigt wird. Die Zelle wechselt in den Editiermodus und der geschriebene Text wird am Ende des aktuellen Textes der Editor-Komponente angezeigt (a TextField).Capture Key Ereignisse der DefaultCellEditor Komponente

In diesem Zustand hat der TextFieldDefaultCellEditor jedoch nicht den Fokus noch. Und die Schlüsselereignisse gehören nicht zum Textfeld.

Welche Komponente ist der Empfänger dieser Schlüsselereignisse? Wie kann ich diese wichtigen Ereignisse erfassen?

+1

Warum versuchen Sie die wichtigsten Ereignisse zu erfassen? – camickr

Antwort

0

Die Komponente, die die Ereignisse vor der EditorComponent erhalten, ist der Fokus der JTable selbst.

Die JTable übergibt die Schlüsselereignisse per Tastenbindung über die processKeyBinding-Methode an die Editorkomponente der ausgewählten Zelle. Aus diesem Grund werden keine wichtigen Ereignis-Listener benachrichtigt.

Mein Problem war, dass mein benutzerdefinierter Editor nicht die processKeyBinding hatte, weil es ein JPanel (zusammengesetzter Editor) war. Dann gingen die Schlüsselereignisse verloren.

Die Lösung besteht darin, die Aktion processKeyBinding mit einem benutzerdefinierten TextField mit einer puclic-Funktion zu übergeben, um diese Funktion auszuführen.

public class KeyBindingTextField extends JTextField { 
    protected boolean processKeyBindingPublic(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { 
     return super.processKeyBinding(ks, e, condition, pressed); 
    } 
} 

Dann gebe ich den Schlüssel Bindungsmethode von JPanel zu Textfield so:

protected boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) { 
    return TextField.processKeyBindingPublic(ks, e, condition, pressed); 
    } 
Verwandte Themen