Поскольку программа слишком большая, я просто вставлю важные части кода. Вот проблема:
У меня есть два JTable
с. Первый собирает данные из БД и отображает список всех счетов, хранящихся в БД. Назначение второй таблицы заключается в том, что при нажатии на одну строку в таблице обработчик событий должен получить целое число из идентификатора столбца. Используя этот идентификатор, во второй таблице отобразятся все конкурсы по этому счету (все продукты, хранящиеся в нем).
Первый и второй столы работают отлично. Проблема в том, что я понятия не имею, как я могу собрать определенные данные (мне просто нужен столбец идентификатора) из выбранной строки, а затем с помощью метода, который я уже сделал, обновить второй JTable
новой информацией. Вот мой код, если это поможет:
(PS: как только я узнаю, как это сделать, список слева будет меняться каждый раз по умолчанию, когда я выбираю другую строку, или мне нужно использовать методы проверки / повторной проверки?)
public JPanel tabInvoices() {
JPanel panel = new JPanel(new MigLayout("", "20 [grow, fill] 10 [grow, fill] 20", "20 [] 10 [] 20"));
/** Labels and buttons **/
JLabel labelInv = new JLabel("List of all invoices");
JLabel labelPro = new JLabel("List of all products in this invoice");
/** TABLE: Invoices **/
String[] tableInvTitle = new String[] {"ID", "Date"};
String[][] tableInvData = null;
DefaultTableModel model1 = new DefaultTableModel(tableInvData, tableInvTitle);
JTable tableInv = null;
/** Disable editing of the cell **/
tableInv = new JTable(model1){
public boolean isCellEditable(int r, int c) {
return false;
}
};
/** Load the invoices from DB **/
List<Invoice> listInv = is.getAllInvoices();
for (int i = 0; i < listInv.size(); i++) {
model1.insertRow(i, new Object[] {
listInv.get(i).getID(),
listInv.get(i).getDate()
});
}
/** TABLE: Invoice Info **/
String[] tableInfTitle = new String[] {"ID", "Name", "Type", "Price", "Quantity"};
String[][] tableInfData = null;
DefaultTableModel model2 = new DefaultTableModel(tableInfData, tableInfTitle);
JTable tableInf = null;
/** Disable editing of the cell **/
tableInf = new JTable(model2){
public boolean isCellEditable(int r, int c) {
return false;
}
};
/** Load the products from DB belonging to this invoice **/
List<Product> listPro = is.getInvoiceInfo(1); // Here's where I need the ID fetched from selected row. For now default is 1.
for (int i = 0; i < listPro.size(); i++) {
model2.insertRow(i, new Object[] {
listPro.get(i).getID(),
listPro.get(i).getName(),
listPro.get(i).getType(),
listPro.get(i).getPrice(),
listPro.get(i).getQuantity()
});
}
/** Scroll Panes **/
JScrollPane scrollInv = new JScrollPane(tableInv);
JScrollPane scrollPro = new JScrollPane(tableInf);
panel.add(labelInv);
panel.add(labelPro, "wrap");
panel.add(scrollInv);
panel.add(scrollPro);
return panel;
}
На данный момент в правой таблице отображается только содержимое первого счета:
![enter image description here](https://i.stack.imgur.com/AFstA.png)