我正在尝试ListSelectionListener为一个JList知道用户选择的列表项以及用户选择的列表项。因此,如果列表中包含三个项目{Apple, Orange, Pear},并且当前选择处于打开状态Orange并且用户选择了Pear,那么:
srcFruit是Orange;和destFruit是Pear
这是我的代码:
myList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent fruitSelectionEvent) {
printSourceAndDestFruit(myList, fruitSelectionEvent);
}
});
private void printSourceAndDestFruit(JList list, ListSelectionEvent event) {
FruitVO srcFruit = (FruitVO)list.getModel().getElementAt(event.getFirstIndex());
FruitVO destFruit = (FruitVO)list.getModel().getElementAt(event.getLastIndex());
System.out.println("srcFruit = " + srcFruit.getName() + " and destFruit = " = destFruit.getName());
}
当应用程序加载并初始化 时JList,没有默认选择。当我采取以下行动时:
- 点击
Orange - 点击
Pear Orange再次点击
这是我得到的打印输出:
srcFruit = Orange and destFruit = Pear
srcFruit = Orange and destFruit = Pear
我在哪里错了?是getFirstIndex()/ getLastIndex()buggy 还是不是正确的 Swing 方法?
这是我应该看到的输出:
srcFruit = Orange and destFruit = Pear
srcFruit = Pear and destFruit = Orange
因此,即使我进行了 3 次选择(鼠标单击),由于我第一次单击Orange并没有从一个值更改为下一个值,我相信不触发和调用是正确的printSourceAndDestFruit。I select Pearand it is correct in statement that srcFruitis Orangeand that destFruitis Pear. 但是当我点击回到Orange第二个 println 应该有srcFruitasPear和destFruitas Orange。为什么不呢?!?!
提前致谢!