加载时,我的 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
:
setDataVector(...)
方法,或- 使用
addRow(...)
方法将数据一次一行地添加回模型。
所以不需要创建新的TableModel。如果您想创建一个新的 TableModel,那么您还需要将 ChangeListener 添加到这个新模型中。
关于Java Swing : JTable tableChanged does not work after model is updated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38132646/