gpt4 book ai didi

java - JList - 单击已选择的项目时取消选择

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:17 24 4
gpt4 key购买 nike

如果单击 JList 上的选定索引,我希望它取消选择。换句话说,单击索引实际上会切换它们的选择。看起来不支持,所以我尝试了

list.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent evt)
{
java.awt.Point point = evt.getPoint();
int index = list.locationToIndex(point);
if (list.isSelectedIndex(index))
list.removeSelectionInterval(index, index);
}
});

这里的问题是在 JList 已经对鼠标事件采取行动后 调用它,因此它取消选择所有内容。因此,我尝试删除所有 JList 的 MouseListeners,添加我自己的,然后添加回所有默认监听器。这没有用,因为 JList 在我取消选择索引后会重新选择它。不管怎样,我最终想到的是

MouseListener[] mls = list.getMouseListeners();
for (MouseListener ml : mls)
list.removeMouseListener(ml);
list.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent evt)
{
java.awt.Point point = evt.getPoint();
final int index = list.locationToIndex(point);
if (list.isSelectedIndex(index))
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
list.removeSelectionInterval(index, index);
}
});
}
});
for (MouseListener ml : mls)
list.addMouseListener(ml);

... 这行得通。但我不喜欢它。有没有更好的办法?

最佳答案

查看示例“ListSelectionModel:启用切换选择模式”: http://java.sun.com/products/jfc/tsc/tech_topics/jlist_1/jlist.html

我已经为多选列表框稍微修改了它(将 setSelectionInterval 更改为 addSelectionInterval)并消除了如果您在鼠标按下时单击以取消选择并移动鼠标(移动 gestureStarted 检查添加和删​​除)。

objList.setSelectionModel(new DefaultListSelectionModel() {
private static final long serialVersionUID = 1L;

boolean gestureStarted = false;

@Override
public void setSelectionInterval(int index0, int index1) {
if(!gestureStarted){
if (isSelectedIndex(index0)) {
super.removeSelectionInterval(index0, index1);
} else {
super.addSelectionInterval(index0, index1);
}
}
gestureStarted = true;
}

@Override
public void setValueIsAdjusting(boolean isAdjusting) {
if (isAdjusting == false) {
gestureStarted = false;
}
}

});

关于java - JList - 单击已选择的项目时取消选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2528344/

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