propiedades hacer como bar java swing shortcut jmenuitem

java - hacer - ¿Cómo se crea un acceso directo al elemento del menú(JMenuItem)?



jmenubar propiedades (2)

Entonces me di cuenta de que en awt hay un constructor MenuItem para agregar un atajo de CTRL + (alguna tecla), pero no hay tal constructor para JMenuItem . ¿Cuál es la forma correcta de hacer esto?

Necesito un equivalente de awt:

MenuItem mi = new MenuItem("Copy", new MenuShortcut(KeyEvent.VK_C));

pero para el swing.


Ejemplo para CTRL + N.

menuItem.setAccelerator(KeyStroke.getKeyStroke(''N'', Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask()));

Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask() devuelve la clave de control (ctrl) en Windows y Linux, y la clave de comando (⌘) en Mac OS.


Simplemente cree un KeyStroke y llame a setAccelerator(...) en el JMenuItem así:

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import java.awt.Toolkit; public class Test { public Test() { initComponents(); } public static void main(String[] args) { //create Swing components on EDT SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Test(); } }); } private void initComponents() { //create JFrame JFrame frame = new JFrame("Accelerator Sample"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JMenuBar menuBar = new JMenuBar();//create menu bar to hold menus JMenu menu = new JMenu("File");//create a menu menuBar.add(menu);//add menu to bar JMenuItem menuItem = new JMenuItem("Say Hello");//create menu item //set shortcut CTRL+H (command+h on mac os) KeyStroke ctrlH = KeyStroke.getKeyStroke(KeyEvent.VK_H, Toolkit.getDefaultToolkit ().getMenuShortcutKeyMask()); //set the accelerator menuItem.setAccelerator(ctrlH); //add listener which will be called when shortcut is pressed menuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { System.out.println("Hello, World"); } }); menu.add(menuItem);//add item to menu ''File'' frame.setJMenuBar(menuBar);//set menubar of JFrame frame.pack(); frame.setVisible(true);//set frame visible } }