簡體   English   中英

如何在不設置新表模型的情況下刷新JTable?

[英]How to refresh a JTable without setting a new table model?

我試圖使用DefaultTableModel刷新JTable ,而不再次訪問表本身,但僅訪問現有表,然后再更新表模型。

但是,我嘗試更新表模型本身,然后將其通知模型(請參見代碼)。 由於某種原因,該表將不會更新。 我不知道這是訪問問題還是無法實現。

//in the Gui_Main class 
private static void addTables(){
   JTable tblMain = new JTable(Util_Tables.dtm);
}

//in the Util_Tables class, if the tables needs to be updated
public static DefaultTableModel dtm;

public static void updateTable(){
   dtm = new DefaultTableModel(data, columns);
   dtm.fireTableDataChanged();
}

所以您的基本結構無處不在。 當創建DefaultTableModel的新實例並將其分配給dtmJTable不會反映出來,因為JTable仍在使用創建時首先抓取的實例。

公開dtm的方式,將其開放給不良的修改,並使OO的原理之一-封裝(encapsulation),其中類負責其屬性的管理。 這也是重新考慮使用static的原因

更好的開始是創建一個getter,該方法返回一個DefaultTableModel實例,因此對它的每次調用都可以保證返回相同的DefaultTableModel實例,並阻止其他任何實例更改基礎引用

private static void addTables(){
   JTable tblMain = new JTable(Util_Tables.getModel());
}


//in the Util_Tables class, if the tables needs to be updated
private DefaultTableModel model;
public static DefaultTableModel getModel() {
    if (model == null) {
        model = new DefaultTableModel();
    }

}

好的,那么更新模型呢? 好吧,您需要從修改updateTable方法開始,以便可以使用它以某種有意義的方式實際更新模型

public static void updateTable(Object[][] data, Object[] columnIdentifiers){
   model.setDataVector(data, columnIdentifiers);
}

然后,該模型將生成自己需要的事件。 如果您發現自己在調用fireXxx方法,則表明您做錯了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM