我尝试让我的JMenuBar
在JMenu
上激活第一个Alt KeyEvent
,但是没有打开弹出窗口,以便以后可以用箭头按键打开弹出窗口。就像它在NetBeans,Mozilla,任何其他程序窗口中完成一样。
这是不符合预期的代码。最糟糕的副作用是它对alt + tab组合作出反应,它绝对不应该在 alt + tab 上弹出菜单。我只需要让菜单进入“武装”状态,并能够通过箭头键(右箭头和左边的“手臂”菜单和向下箭头来打开“武装”菜单弹出窗口)。有没有简单的方法来实现这一目标?
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,或者有适当的示例如何在您自己的特殊LaF的菜单中处理Alt事件。
答案 0 :(得分:3)
在启动GUI之前,请调用以下行:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
删除助记符。
这将自动在Windows上安装所需的行为。 如果你需要在所有平台上使用它,那么你将不得不使用KeyBindings,但由于这种行为只能在Windows上观察到,所以我发现只在Windows上重新创建它才有问题。
答案 1 :(得分:1)
不知道为什么,但关于回答问题
第一步
有两种方法menu.setArmed(true)
或menu.setSelected(true)
但在这两种情况下,永久选择JMenu
,然后选择第二个。步骤添加MenuListener并将先前选定或武装恢复为假