2014-03-07 72 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將執行操作,這可能不是您想要的。

如果在歷史記錄中的命令類型,你也可以考慮使用下拉組合框中兩個命令輸入歷史列表,其中從歷史選擇填充命令文本,但不不執行。您還可以從命令歷史記錄添加自動完成功能。

相關問題