如果单击JList上的选定索引,我希望它取消选择。换句话说,点击索引实际上会切换其选择。不像这是支持的,所以我想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);
...和那个作品。但我不喜欢它。有没有更好的办法?
老实说,我会按照你已经描述的,使用'MouseAdapter'完成它。如果有更优雅的解决方案,我也很乐意听到。 –
默认情况下,JList支持此功能,但您必须对所选项目进行Ctrl-点击(至少在Windows上)才能取消选择它。 – lbalazscs