Java Swing:JTable tableChanged在模型更新后不起作用

时间:2016-06-30 20:26:37

标签: java swing jtable defaulttablemodel

加载时,我的JTable有2列 - 。所以它在第一列中是一个字符串,在第二列中是一个复选框。当我点击复选框tableChanged时,我可以打印所选的行数据。

当用户在下拉列表中选择新类别时,我需要更改表格数据。 更新表数据后,单击复选框,不再触发tableChanged。 这就是我所拥有的: 这是我更新表格数据的方式:

 comboBox.addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {

                    String t = (String) comboBox.getSelectedItem();
                    if (t.equals("survey2")) {
                        String[] columnNames = { "Volume Name", "Select" };
                        Object[][] data = { { "pt1", false }, { "pt2", false },
                                { "pt3", false }, { "pt4", false },

                        };

                        model = new DefaultTableModel(data, columnNames);

                        table.setModel(model);

                    }
                }
            });

这是我的表改变:

table.getModel().addTableModelListener(new TableModelListener() {
            @Override
            public void tableChanged(TableModelEvent e) {


                if ((Boolean)table.getModel().getValueAt(table.getSelectedRow(), 1)) {


                    System.out.println(">\t"
                            + table.getValueAt(table.getSelectedRow(), 0));

                } else {

                    System.out.println(">\t"
                            + table.getValueAt(table.getSelectedRow(), 0));
                }

            }
        });

我不明白为什么在更新模型后不会触发事件。我是否错误地更新了表格?

1 个答案:

答案 0 :(得分:1)

您在区域内创建了新的<Router>,但您已将TableModel添加到旧的ChangeListener

不要创建新的TableModel!

您可以使用TableModel清除数据。

您可以使用以下方法将新数据添加回setRowCount(0)

  1. DefaultTableModel方法或
  2. 使用setDataVector(...)方法一次一行地将数据添加回模型。
  3. 因此无需创建新的TableModel。如果要创建新的TableModel,则还需要将ChangeListener添加到此新模型中。