2015-05-08 36 views
1

我只是想看看哪些元素正在被选中,并根据索引更改帧上的其他标签和texfields。我的代码如下:ListSelectionListener错误索引

list = new JList(listModel); 
    list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    list.setLayoutOrientation(JList.VERTICAL); 

    list.addListSelectionListener(new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent e) { 
      System.out.println(e.getLastIndex()); 
     } 
    }); 

当我点击第一单元输出:0 0 单击第二个元素后:1 1 之后,我想再次单击第一个元素,但是这一次再次输出为1 1。当我尝试了25个元素时,选择最后一个元素,然后点击第一个元素,输出结果为23 23。是关于事件的问题还是关于我的代码?

回答

3

您得到的行为是标准行为,如果您想拥有不同的行为,请创建您自己的SelectionListener,该行为也认为是getValueIsAdjusting()

class SharedListSelectionHandler implements ListSelectionListener { 
    public void valueChanged(ListSelectionEvent e) { 
     ListSelectionModel lsm = (ListSelectionModel)e.getSource(); 

     int firstIndex = e.getFirstIndex(); 
     int lastIndex = e.getLastIndex(); 
     boolean isAdjusting = e.getValueIsAdjusting(); 
     output.append("Event for indexes " 
         + firstIndex + " - " + lastIndex 
         + "; isAdjusting is " + isAdjusting 
         + "; selected indexes:"); 

     if (lsm.isSelectionEmpty()) { 
      output.append(" <none>"); 
     } else { 
      // Find out which indexes are selected. 
      int minIndex = lsm.getMinSelectionIndex(); 
      int maxIndex = lsm.getMaxSelectionIndex(); 
      for (int i = minIndex; i <= maxIndex; i++) { 
       if (lsm.isSelectedIndex(i)) { 
        output.append(" " + i); 
       } 
      } 
     } 
     output.append(newline); 
    } 
} 

查找here explanation of this example

+0

投诉事件源时出错。线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException:javax.swing.JList不能转换为javax.swing.ListSelectionModel。 ListSelectionModel lsm =(ListSelectionModel)e.getSource(); – codebender