Java - How can i select all rows in JTable using Command+A shortcut in Mac?

允我心安 提交于 2021-02-10 05:06:21

问题


I have many tables in my Java application. When i click "Ctrl + A" in Mac OS X, it selects all rows inside the current table. I wonder if i can change the default shortcut to use "Command + A" instead to select all the rows in the table ?

I am trying to do this inside the EventQueue class to be applied automatically on all the tables in my application.


回答1:


Swing uses Key Bindings to map KeyStrokes to Actions. So you can add another binding to map "Command A" to the existing "Control A" binding.

See Key Bindings for more information on how to do this as well as a link to the Swing tutorial on How to Use Key Bindings.

Also, check out How do you refer to the mac command key in the String version of Java's KeyStroke.getKeystroke? for information on how to specify the "command" key in a KeyStroke.

Edit:

... I wanted to do that in the EventQueue class to be applied automatically to all tables i create in my application

Yes, usually Key Bindings are applied to individual components. If you want to change bindings for all components then you need to use the UIManager to access the default InputMap. For a JTable you should be able to use:

InputMap im = (InputMap) UIManager.get("Table.ancestorInputMap");

See UIManager Defaults for more information showing the default InputMap used for each Swing component.




回答2:


By default, the "selectAll" action for JTable on Mac OS X is bound to ⌘-A. Instead of using the control key explicitly, use getMenuShortcutKeyMask(), which returns the corresponding Event.META_MASK on Mac OS X and Event.CTRL_MASK on Windows. Some examples are cited here, but here's the basic idea:

int MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
KeyStroke.getKeyStroke(KeyEvent.VK_A, MASK)



回答3:


That is the final solution i have used(Thanks to 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" );


来源:https://stackoverflow.com/questions/25142602/java-how-can-i-select-all-rows-in-jtable-using-commanda-shortcut-in-mac

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!