我在JTable中添加了一个ListSelectionListener
,这样当我选择一行时,我得到的对象的值是我用来填充该行的。但是当我选择行时,我注意到有两个事件被触发:一个用于列选择,我推测,另一个用于行选择。有没有办法可以阻止两个事件被解雇?我将表格选择模式设置为SINGLE_SELECTION
。这是我的代码:
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent event) {
int row = table.convertRowIndexToModel(table.getSelectedRow());
SomeObject someObject = (SomeObject) tableModel.getValueAt(row, 0);
System.err.println(someObject);
}
});
答案 0 :(得分:4)
您可能希望在执行任何操作之前检查event.getValueIsAdjusting()
的值。
如果返回true,则可以忽略该事件,因为它是“一系列多个事件中的一个,其中仍在进行更改”(来自Javadocs的引用)
答案 1 :(得分:0)
可能是你从de / selection中得到两个事件:第一次出现是取消选择旧项目,后续事件将是新项目的选择。
如果将上一个选择的对象(getSource()
?)存储在此事件之外,然后检查当前事件是否与上一个事件具有相同的对象。如果是这样,您可以假设您之前正在分析的事件已被取消选择,之前已被选中。如果它们不相等,则更新外部变量并实际运行您想要运行的任何代码。