Таким образом, ваша основная структура повсюду.Когда вы создаете новый экземпляр DefaultTableModel
и присваиваете ему dtm
, это не будет отражено JTable
, так как он все еще использует экземпляр, который был впервые получен при его создании.
Разоблачение dtm
так, как вы это делаете, открывает его для нежелательной модификации и аннулирует один из принципов ОО - инкапсуляции, когда класс отвечает за управление своими свойствами.Это также является причиной для пересмотра использования static
Лучше было бы создать метод получения, который возвращает один экземпляр 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
, то это хороший признак того, что вы делаете что-то не так.