为什么JList上的多项选择就像右击鼠标一样?

时间:2013-10-28 09:43:42

标签: java swing awt jlist mouselistener

我正在向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 个答案:

答案 0 :(得分: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);
            }
        });
    }
}