相关疑难解决方法(0)

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);
   }
});
Run Code Online (Sandbox Code Playgroud)

这里的问题是 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);
Run Code Online (Sandbox Code Playgroud)

......那很有效.但我不喜欢它.有没有更好的办法?

java swing jlist

11
推荐指数
3
解决办法
2万
查看次数

标签 统计

java ×1

jlist ×1

swing ×1