[英]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
:
setDataVector(...)
方法,或 addRow(...)
方法一次将数据添加回模型中。 因此,无需创建新的TableModel。 如果要创建新的TableModel,则还需要将ChangeListener添加到此新模型中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.