如何防止两个事件被解雇?

时间:2012-04-17 20:07:14

标签: java swing events jtable

我在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);
  }

});

2 个答案:

答案 0 :(得分:4)

您可能希望在执行任何操作之前检查event.getValueIsAdjusting()的值。

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

getValueIsAdjusting()

setValueIsAdjusting()

答案 1 :(得分:0)

可能是你从de / selection中得到两个事件:第一次出现是取消选择旧项目,后续事件将是新项目的选择。

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