Не получается обновить содержимое JTable при изменении DefaultTableModel. Общая идея такова: создается меню с тремя подпунктами - таблицами из базы данных. При нажатии на один из подпунктов JTable заполняется данными и выводится на экран. Проблема в том, что хотя при компиляции указанная таблица выводится на экран, при выборе другой таблицы в меню на экране не отображаются изменения. Как правильно "заставить" JTable обновить свою TableModel?
Код меню:
Font font = new Font("Verdana", Font.PLAIN, 11);
JMenuBar menuBar = new JMenuBar();
JMenu DBOperationsMenu = new JMenu("DB operations");
DBOperationsMenu.setFont(font);
JMenu entityMenu = new JMenu("Show entity");
entityMenu.setFont(font);
DBOperationsMenu.add(entityMenu);
JMenuItem ClientItem = new JMenuItem("Client");
ClientItem.setFont(font);
entityMenu.add(ClientItem);
JMenuItem EventItem = new JMenuItem("Event");
EventItem.setFont(font);
entityMenu.add(EventItem);
Код вывода новой сущности в JTable:
ClientItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String entity = "client";
CreateDBTableAndPane(entity);
}
});
Cоздание таблицы и заполнение:
public static JScrollPane CreateDBTableAndPane(String entity) {
JTable dbTable = new JTable();
DefaultTableModel dtm = null;
if(entity.equals("client")) {
dtm = Client.FillDataModel(dbTable);
}
if(entity.equals("event")) {
dtm = Event.FillDataModel(dbTable);
}
dbTable.setModel(dtm);
JScrollPane scrollPane = new JScrollPane(dbTable);
refresh(dtm);
return scrollPane;
}
public static DefaultTableModel FillDataModel(JTable clientTable) {
ArrayList<Client> list = Forms.CreateEntityList("client");
DefaultTableModel dtm = (DefaultTableModel) clientTable.getModel();
dtm.setColumnIdentifiers(Client.columnNames);
Object[] row = new Object[7];
for (int i = 0; i < list.size(); i++) {
row[0] = list.get(i).GetId();
row[1] = list.get(i).GetClientName();
row[2] = list.get(i).GetClientDOB();
row[3] = list.get(i).GetClientPhone();
row[4] = list.get(i).GetClientEmail();
row[5] = list.get(i).GetClientGender();
row[6] = list.get(i).GetClientAdress();
dtm.addRow(row);
}
return dtm;
}
Ваш слушатель вызывает метод CreateDBTableAndPane
который формирует новую таблицу и кладет на новый JScrollPanel, и возвращает его. Но вы с ним ничего не делаете. Надо удалить прошлый JScrollPanel и вставить новый.
ClientItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String entity = "client";
JScrollPanel newScroll = CreateDBTableAndPane(entity);
<панель на которой лежит scroll>.remove(<старый scroll>);
<панель на которой лежит scroll>.add(newScroll );
}
});
Виртуальный выделенный сервер (VDS) становится отличным выбором
Возникла проблема с Android 9Использую "стандартный" класс MyDataBaseOpenHelper extends SQLiteOpenHelper С выходом андроид 9 появилась проблема android
У меня есть вопрос, не могу подключить к верстаемой странице на своем ПК шрифт neris