Deaktivieren Sie die Enter-Taste aus nach unten bewegen, eine Zeile in JTable
Muss ich überschreiben Sie die enter-Taste Funktionen auf einer JTable. Derzeit das Standard-Verhalten ist das verschieben der Zeilen-Auswahl um eine Zeile nach unten, wenn der Benutzer drückt die "Enter" - Taste. Ich möchte dies deaktivieren, und Holen Sie es, etwas anderes zu tun, basierend auf Ihrer Auswahl. Das problem ist, dass es scheint, nach unten zu bewegen, bevor es weiter geht in meinem keylistener, die dauert in der Zeile selection - dadurch öffnet sich ein weiteres Fenster mit dem falschen Zeile ausgewählt.
Dies ist mein code so weit...:
public class MyJTable extends JTable {
public MyJTable(){
setRowSelectionAllowed(true);
addListeners()
}
public void addListeners(){
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
openChannel();
}
}
});
}
public void openChannel(){
for (int selectedRow : getSelectedRows()){
//Code to open channel based on row selected
}
}
}
KeyListener
ist nicht der Weg zu gehen, Swing-Komponenten verwendenKeyBinding
s. So gibt es eine remove-Methode entfernen SieKeyBinding
s ausJTable
, und fügen Sie Ihre eigenen.- unrelated: die JSomething bestimmt sind - nicht-Unterklasse, wenn Sie erreichen die gleiche Konfiguration.
- Vielen Dank für Eure Antworten, das funktioniert Super. @Kleopatra, ich verstehe das, aber dieser JTable muss erweitert werden, das Beispiel wurde nur einige test-code, so dass Sie sehen können, was das problem war. Aber il tragen, dass im Geist für die Zukunft.
Du musst angemeldet sein, um einen Kommentar abzugeben.
+1 @Robin ' s Antwort
Hinzufügen zu meinem Kommentar...
Swing verwendet
Tastenbelegung
s ersetzen Sie einfach bereits existierende Funktionalität durch das hinzufügen einer neuenKeyBinding
zuJTable
(die Schönheit geschieht, weil derJComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
):einfach diese Methode aufrufen, und übergeben Sie
JTable
Beispiel zum überschreiben der standard-Funktionalität vonJTable
ENTERUmgesetzt wird dies mit Hilfe von key-bindings, die sich bevorzugt über die wichtigsten Hörer. Ich empfehle Ihnen das gleiche zu tun: ersetzen Sie Ihre key-listener, indem Sie eine Tastenkombination.
Die Lösung ist, ersetzen Sie den Eintrag in der InputMap, um zu Ihrer eigenen Aktion (die Sie einfügen in die action-Karte), oder ersetzen Sie einfach den entsprechenden Eintrag in der action map.
Den key bindings-tutorial enthält mehr info