Полностью обновляйте данные JTable каждый раз, когда я выполняю функцию

Можете ли вы помочь мне сделать этот фрагмент кода работоспособным? Я создал таблицу, которая меняет свои данные каждый раз, когда запускается функция. Код состоит из трех классов.

Настольная модель

public class MyTableModel extends AbstractTableModel {


private static final long serialVersionUID = 1L;

private static String[] header = {"A", "B","C", "so on"};


public MyTableModel(){

}

RecordingList data = new RecordingList();

public void addData(RecordingList dataIn) {
    data=dataIn;
    this.fireTableDataChanged();

    }

@Override
public int getColumnCount() {
    return header.length; //length;
}

@Override
public int getRowCount() {
    return data.size();

}

@Override
public String getColumnName(int col) {
    return header[col];
}

@Override
public String getValueAt(int row, int col)
{
    Object[] rowSelected = data.getRecordingRow(row);

    return rowSelected[col].toString();

}

}

JTable

 public class DynamicTable extends JTable implements TableModelListener{

/**
 * 
 */
MyTableModel model;

private static final long serialVersionUID = 1L;

public DynamicTable() {

    model = new MyTableModel();
    initialize();

}

void initialize(){


        setFillsViewportHeight(true);
        setModel(model);
        getModel().addTableModelListener(this);
        setForeground(Color.BLACK);
        setShowGrid(true);
        setShowVerticalLines(true);
        setBackground(Color.WHITE);

        try {
            // 1.6+
            setAutoCreateRowSorter(true);
        } catch(Exception continuewithNoSort) {
    }
}
public void tableChanged(TableModelEvent e) {

    TableModel newModel = (TableModel)e.getSource();
    model=(MyTableModel)newModel;
    setModel(model);

    // Do something with the data...
}
}

Наконец, я реализовал третий класс, которому необходимо обновить таблицу и модель.

Это, очевидно, действительно НЕПРАВИЛЬНЫЙ подход, и я поместил его здесь, чтобы дать вам понимание того, чего я пытаюсь достичь:

   RecordingList recordingList = cr.getResultQuery();

            MyTableModel newModel = new MyTableModel();
            newModel.addData(recordingList);

            TableModelEvent event= new TableModelEvent(newModel);

            DynamicTable dt =new DynamicTable() ;
            dt.tableChanged(event);

person QGA    schedule 19.02.2014    source источник
comment
как вы хотели сбросить текущие данные   -  person mKorbel    schedule 19.02.2014


Ответы (1)


Вы должны создать новый объект MyTableModel, а затем просто использовать его для установки текущей отображаемой модели JTable. Вот и все. Ключевым моментом является получение ссылки на отображаемую в данный момент JTable, и все это будет зависеть от структуры вашего кода и от того, какие ссылки вы где передали.

Я не уверен, чего вы пытаетесь достичь с помощью TableModelEvent, но в этом нет необходимости.

Если этого ответа недостаточно, вам нужно будет создать и опубликовать свой минимальный, компилируемый, исполняемый пример программы, чтобы мы могли лучше понять твоя проблема.

person Hovercraft Full Of Eels    schedule 19.02.2014
comment
Я сталкиваюсь с кошмаром, потому что класс, который создает модель таблицы, очень вложен, а таблица - нет, и я не могу легко ссылаться на объект таблицы внутри него. Вот почему я пытался использовать интерфейс, который реализует события - person QGA; 20.02.2014