2014-08-30 59 views
0

我添加listselectionlistener当我一个标签列表选择侦听器的valueChanged发射的2倍以上

table1 = new ListSelectionListener() 
{ 
    public void valueChanged(ListSelectionEvent e) 
    { 
    action(e); 
    } 
}; 
ListSelectionModel SM = table1A.getSelectionModel(); 
SM.addListSelectionListener(table1); 
SM = table1B.getSelectionModel(); 
SM.addListSelectionListener(table1); 

当我点击了表的行上点击,行动(五)功能解雇了很多次。

private void action(ListSelectionEvent e) 
{ 
    ListSelectionModel lsm = (ListSelectionModel) e.getSource(); 

    if (lsm.getValueIsAdjusting()) 
    { 
    // nothing 
    } 
    else 
    { 
    // my action here 
    } 
} 

动作(e)应该发射两次,一次是鼠标点击,一次是鼠标释放。我使用getValueIsAdjusting()来对抗鼠标点击,所以我的动作应该运行一次。但是,我的行为运行了很多次。我可以看到这个,因为我需要在我的动作中放置一个忙碌的对话框。

+0

我想您所想一个'MouseListener'的。 'ListSelectionListener's监听所选内容的变化,而不是鼠标点击和释放。这些可能是非常不同的事情。 – gla3dr 2014-08-30 07:17:28

+1

Well'ListSelectionModel SM = table1A.getSelectionModel(); SM.addListSelectionListener(table1); SM = table1B.getSelectionModel(); SM.addListSelectionListener(table1);'似乎是两次添加侦听器! – 2014-08-30 08:45:53

+1

为了更快获得更好的帮助,请发布[MCVE](http://stackoverflow.com/help/mcve)(最小,完整,可验证示例)。 – 2014-08-30 08:46:14

回答

0

您需要将“value is Adjusting”设置为true。

SM.setValueIsAdjusting(true); 

请重新命名SM到SM,因为一个java属性应该与小写字母来开头。(Java约定)

+0

我需要设置这个? – user2545866 2014-09-01 09:46:48

+0

在ListSelectionModel下SM = table1A.getSelectionModel(); – Toufic 2014-09-01 11:37:00