简体   繁体   中英

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

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.

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.

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)

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" );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM