gpt4 book ai didi

java - 选择项目中的 JList actionlistener "delay"

转载 作者:行者123 更新时间:2023-12-01 09:15:49 24 4
gpt4 key购买 nike

我有一个JList最初由 ArrayList<SomeClass> 填充我将其转换为数组。这个JList然后包裹在 JScrollPane 中并显示在JFrame上。当我在其中选择一个项目时,选择的第一个项目是正确的,但之后它似乎选择了前一个项目。所以如果我有一个 ArrayList<String>填充“数字 0”、“数字 1”、“数字 2”等,然后我按顺序选择 19、18、17,输出就好像我选择了 19、19、18:

import java.awt.Dimension;
import javax.swing.*;
import java.util.*;
import javax.swing.event.*;

public class DemoFrame extends JFrame implements ListSelectionListener{
ArrayList<String> strings;
public DemoFrame(){
strings = new ArrayList();
for (int i=0; i<20; i++){
strings.add("Number " + i);
}
JList demoList = new JList();
demoList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
demoList.setVisibleRowCount(10);
JScrollPane listScroller = new JScrollPane(demoList);
listScroller.setPreferredSize(new Dimension(250, 500));
demoList.setListData(strings.toArray());
this.add(listScroller);
demoList.addListSelectionListener(this);
getContentPane().add(listScroller);
pack();
setVisible(true);
}

@Override
public void valueChanged(ListSelectionEvent lse) {
if (!lse.getValueIsAdjusting()){
System.out.println(lse.getLastIndex());
System.out.println(strings.get(lse.getLastIndex()));
}
}
}

public class SODemo{
public static void main(String[] args) {
DemoFrame demo = new DemoFrame();
}
}

选择 19, 18. 17 的输出:

run: 19 Number 19 19 Number 19 18 Number 18

但是,选择 0, 1, 2 的输出:

run: 0 Number 0 1 Number 1 2 Number 2

为什么会这样?

最佳答案

ListSelectionEvent 类中有 2 个值得关注的方法:

public int getFirstIndex()

Returns the index of the first row whose selection may have changed.

public int getLastIndex()

Returns the index of the last row whose selection may have changed.

因此,选择事件实际上涉及 2 个列表元素,一个获得焦点,一个失去焦点

关于java - 选择项目中的 JList actionlistener "delay",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40555343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com