![](/img/trans.png)
[英]How to refresh a table (JTable) without changing the ordering done with setAutoCreateRowSorter?
[英]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
的新實例並將其分配給dtm
, JTable
不會反映出來,因為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.