2014-03-07 39 views
3

让'x'为JList中的项目。当我第一次点击它时,事件就会发生,当我再次点击它时,事件不会触发。我必须点击其他项目然后回到'x'。ListSelectionEvent,单击JList中当前选定项目时触发事件

如何从'x'重复发起活动而无需处理其他项目。

这是我的代码:

public void valueChanged(ListSelectionEvent e) { 

    if (e.getValueIsAdjusting() == false) { 

     if (list.getSelectedIndex() == -1) {} else { 
      String clicked = (String)list.getSelectedValue(); 



      //method to fire is here 

     } 
    } 
    updateDisplays(); 

} 
+0

您可以添加一个'MouseListener'并观察点击。请注意,点击更改选择将触发'MouseListener'和'ListSelectionListener'。然而,这似乎是一种不寻常的用户体验决定,它为分配列表中已经选定的项目指定重要性。你想做什么? –

+1

*“我如何从'x'重复发起活动..”“* ..为什么你需要重复发射它?这看起来像一个经典的[XY问题](http://meta.stackexchange.com/q/66377/155831)。你想实现什么*实际功能? –

+0

我正在创建用户输入的命令的JList。 JList跟踪用户的先前命令,所以如果用户想要重复一个命令,他们应该能够从JList中点击它。 @JasonC – MMP

回答

3

ListSelectionListener变化反映到列表中选择,你可以使用一个MouseListener,而不是...

例如...

MouseListener ml = new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent evt) { 
     if (SwingUtilities.isLeftMouseButton(evt) && evt.getClickCount() == 1) { 
      if (list.getSelectedIndex() != -1) { 
       int index = list.locationToIndex(evt.getPoint()); 
       System.out.println("You clicked item @ " + index); 
      } 
     } 
    } 
} 

list.addMouseListener(ml); 
1

您可以添加一个MouseListener并观察点击次数。请注意,点击更改选择将同时触发MouseListenerListSelectionListener

另一种选择是立即清除您的ListSelectionListener;这样下一次点击就会重新选择并重新触发,尽管您将失去使用键盘浏览项目的能力。

虽然这看起来像是一种不寻常的用户体验决定,但它指定了点击列表中已经选择的项目的重要性。

根据您的问题评论添加:如果您选择了MouseListener路线,我建议您查找双击而不是单击,如果点击要执行某个操作(特别是如果操作更改了数据并且不可撤消)。还请注意,当您使用键盘浏览列表时,您的ListSelectionListener将执行操作,这可能不是您想要的。

如果在历史记录中的命令类型,你也可以考虑使用下拉组合框中两个命令输入历史列表,其中从历史选择填充命令文本,但不不执行。您还可以从命令历史记录添加自动完成功能。

相关问题