我试图让我的JMenuBar
激活Alt KeyEvent
上的第一个JMenu
,但没有打开弹出窗口,这样以后就可以用箭头键打开弹出窗口。就像在NetBeans、Mozilla或任何其他程序窗口中一样。
以下是未按预期工作的代码。最糟糕的副作用是它对alt+选项卡组合做出反应,并且它绝对不应该在alt+选项卡上弹出菜单。我只需要让菜单进入"武装"状态,并能够通过箭头键遍历菜单(向右和向左箭头到"武装"菜单,向下箭头打开"武装"弹出菜单)。有什么简单的方法可以做到这一点吗?
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
public class Test5 extends JFrame {
public Test5() {
super("test");
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pan = new JPanel(new BorderLayout());
final JMenuBar bar = new JMenuBar();
final JMenu menu = new JMenu("File", false);
menu.setMnemonic(KeyEvent.VK_ALT);
JMenuItem item = new JMenuItem("All");
JMenuItem item2 = new JMenuItem("Exit");
menu.add(item);
menu.add(item2);
JMenu menu1 = new JMenu("Test");
JMenuItem item1 = new JMenuItem("All");
menu1.add(item1);
bar.add(menu);
bar.add(menu1);
setJMenuBar(bar);
setSize(200, 200);
setVisible(true);
}
public static void main(String[] args) {
new Test5();
}
}
由于Guillaume Polet而得以解决:com.sun.java.swing.plaf.windows.WindowsLookAndFeel类中有一些代码,可以使用Alt键:
public void initialize() {
super.initialize();
// some more initialization here
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.addKeyEventPostProcessor(WindowsRootPaneUI.altProcessor);
}
AltProcessor类具有所有的魔力。
如果你没有任何自定义的LaF,你可以直接使用WindowsLookAndFeel,或者有一个合适的例子来处理菜单中的Alt事件,用于你自己的特殊LaF。
在启动GUI之前,调用以下行:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
并删除助记符。
这将自动在Windows上安装所需的行为。如果你在所有平台上都需要它,那么你就必须使用KeyBindings,但由于这种行为只在Windows上观察到,我认为只在Windows中重新创建它没有问题。
不知道为什么,但关于回答问题
-
第一步
-
必须使用KeyBindings,并将其输出到Swing Action(adviced)或ActionListener
-
有两种方法
menu.setArmed(true)
或menu.setSelected(true)
-
-
但在这两种情况下,CCD_。添加MenuListener并将以前选择的或武装的恢复为false的步骤