加载时,我的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));
}
}
});
我不明白为什么在更新模型后不会触发事件。我是否错误地更新了表格?
答案 0 :(得分:1)
您在区域内创建了新的<Router>
,但您已将TableModel
添加到旧的ChangeListener
。
不要创建新的TableModel!
您可以使用TableModel
清除数据。
您可以使用以下方法将新数据添加回setRowCount(0)
DefaultTableModel
方法或setDataVector(...)
方法一次一行地将数据添加回模型。因此无需创建新的TableModel。如果要创建新的TableModel,则还需要将ChangeListener添加到此新模型中。