【问题标题】:Why multiple selection on JList acts like a right click mouse?为什么 JList 上的多项选择就像右键单击鼠标?
【发布时间】:2013-11-07 00:40:23
【问题描述】:

我将MouseListener 添加到JList,以便在单击鼠标右键时清除JList 中的选择。但我允许JList 能够处理间隔选择。当我选择使用控制按钮并从列表中随机选择一些项目时,MouseEvent 被触发!但是当我使用 Shift 键进行连续选择时,它工作正常!

这是我的代码:

List.addMouseListener(new MouseAdapter() {

            public void mouseClicked(MouseEvent e)
            {
                JList list = (JList) e.getSource();
                if ( SwingUtilities.isRightMouseButton(e) ) {
                    System.out.println("Boom");
                    list.clearSelection();
                }
            }
});

【问题讨论】:

  • 1) "..我正在将MouseListener 添加到JList.." 这正是事情开始出错的时候。对于列表,请改为添加 ListSelectionListener。 2) 为了尽快获得更好的帮助,请发帖SSCCE
  • @AndrewThompson 我希望列表在我右键单击列表时清除选择,因此是 MouseListener。我不知道为什么要使用 ListSelectionListener。
  • “我希望列表在我右键单击列表时清除选择..” 看起来很违反直觉。我建议.. 不要那样做。但是,如果您坚持这样做,请发布您的最佳尝试的 SSCCE。我不会帮忙,但其他人可能会。
  • 可以通过 ListSelectionListener、ListSelectionModel 和鼠标事件实现,理论上(屏幕上的视觉事件)与 MsExcell e.i. 中一样,注意 ListSelectionListener 返回所选行的数组
  • 如果您点击我在第一条评论中放置的链接,或者,如果您只是将该词放在搜索引擎中,那么所有内容都会显示出来。

标签: java swing awt jlist mouselistener


【解决方案1】:

SSCCEE 表示简短、自包含、正确(可编译)、示例。您应该创建一个简短的示例来演示您的问题。您的实际代码可能很长,而且不需要显示问题,因此您应该创建一个小型运行程序。

好的,这里是 SSCCE,正如预期的那样,它工作正常。在此说明您在使用此示例时遇到了什么问题。

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class ListDemo extends JFrame{
    private DefaultListModel<String> listModel;
    private JList<String> list;
    private JScrollPane listScrollPane;

    public ListDemo(){
        listModel = new DefaultListModel<String>();
        for(int i = 0; i < 10; i++){
            listModel.addElement("Item " + (i + 1));
        }

        list = new JList<String>(listModel);
        list.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent me){
                if(SwingUtilities.isRightMouseButton(me)){
                    list.clearSelection();
                }
            }
        });

        listScrollPane = new JScrollPane(list);

        getContentPane().add(listScrollPane);

        setSize(500, 400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String [] arg){
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ListDemo().setVisible(true);
            }
        });
    }
}

【讨论】:

  • 鼠标事件在 ListSelectionModel/Listener 中正确实现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多