2010-03-08 89 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); 
     } 
    } 
}); 
相关问题