7

F2 がアクセラレータとして設定されているメニュー項目「名前の変更」があります。確かに、メニューが表示されると、「名前の変更」の横に小さな「F2」の表示があります。

残念ながら、これは機能しません。このアクセラレータは応答をトリガーしません。アクセラレータを CTRL+F2 に変更すると動作します。

InpoutMpa/ActionMap を使用する必要があるようです。それに関する問題は、これをアプリのどこでも機能させたいので、トップレベルの JFrame に関連付けようとしていることです。しかし、JFrame には getInputMap() メソッドがありません。

失った。

[追加した]

     ks = KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0);
     JMenuItem mi = new JMenuItem("Rename");
     mi.setAccelerator(ks);
     mi.addActionListener(action); 
4

2 に答える 2

5

これが古いスレッドであることは知っていますが、元のポスターとまったく同じことに苦労し、解決策を見つけました. JFrame 自体には getInputMap メソッドはありませんが、ルート ペインにはあります。そのため、代わりに「getRootPane.getInputMap」を使用する必要があります。

コード例:

public class ApplicationFrame extends JFrame {
    private AbstractAction f2Action = new AbstractAction() {
        private static final long serialVersionUID = 1L;

        public void actionPerformed(ActionEvent e) {
            // Do something useful
        }
    };

    public ApplicationFrame() {

        InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        ActionMap actionMap = getRootPane().getActionMap(); 

        inputMap.put(KeyStroke.getKeyStroke("F2"), "f2Action");
        actionMap.put("f2Action", f2Action);

    }
}
于 2012-01-17T23:59:39.987 に答える