Java JTable selection change事件处理:动态查找源表

Java JTable selection change事件处理:动态查找源表,java,event-handling,jtable,Java,Event Handling,Jtable,我已经实现了自己的事件处理程序,并将其添加到表的选择模型中: table.getSelectionModel().addListSelectionListener(event); 并实现了“事件”的方法(如上所述): 不幸的是,如果我有机会选择,事件会触发两次,并且似乎无法找到关联的表,因为e.getSource提供了javax.swing.DefaultListSelectionModel 因此,我的问题是: 1) 尽管eventListener只注册了一次,为什么它会触发两次 2) 我如何

我已经实现了自己的事件处理程序,并将其添加到表的选择模型中:

table.getSelectionModel().addListSelectionListener(event);
并实现了“事件”的方法(如上所述):

不幸的是,如果我有机会选择,事件会触发两次,并且似乎无法找到关联的表,因为e.getSource提供了javax.swing.DefaultListSelectionModel

因此,我的问题是:

1) 尽管eventListener只注册了一次,为什么它会触发两次

2) 我如何找到所选内容适用的表格?DefaultListSelectionModel似乎没有提供任何getSource()或类似的功能

非常感谢

1)我想你会发现它会在取消选择旧选项时触发一次,在选择新选项时触发一次。如果您记录了事件的详细信息,您应该可以确切地看到发生了什么。我记不起细节了,所以也许这是错的。无论哪种方式,您都应该能够对事件调用getValueIsAdjusting(),并且只使用链中的最后一个(即当它返回false时)


2) 通常不需要,但唯一的方法是专门为表创建侦听器(即将表传递给构造函数并记住它)。

因为多个JTable(或我猜的其他组件)可以共享同一选择模型,从事件中请求关联的JTable是没有意义的。这与无法从TableModel检索JTable的原因相同。正如Draemon所建议的,将对JTable的引用存储在您的listener类中(或使其可访问)。

谢谢Draemon..它工作得很好

我们的代码 谢谢


TF团队

非常感谢,这正是我想要的!编写时,getValueIsAdjusting()应为false。
public void valueChanged(ListSelectionEvent e) {
    log.debug("value changed");
}
vMachinesTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

    public void valueChanged(ListSelectionEvent lse) {
        if (!lse.getValueIsAdjusting()) {
            System.out.println("Selection Changed");
        }
    }
});