更改数据后刷新JTable

时间:2013-11-13 11:42:10

标签: java swing netbeans jtable

我想在用户按下按钮后刷新并显示我的JTable。在此之前,该按钮生成Object[][],其中保存来自表的过滤数据。 过滤后的数据仅在行数上有所不同。

我正在使用netbeans UI创建器,我可以用数据填充表的唯一方法是定义abstractTableModel。 这是我的abstractTableModel的代码:

class myTable extends AbstractTableModel{
    private String[] stolpci = {"Kategorija","Podkategorija","Opis","Cena","Datum","Boni"};
    private Object[][] data = PregledovalnikGUI.vrniTabelo(); /*PregledovalnikGUI.vrniTabelo() returns a value in form of Object[][] in which the data is held*/
    public int getColumnCount() {
        return stolpci.length;
    }
    public int getRowCount() {
        return vrstice.length;
    }
    public String getColumnName(int col) {
        return stolpci[col];
    }
    public Object getValueAt(int row, int col) {
        return vrstice[row][col];
    }
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }
    public void setValueAt(Object value, int row, int col) {
        vrstice[row][col] = value;
        fireTableCellUpdated(row, col);
    }

jTable的设置如下:

Tabela.setModel(new myTable());

我需要定义哪些方法才能在运行时刷新表?

2 个答案:

答案 0 :(得分:3)

如果你创建一个新的TableModel,那么表格将自动更新。

如果更改了模型的基础数据,那么从模型内部(看作是从AbstractTableModl扩展),您可以调用fireTableDataChanged,这可以让表知道该内容表已经改变,它应该重绘。

这可能要求模型具有自己的刷新方法,或者它能够从建模的数据中侦听更改

答案 1 :(得分:3)

myTable内你可以有一个名为refresh()的方法,就像这样

public void refresh(Object[][] objects){
    //make the changes to the table, then call fireTableChanged
    fireTableChanged(null);
}

然后在按钮监听器中,调用上面的方法:

Tablea.refresh(objects);//objects stores your filtered data