如何在不设置新 table 模型的情况下刷新 JTable?
How to refresh a JTable without setting a new table model?
我正在尝试使用 DefaultTableModel
刷新 JTable
,而无需再次访问 table 本身,而是仅访问现有但随后更新的 table 模型。
然而,我尝试更新 table 模型本身,然后通知模型(见代码)。由于某种原因,table 不会更新。我不知道,这是访问问题还是根本不可能。
//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
反映出来,因为它仍在使用创建时首先获取的实例.
按照您的方式公开 dtm
,打开它进行不需要的修改,并使 OO 的原则之一无效 - 封装,其中 class 负责管理其属性。这也是重新考虑使用 static
的原因
更好的开始是创建一个 getter,其中 return 是 DefaultTableModel
的单个实例,因此保证每次调用它都是 return 同一个实例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
方法,那么这很好地表明您做错了什么。
我正在尝试使用 DefaultTableModel
刷新 JTable
,而无需再次访问 table 本身,而是仅访问现有但随后更新的 table 模型。
然而,我尝试更新 table 模型本身,然后通知模型(见代码)。由于某种原因,table 不会更新。我不知道,这是访问问题还是根本不可能。
//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
反映出来,因为它仍在使用创建时首先获取的实例.
按照您的方式公开 dtm
,打开它进行不需要的修改,并使 OO 的原则之一无效 - 封装,其中 class 负责管理其属性。这也是重新考虑使用 static
更好的开始是创建一个 getter,其中 return 是 DefaultTableModel
的单个实例,因此保证每次调用它都是 return 同一个实例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
方法,那么这很好地表明您做错了什么。