问题
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