3 Stimmen

AbstractTableModel setValueAt wird nicht ausgelöst, wenn auf Jbutton geklickt wird

Ich habe eine benutzerdefinierte TableModel, die das AbstractTableModel erweitert.

public class IndicatorPropertyTableModel extends AbstractTableModel

Die von mir geschriebene setValueAt-Funktion wird in Fällen korrekt ausgelöst, in denen Sie einen neuen Wert in die bearbeitbare Zelle eingeben und dann zu einer anderen Zelle wechseln. Das Problem, das ich habe, ist, dass der Benutzer für die letzte bearbeitbare Zelle sofort auf einen JButton klickt, um fortzufahren. Dadurch wird die setValueAt-Funktion nicht ausgelöst und die Daten werden nicht gespeichert. Gibt es eine Möglichkeit sicherzustellen, dass dieser Wert immer gespeichert wird, wenn ein Benutzer sofort auf einen Button drückt, nachdem er eine Zelle bearbeitet hat? setValueAt-Funktion unten als Referenz, falls benötigt.

public void setValueAt(Object value, int row, int col) {
    if (value == null)
        return;
    if (col == 0) {
        //this.indicatorArguments[row].setIsSelected(value);
    } else if (col == 2) {
        this.indicatorArguments[row].setValue(value);
    }
    this.fireTableCellUpdated(row, col);
}

Vielen Dank für jede Hilfe, die Sie bereitstellen können.

4voto

Daniel Hiller Punkte 3305

Ich gehe davon aus, dass deine Schaltfläche außerhalb der Tabelle ist.

In dem Event-Listener oder der Aktion deiner Schaltfläche benötigst du eine Referenz zur Tabelle. Diese Tabelle könntest du dann fragen, ob isEditing true zurückgibt. Dann könntest du den aktuellen Editor abrufen und nach Validierung des letzten Eingabewerts entweder stopCellEditing aufrufen, um den Wert zu bestätigen, oder cancelCellEditing, um den Wert rückgängig zu machen.

Kurz gesagt:

if(table.isEditing()){
  table.getCellEditor().stopCellEditing();
}

würde immer noch nicht eingegebene Werte bestätigen.

1voto

camickr Punkte 315810

Überprüfen, ob die Tabelle bearbeitet wird, erfordert das Hinzufügen von Code zu allen Schaltflächen auf Ihrer GUI.

Sie können möglicherweise eine einfache Ein-Zeilen-Lösung verwenden, die dies vermeidet. Schauen Sie sich Tabelle Stop Editing an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X