gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:45:01 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com