繁体   English   中英

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

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

加载时,我的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);

                    }
                }
            });

这是我的tableChanged:

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添加到此新模型中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM