所以我注意到,在awt中有一個MenuItem
構造函數用於添加CTRL +(一些關鍵)快捷方式,但JMenuItem
沒有這樣的構造函數。什麼是正確的方法來做到這一點?如何讓菜單項(JMenuItem)快捷方式?
我需要AWT的equivelent:
MenuItem mi = new MenuItem("Copy", new MenuShortcut(KeyEvent.VK_C));
但搖擺。
所以我注意到,在awt中有一個MenuItem
構造函數用於添加CTRL +(一些關鍵)快捷方式,但JMenuItem
沒有這樣的構造函數。什麼是正確的方法來做到這一點?如何讓菜單項(JMenuItem)快捷方式?
我需要AWT的equivelent:
MenuItem mi = new MenuItem("Copy", new MenuShortcut(KeyEvent.VK_C));
但搖擺。
的示例CTRL + N。
menuItem.setAccelerator(KeyStroke.getKeyStroke('N', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()
返回控制在Mac OS在Windows和Linux,以及命令鍵(⌘)鍵(CTRL)。
+1短而甜 –
正是我在尋找的!謝謝 –
不客氣。 –
只需創建一個KeyStroke
,並呼籲setAccelerator(...)
在JMenuItem
像這樣:
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
}
}
很高興看到整個事情。感謝您抽出寶貴的時間 :)。 –
@AdrianHristov高興地幫忙 –
當在JPopupMenu的'JMenuItem'上使用它時會出現問題,除非我按下'JPopupMenu'並且出現選項的下拉菜單,顯示它會工作,我怎麼可以做快捷方式的工作,而不需要按和顯示場景,我不想使用'rootPane.registerKeyboardAction('是甚至可能的 – shareef
問題不可達。 –
[詳細信息](http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html#mnemonic) – Brian