2

我尝试让我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 事件。

4

2 回答 2

3

在启动您的 GUI 之前,请调用此行:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

并删除助记词。

这将自动在 Windows 上安装所需的行为。如果您在所有平台上都需要它,那么您将不得不使用 KeyBindings,但由于这种行为仅在 Windows 上观察到,因此我认为仅在 Windows 上重新创建它没有问题。

于 2012-11-20T14:00:30.103 回答
1

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

于 2012-11-20T13:55:41.783 回答