0

メインビューのプレースホルダーがJTextPane. 文字が入力されるたびにout.write(c)が実行され、文字のスタイリングを行い、テキスト文字列を JTextPane doc に挿入する関数が呼び出されます。キーが押されるたびに、コンテンツが再描画されます。

エミュレーターは矢印キー (コマンド履歴の上下) に関連する機能を実行しませんが、Ctrl-F, Ctrl-B, Ctrl-P, Ctrl-N組み合わせを使用します。何が起こっているかというと、JTextPane の左上隅でキャレットが点滅し続けます。ターミナルカーソルフォーカスに従って移動しません。驚くべきことに、エミュレーターに何かを入力し、Ctrl-B以前に入力した文字に戻ってバックスペースを押すと、正しい文字が削除されます。つまり、通常のコマンド プロンプトで動作するように、カーソル フォーカスが正しく機能します。キャレットがどういうわけかその位置に達していないというだけです。

私はこのアプローチを試しました:

        int len = terminalArea.getDocument().getLength();
        terminalArea.setCaretPosition(len);

ただし、これは常にキャレットを最後に入力された文字に向け、Ctrl-BCtrl-Fが押されても前後に移動しません。この点に関して助けが必要です。つまり、シェル カーソルが指しているエミュレータ内の位置を取得し、その時点でキャレットを表示するにはどうすればよいですか?

4

0 に答える 0