Frage

Wenn ich eine Zeile in einer JTable wählen, meine JTable nicht mehr aktualisiert. Wenn ich nicht eine Zeile auswählen, unter dem Code wie erwartet funktioniert. Eine Zeile wird hinzugefügt, um die JTable.

    @Override
public void update (Observable arg0, Object arg1)
{
    if (arg0 instanceof Logger)
    {
        LogItem last = systemController.logController.getLog().getLastLogItem();
        this.history.add(last);
        this.logTableModel.addItem(last);

        this.logTable.tableChanged(new TableModelEvent(this.logTableModel));
        ((DefaultTableModel)this.logTable.getModel()).fireTableStructureChanged();
        this.logTable.repaint();
        this.logTable.doLayout();
    }

}

Wenn ich das Fenster schließen und wieder öffnen, kann ich die neue Zeile sehen.

Kann mir jemand erklären, warum nach Auswahl einer Zeile, ich mehr keine Updates in der JTable sehen?

War es hilfreich?

Lösung

Ist das Update () -Aufruf im Thread Swing-Ereignis passiert? Wenn nicht, müssen Sie den Code, um wie mit etwas eingewickelt werden:

SwingUtilities.invokeLater(new Runnable() { public void run() {
  logTableModel.addItem(last);
}});

Andere Tipps

Es gibt eine Reihe von Problemen mit Ihrem Code. Sie sollten anrufen fireTableStructureChanged nicht, da dies der Tabellenstruktur (Anzahl der Spalten usw.) im Zusammenhang ändert sich nicht die Tabellendaten selbst (das Hinzufügen einer Zeile, einen Zellwert usw. ändern). Außerdem sollten Sie nicht rufen müssen repaint und doLayout auf dem Tisch selbst, da dies durch Modellwechsel ausgelöst werden soll.

Ich glaube, Sie haben einen Blick sollte unter So verwenden Tabellen aus dem Tutorial Java, speziell Blick auf Tischmodelle unter Verwendung von Datenänderungen zu hören und Datenänderungsereignisse zu feuern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top