2

キーバインディングに関するJavaチュートリアルと、このサイトの5ダースの投稿を例とともに読みました。次のスニペットが期待どおりに機能しない理由を一生理解できません。

    String ctrlSave = "CTRL Save";
    myPanel.getInputMap().put(KeyStroke.getKeyStroke('s', InputEvent.CTRL_DOWN_MASK), ctrlSave);
    myPanel.getActionMap().put(ctrlSave, new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent e) {
            int returnVal = chooserFileSave.showSaveDialog(myPanel);
            if (returnVal == JFileChooser.APPROVE_OPTION) {
                fileSave = chooserFileSave.getSelectedFile();
                myPanel.getActiveRoute().saveToGPXFile(fileSave);
            }
        }
    });

これを交換した場合:

myPanel.getInputMap().put(KeyStroke.getKeyStroke('s', InputEvent.CTRL_DOWN_MASK), ctrlSave);

これとともに:

myPanel.getInputMap().put(KeyStroke.getKeyStroke('s'), ctrlSave);

その後、正常に動作します(もちろん、「ctrl + s」ではなく、「s」を押す必要があります)。

明らかな何かが欠けていると確信しています。それは何ですか?

4

2 に答える 2

4

使用してみましたか:

KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK);
于 2013-01-15T04:07:20.617 に答える
1

キーバインディングは、コンポーネントが選択されている場合にのみに設定されます。入力マップを次のように変更する必要があります。

myPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('s', InputEvent.CTRL_DOWN_MASK), ctrlSave);
于 2013-01-15T04:12:38.420 に答える