使控制点击的行为类似于右键单击JList

时间:2013-05-17 15:46:13

标签: java swing contextmenu selection jlist

我正在Mac OS上编写一个swing应用程序,并希望在我按住Ctrl键单击时以及右键单击时显示JList上的上下文菜单。现在的问题是ctrl-click总是清除不是我想要的选择(想象一下文件浏览器中的上下文菜单让用户删除所选文件)。

是否有一种简单的方法可以使ctrl-click在选择方面表现得像右键一样?

1 个答案:

答案 0 :(得分:2)

有一种更简单的方法可以实现这一点:使用setComponentPopupMenu,它将处理所有额外的工作和特定于操作系统的右键单击问题。

我在Windows和Mac上都进行了测试(并且有效):

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;

public class TestJPopup {

    protected void initUI() {
        JFrame frame = new JFrame(TestJPopup.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPopupMenu popupMenu = new JPopupMenu();
        popupMenu.add(new JMenuItem("One"));
        popupMenu.add(new JMenuItem("Two"));
        popupMenu.add(new JMenuItem("Three"));
        JList list = new JList(new String[] { "Hello", "World", "Something", "Else", "Out", "Of", "Ideas" });
        list.setComponentPopupMenu(popupMenu);
        frame.add(list);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestJPopup().initUI();
            }
        });
    }
}

或者(但似乎没用),您可以使用方法java.awt.event.MouseEvent.isPopupTrigger()来了解是否应该显示JPopupMenu