2017-11-02 4 views
0

Ich habe eine JTable (Master), zu dem ich eine ListSelectionListener zu fangen, wenn eine Zeile ausgewählt ist, und füllen Sie eine andere JTable (Detail) nach der ausgewählten Zeile. Nun haben sich einige Anforderungen geändert und wenn die Bedingungen erfüllt sind, wenn der Benutzer in eine andere Zeile klickt, sollte ich eine JOptionPane mit JA/NEIN Optionen anzeigen, und nur wenn JA geklickt wird, dann kann die neue Zeile ausgewählt werden. Wie kann ich das erreichen? Soll ich immer ListSelectionListener verwenden? Ich glaube nicht, da es erst nach der Auswahl ausgelöst wird.JTable: Warten auf Zeile nach Benutzereingabe ausgewählt werden

Antwort

1

ja, sicher

table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){ 
     public void valueChanged(ListSelectionEvent event) { 
      // do some actions here, for example 
      // print first column value from selected row 
      System.out.println(table.getValueAt(table.getSelectedRow(), 0).toString()); 
     } 
    }); 
+0

Vielen Dank für Ihre Antwort, aber ich fürchte, das ist nicht was ich brauche, denn wenn valueChanged() ausgelöst wird, wurde die neue Zeile bereits gesetzt, unabhängig davon, ob der Benutzer ja oder jetzt im JOptionPane geklickt hat. Stattdessen brauche ich es wartet –

+0

ahh, sr über mein Missverständnis, sollten Sie einen TableModelListener wie beschrieben https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#modelchange hinzufügen. auch, in Ihrem Hörer, sobald Sie den Wert der anderen Zelle Werte programmatisch aktualisiert haben, müssen Sie model.fireTableCellUpdated aufrufen, um swing über die Änderungen zu wissen https://docs.oracle.com/javase/6/docs /api/javax/swing/table/AbstractTableModel.html#fireTableCellUpdated%28int,%20int%29 –

0

, wenn der Benutzer klickt in einer anderen Zeile,

Was ist, wenn der Benutzer verwendet, um die Auf-/Ab-Pfeiltaste zu einer anderen Zeile zu bewegen?

Das Standardverhalten in beiden Fällen ist die automatische Auswahl der Zeile.

Sie können möglicherweise die changeSelection(...)-Methode der JTable überschreiben. Ich glaube, das ist die Methode, die von der Maus- oder Tastaturlogik aufgerufen wird, um die Zeilenauswahl zu ändern.

Sie würden also Ihre Logik hinzufügen, um das Optionsfeld anzuzeigen, und dann, wenn "Ja" ausgewählt ist, würden Sie super.changeSelection(...) aufrufen.

Allerdings würde ich es frustrierend finden zu versuchen, die Tastatur zu verwenden, um in der Tabelle nach unten zu scrollen, wenn dieser Optionsbereich immer wieder auftaucht. Denken Sie daran, eine Benutzeroberfläche zu entwickeln, die sowohl Maus als auch Tastatur effektiv unterstützt.

Verwandte Themen