で最初にJMenuBar
アクティブにしようとしますが、ポップアップを開かずに、後で矢印キーストロークでポップアップを開くことができるようにします。NetBeans、Mozilla、その他のプログラム ウィンドウで行われるのと同じように。JMenu
Alt KeyEvent
意図したとおりに動作しないコードを次に示します。最悪の副作用は、それが 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 イベントを処理する方法の適切な例があります。