Java, собирать данные из одного JTable, используя отображение изменения обработчика событий другого JTable - PullRequest
0 голосов
/ 19 марта 2012

Поскольку программа слишком большая, я просто вставлю важные части кода. Вот проблема: У меня есть два 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

1 Ответ

0 голосов
/ 19 октября 2012

С помощью следующего кода вы можете получить значение выбранной ячейки, по которой щелкнули, поэтому вам просто нужно щелкнуть ID значение ячейки (идентификатор счета-фактуры, продукты которого вы хотите видеть во второй таблице) и с помощьюследующий обработчик событий вы получите значение, а затем вы можете получить данные на основе этого идентификатора и установить для второй таблицы.(В приведенном ниже коде table является объектом вашей первой таблицы)

(Вне курса вам также придется применить некоторую проверку, чтобы убедиться, что выбранная (и выбранная) ячейка имеет значение IDне DATE)

    table.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {

            int row = table.rowAtPoint(e.getPoint());
            int col = table.columnAtPoint(e.getPoint());

            Object selectedObj = table.getValueAt(row, col);

            JOptionPane.showMessageDialog(null, "Selected ID is " + selectedObj);
        }
    });
...