Java ListSelectionListener索引错误

Java ListSelectionListener索引错误,java,eclipse,swing,jlist,listselectionlistener,Java,Eclipse,Swing,Jlist,Listselectionlistener,我只是想看看哪个元素被选中,并根据索引更改框架上的其他标签和文本字段。我的代码如下: list = new JList(listModel); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setLayoutOrientation(JList.VERTICAL); list.addListSelectionListener(new 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
单击第二个元素后:
11

之后,我尝试再次单击第一个元素,但这次输出再次是
11
。当我尝试使用25个元素时,选择最后一个元素,然后单击第一个元素,输出为
23
。这是关于事件的问题还是关于我的代码的问题?

您得到的行为是标准行为,如果您想要有不同的行为,请创建您自己的
SelectionListener
,同时考虑

类SharedListSelectionHandler实现ListSelectionListener{
public void值已更改(ListSelectionEvent e){
ListSelectionModel lsm=(ListSelectionModel)e.getSource();
int firstIndex=e.getFirstIndex();
int lastIndex=e.getLastIndex();
布尔值isAdjusting=e.getValueIsAdjusting();
append(“索引事件”
+第一个索引+“-”+最后一个索引
+“isAdjusting是”+isAdjusting
+“选定索引:”;
if(lsm.isSelectionEmpty()){
输出。追加(“”);
}否则{
//找出选择了哪些索引。
int minIndex=lsm.getMinSelectionIndex();
int maxIndex=lsm.getMaxSelectionIndex();

对于(int i=minIndex;我在转换事件的源时出错。线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:javax.swing.JList无法转换为javax.swing.ListSelectionModel ListSelectionModel lsm=(ListSelectionModel)e.getSource();
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);
    }
}