2

我将 a 添加ListSelectionListener到 JTable 中,这样当我选择一行时,我会得到我用来填充该行的值的对象。但是当我选择行时,我注意到触发了两个事件:一个用于列选择,我想,另一个用于行选择。有没有办法可以防止两个事件被触发?我将表格选择模式设置为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);
  }

});
4

2 回答 2

4

您可能想event.getValueIsAdjusting()在做任何事情之前检查 的值。

如果返回 true,您可以忽略该事件,因为它是“一系列多个事件中的一个,仍在进行更改”(引用自 Javadocs)

getValueIsAdjusting()

setValueIsAdjusting()

于 2012-04-17T22:13:24.793 回答
0

可能是您从取消/选择中获得了两个事件:第一次发生将是取消选择旧项目,随后的事件将是选择新项目。

如果您将先前选择的对象 ( getSource()?) 存储在此事件之外,然后检查当前事件是否与上一个事件具有相同的对象。如果是这样,您可以假设您当前正在分析的事件刚刚被取消选择,之前已被选中。如果它们不相等,则更新您的外部变量并实际运行您想要运行的任何代码。

于 2012-04-17T20:12:52.307 回答