JTable-Aktualisierungen werden nicht angezeigt

Ich versuche verzweifelt, meine zu überzeugenJTable zu aktualisieren, wenn ich seine Daten ändere. Die Daten werden in einem globalen Singleton gespeichert,TreeSet, mit denen ich arbeite. Wann immer dieTreeSetWenn die Daten geändert werden, wird ein Ereignis ausgelöst, um die Daten zu aktualisierenTableModel. Zu Testzwecken habe ich dies durch ein einfaches ersetztTimer Ereignisse auslösen.

Jedes Mal, wenn ein Ereignis ausgelöst wird, wird ein Element aus derTreeSet wird entfernt, um Änderungen an den Daten zu simulieren. Die Veranstaltung brennt und dieTableClass empfängt es und verarbeitet es wie erwartet, aber wenn es um das Auffrischen geht, passiert nichts. Ich habe versucht, eine neue zu erstellenTableModel jedes Mal, wenn ein Ereignis auftritt, setzen Sie es auf die globale Tabelle. Die Änderungen am SingletonTreeSet gemacht, aber nichts passiert mit demJTable.

<code>public class TreeTableObj implements ActionListener{
public JTable table ;

public TreeTableObj(){
    MyTableModel myModel = new MyTableModel(getValuesOfTreeSet(), getTreeSetRows());

    table = new JTable( myModel){ //some rendering };

    table.setAutoCreateRowSorter(true);
    }

    class MyTableModel extends AbstractTableModel {
        private String[] columnNames;
        private Object[][] data ;


        public MyTableModel(Object[][] data, String[] columnNames){
            this.data = data;
            this.columnNames = columnNames;
            System.out.println("Model created");
        }

        public int getColumnCount() {
            return columnNames.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }

        public void setData(Object[][] data){
            this.data = data;
            fireTableDataChanged();
        }


        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }


        public boolean isCellEditable(int row, int col) {
            if (col < 2) {
                return false;
            } else {
                return true;
            }
        }


        public void setValueAt(Object value, int row, int col) {
            if (true) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }

            data[row][col] = value;
            fireTableCellUpdated(row, col);

            if (true) {
                System.out.println("New value of data:");
                printDebugData();
            }
        }

        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();

            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }
    }

    public void refreshTableModel(){
        FlightsTreeSet.getInstance().remove(FlightsTreeSet.getInstance().first());
        table.setModel(new MyTableModel(getValuesOfTreeSet(), getTreeSetRows()));
        }

    public void actionPerformed(ActionEvent arg0) {
        refreshTableModel();    
    }
}
</code>

Jede Hilfe wäre dankbar!

[EDIT1]

Ich nähere mich den Problemen. Kern: Ich habe herausgefunden, dass die Tabelle, die im JFrame angezeigt wird, eine andere Referenz enthält als die, die ich ändere. Ich habe alle Änderungen sichtbar gemacht und sie gelten für das Modell.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage