0

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

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

4

1 回答 1

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()来了解是否应该显示 a JPopupMenu

于 2013-05-17T16:09:58.483 回答