0

我将 a 添加MouseListener到 aJList中,以便在单击鼠标右键时清除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();
                }
            }
});
4

1 回答 1

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);
            }
        });
    }
}
于 2013-10-28T10:20:55.587 回答