Java Swing : JTable tableChanged does not work after model is updated

标签 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 更改:

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));
                }

            }
        });

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

最佳答案

您创建了一个新的 TableModel,但将 ChangeListener 添加到了旧的 TableModel

不要创建新的 TableModel!

您可以使用setRowCount(0)清除数据。

您可以使用以下方法将新数据添加回 DefaultTableModel:

  1. setDataVector(...) 方法,或
  2. 使用 addRow(...) 方法将数据一次一行地添加回模型。

所以不需要创建新的TableModel。如果您想创建一个新的 TableModel,那么您还需要将 ChangeListener 添加到这个新模型中。

关于Java Swing : JTable tableChanged does not work after model is updated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132646/

相关文章:

Java:各种精度数据的简单格式标准

java - 将 SQL 对象添加到 JTable

java - 有没有办法隐藏标题栏,但将按钮保留在 JFrame 中

java - JFrame 中的 DefaultTableModel 仅在行上创建 - JAVA

java - 单击行时如何在鼠标附近显示图像

java - JTextField 在最后 2 秒内未触发更改事件后发送数据

java - 如何在不在物理位置创建 zip 文件的情况下发送它?

java - 如何通过在url中给出路径来上传文件

java - 如何在不获得焦点的情况下重新绘制失焦对话框?

java - 如何设置 JFrame 大小以适合 CardLayout 显示的 JPanel?