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
}
}