2

私は興味深い問題を抱えています。

JScrollPane内にスタイル付きテキストが入力されたJTextPaneがあります。テキストは外部デバイスから生成され、StyledDocumentに渡されます(ターミナルウィンドウのように見えます)。キープレスリスナーを使用して、入力中の各文字をデバイスに送信すると、文字が外部デバイスからドキュメントに印刷されます。これは素晴らしく機能しています!私はもっ​​と幸せになることができませんでした!

それ外!

Enterキーを押すか、スペースを戻すと、ウィンドウの「boink」エラー音が鳴ります。JTextPaneをオーバーライドして、Enterキーまたはバックスペースを押したときに「boink」サウンドが再生されないようにするにはどうすればよいですか。

ありがとう!

キーリスナーの現在のコード

    addKeyListener(new KeyAdapter() {

        @Override
        public void keyTyped(KeyEvent ke) {
           //Absorb this action.
        }

        @Override
        public void keyReleased(KeyEvent ke) {
            //Absorb this action.
        }

        @Override
        public void keyPressed(KeyEvent evt) {

            char c = evt.getKeyChar();

            if (((byte) c) == 0x0A) {
                c = ((char) 0x0D);
            }

            try {
                rumIO.write(c);
            } catch (Exception e) {
            }
        }
    });

それを修正したコード!

addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent evt) {
            InputMap inputMap = getInputMap();
            ActionMap actionMap = getActionMap();
            KeyStroke keyStroke = KeyStroke.getKeyStrokeForEvent(evt);
            inputMap.put(keyStroke, "doNothing");
            actionMap.put("doNothing", new AbstractAction() {

                @Override
                public void actionPerformed(ActionEvent ae) {
                    //Do Nothing
                }
            });


            char c = evt.getKeyChar();

            if (((byte) c) == 0x0A) {
                c = ((char) 0x0D);
            }

            try {
                rumIO.write(c);
            } catch (Exception e) {
            }
        }
    });
4

1 に答える 1

4

JTextPaneキーバインディングを使用します。チュートリアルとこのに示されているように、デフォルトの動作をオーバーライドできる場合があります。

于 2012-09-28T23:17:29.220 に答える