如何使JMenuBar激活菜单而不弹出



我试图让我的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中重新创建它没有问题。

不知道为什么,但关于回答问题

  • 第一步

    1. 必须使用KeyBindings,并将其输出到Swing Action(adviced)或ActionListener

    2. 有两种方法menu.setArmed(true)menu.setSelected(true)

  • 但在这两种情况下,CCD_。添加MenuListener并将以前选择的或武装的恢复为false的步骤

相关内容

  • 没有找到相关文章