我的Java应用程序中有很多表。当我在Mac OS X中单击“Ctrl + A”时,它会选择当前表中的所有行。我想知道我是否可以更改默认快捷方式以使用“Command + A”代替选择表格中的所有行?
我正在尝试在EventQueue类中执行此操作,以自动应用于我的应用程序中的所有表。
答案 0 :(得分:2)
Swing使用Key Bindings
将KeyStrokes
映射到Actions
。因此,您可以添加另一个绑定以将“Command A”映射到现有的“Control A”绑定。
有关如何执行此操作的详细信息,请参阅Key Bindings以及How to Use Key Bindings
上Swing教程的链接。
另外,请查看How do you refer to the mac command key in the String version of Java's KeyStroke.getKeystroke?以获取有关如何在KeyStroke中指定“命令”键的信息。
编辑:
...我想在EventQueue类中执行此操作,以自动应用于我在应用程序中创建的所有表
是的,通常将Key Bindings应用于单个组件。如果要更改所有组件的绑定,则需要使用UIManager访问默认的InputMap。对于JTable,您应该能够使用:
InputMap im = (InputMap) UIManager.get("Table.ancestorInputMap");
有关显示每个Swing组件使用的默认InputMap的更多信息,请参阅UIManager Defaults。
答案 1 :(得分:2)
默认情况下,Mac OS X上"selectAll"
的{{1}}操作绑定到⌘-A 。不要显式使用 control 键,而是使用JTable
,它会在Mac OS X上返回相应的getMenuShortcutKeyMask()
,在Windows上返回Event.META_MASK
。引用了一些例子here,但这里有基本的想法:
Event.CTRL_MASK
答案 2 :(得分:1)
这是我使用的最终解决方案(感谢camickr):
InputMap im = myTable.getInputMap( JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
final int CMD_BTN = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
im.put( KeyStroke.getKeyStroke( KeyEvent.VK_A, CMD_BTN ), "selectAll" );