【问题标题】:Make control-click behave like right-click on a JList使 control-click 的行为类似于右键单击 JList
【发布时间】:2013-05-12 20:46:20
【问题描述】:

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

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

【问题讨论】:

    标签: java swing contextmenu selection jlist


    【解决方案1】:

    有一个更简单的方法来实现这一点:使用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

    【讨论】:

    • 哦,我刚刚意识到这在我的特定情况下不会那么容易,因为我正在根据当前选择动态构建菜单。我必须重新组织我的代码,以便在选择更改时重建菜单。我会调查的。
    猜你喜欢
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 2015-12-09
    • 2011-06-18
    • 2014-02-10
    • 2013-11-07
    相关资源
    最近更新 更多