Axel Richter: JTable - Zelle automatisch selektieren

Beitrag lesen

Hallo,

Ich habe in einer JTable 2 Spalten. Nun ist es so, dass nach der Eingabe von Daten in eine bestimmten Zelle nach dem Drücken der Enter-Taste die nächste selektierte Zelle automatisch jene unterhalb der gerade editierten ist. D.h., dass die Selektion automatisch in der selben Spalte bleibt, und eine Zeile weiter hinunter springt. Ich will es aber erreichen, dass der "Cursor" nach dem editieren eines Feldes in der ersten Spalte (und nach dem Enter-Drücken) in der selben Zeile bleibt, und die 2. Spalte in der Zeile, in der gerade die erste Spalte editiert wurde, automatisch ausgewählt wird. Nach dem Editieren der 2. Spalte soll der Cursor nun in die nächste Zeile springen, aber jetzt wieder in die erste Spalte, wodurch man jede Zelle nacheinander durch das Enter-Drücken durchgehen können soll.
Welche Klassen muss ich dafür verwenden? Ich weiß nämlich nicht wonach ich suchen soll, da ich bisher nicht fündig gewordne bin.

Jedes JComponent hat Keybindings, so auch JTable. Diese Keybindimgs arbeiten mit InputMaps und ActionMaps. Die Tatsache, dass bei [Enter] eine Zeile tiefer gegangen wird, resultiert daraus, dass dies in der InputMap [JTable].WHEN_ANCESTOR_OF_FOCUSED_COMPONENT so für [Enter] definiert ist. Diese Standarddefinition kannst Du verändern.

Sei table ein JTable:

  
table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "selectNextColumnCell");  

Was [InputMap].put(KeyStroke keyStroke, Object actionMapKey) und KeyStroke.getKeyStroke() machen, bekommst Du in der API-Doku heraus. Was der "actionMapKey" bei [InputMap].put(KeyStroke keyStroke, Object actionMapKey) ist, wird meines Wissens nach nirgends so recht beschrieben. Man kann sich eine Übersicht verschaffen mit:

  
Object[] allTableActionMapKeys = table.getActionMap().allKeys();  
for(int i = 0; i <  allTableActionMapKeys.length; i++) {  
   System.out.println(allTableActionMapKeys[i]);  
}  

viele Grüße

Axel