我正在 Mac OS 上编写一个 Swing 应用程序,并且希望在我按住 ctrl 和右键单击时出现 JList 上的上下文菜单。现在的问题是 ctrl-click 总是清除不是我想要的选择(想象一下文件浏览器中的上下文菜单让用户删除选定的文件)。
是否有一种简单的方法可以使 ctrl-click 在选择方面表现得像右键单击?
我正在 Mac OS 上编写一个 Swing 应用程序,并且希望在我按住 ctrl 和右键单击时出现 JList 上的上下文菜单。现在的问题是 ctrl-click 总是清除不是我想要的选择(想象一下文件浏览器中的上下文菜单让用户删除选定的文件)。
是否有一种简单的方法可以使 ctrl-click 在选择方面表现得像右键单击?
有一种更简单的方法可以实现这一点:使用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
。