2010-03-08 43 views
7

我正在尋找一種方法來通過單擊每個項目來選擇JList中的多個項目。在不使用Ctrl/Command鍵的情況下在JList中選擇多個項目

執行此操作的正常方法是按住命令/ ctrl鍵,然後單擊。

我認爲這會更直觀,只需讓用戶在不需要保存額外密鑰的情況下點擊和關閉項目。

+0

我的應用程序是針對非計算機識字,所以我覺得我不需要使用標準(着名的遺言)。我從經驗中發現,人們有時會忘記按住Ctrl並取消選擇所有其他項目。我打算做一些可用性測試來看看人們喜歡什麼。 – Gordon 2010-03-08 21:16:41

+0

時髦的非標準應用程序(如Lotus Notes)的食譜.. – 2010-03-08 21:19:49

+0

絕對有道理。我正在測試,沒有文檔/教程說你必須按下Control來做多選擇...正在測試和測試,並且在代碼中沒有發現問題.... +1。 – FaithReaper 2016-08-25 09:18:42

回答

10

在更改默認行爲之前考慮兩次。除非你有一些特殊的用例,我不喜歡我的名單的工作比其他地方:)

不同的說了這麼多,你應該能夠使用自己的ListSelectionModel

list.setSelectionModel(new DefaultListSelectionModel() { 
    @Override 
    public void setSelectionInterval(int index0, int index1) { 
     if(super.isSelectedIndex(index0)) { 
      super.removeSelectionInterval(index0, index1); 
     } 
     else { 
      super.addSelectionInterval(index0, index1); 
     } 
    } 
}); 
+0

謝謝你的工作。我不相信這是正確的做法,但我希望與少數人一起進行測試。 – Gordon 2010-03-08 21:20:22

+0

它正在工作,但請注意,該列表上的任何ListSelectionListener都不會收到通知。爲了解決這個問題,在方法的末尾添加'fireValueChanged(index0,index1);'。 – Alex 2014-12-12 13:54:58

+0

正常工作正常,但如果在按下按鈕時將鼠標移動一個像素,則不適用。然後再次取消選擇:-( – runholen 2015-11-10 08:46:33

0

我想你可以通過在JList上附加一個鼠標監聽器並在監聽器代碼中以編程方式選擇該項來輕鬆完成此操作。當然,你可能需要一些代碼來確定哪些項目是基於某些座標進行壓縮的。

4

對於你通常會使用JCheckBox項目的複選框組。

用戶已經使用過,他們需要按下CTRL鍵來選擇列表框中的多個項目。你不應該改變默認的體驗/期望。

3
list.setSelectionModel(new DefaultListSelectionModel() { 
    private int i0 = -1; 
    private int i1 = -1; 

    public void setSelectionInterval(int index0, int index1) { 
     if(i0 == index0 && i1 == index1){ 
      if(getValueIsAdjusting()){ 
       setValueIsAdjusting(false); 
       setSelection(index0, index1); 
      } 
     }else{ 
      i0 = index0; 
      i1 = index1; 
      setValueIsAdjusting(false); 
      setSelection(index0, index1); 
     } 
    } 
    private void setSelection(int index0, int index1){ 
     if(super.isSelectedIndex(index0)) { 
      super.removeSelectionInterval(index0, index1); 
     }else { 
      super.addSelectionInterval(index0, index1); 
     } 
    } 
}); 
相關問題