1

JTextPane があり、それにキー リスナーを追加しました。コードは次のようになります。

class MainPanel extends JPanel {
    JTextPane codePane = new JTextPane(); 

    MainPanel() {
        add(new JScrollPane(codePane));
        codePane.addKeyListener(new KeyHandler());
    }

    private class KeyHandler extends KeyAdapter {
        @Override
        public void keyTyped(KeyEvent ev) {
            if (ev.getKeyCode() == KeyEvent.VK_SPACE) {
                System.out.println("space");
            } else {
                System.out.println("char");
            }
        }
    }
}

「sp」と入力すると、3 回表示されます: char. スペースバーを押しても検出されません。それを解決する方法は?

4

3 に答える 3

3

に対してチェックできますKeyEvent#getKeyCharが....

KeyListenersKeyEventsコンポーネントからのフォーカスを必要とするという点で、Swing コンポーネントからの操作には大きな制限があります。これらは絶対に使用しないでください。キー バインドはフォーカスを必要とせず、マップに使用できますKeyStrokes

JTextComponentsそうは言っても、このようなの好ましいアプローチは、JTextPaneを使用することDocumentListenerです。

参照: DocumentListener ガイド

于 2013-03-02T13:00:06.763 に答える
1

メソッドをオーバーライドする代わりにkeyTyped()、オーバーライドkeyReleased()またはkeyPressed()メソッド。それはうまくいくかもしれません。

于 2013-03-02T12:54:48.110 に答える
0

これを試すことができます:

if (Character.isSpaceChar(ev.getKeyChar()) {
            System.out.println("space");
        }

わたしにはできる

于 2014-09-17T00:54:19.550 に答える