4

JTextFieldに基づいてカスタムコントロールを作成しています。私のJTextFieldは、PlainDocumentから派生した独自のDocumentクラスを使用しているため、オーバーライドさinsertString(...)れたremove(...)メソッドですべてのユーザー入力を処理できます。

ここに問題があります。ユーザー入力を処理した後、キャレットを別の位置に移動したい場合があります。それを行うためのより良い方法は何ですか?

デフォルトでは、Documentは最後の入力の隣にキャレットを配置します。そこで、charを目標位置に配置して、すぐに削除しようとしました。何らかの理由でremove()メソッドでは機能しません...そしてコードは見栄えが良くありません:)

と提案をありがとう。

4

2 に答える 2

2

DocumentFilterユーザー入力を制御したい場合は、実際に a を使用する必要があります。ADocumentFilterを使用すると、すべての入力を傍受できます。JTextField.setCaretPositionその後、 (comes from ) を使用JTextComponentしてキャレットの位置を設定できます。DocumentFilter実装に への参照を渡すだけJTextFieldで、キャレットの位置を設定できます。

Java トレイルは次のとおりですDocumentFilter。また、JavaRanch の例

于 2012-09-24T14:56:39.890 に答える
2
  • PlainDocument を拡張する必要はないようです。DocumentListener を JTextField のDocumentに追加するだけで、DocumentListener で宣言された 3 つのメソッドでユーザー入力を処理できます。
  • setCaretPositionを使用して、キャレットを好きな場所に移動します
于 2012-09-24T14:14:24.107 に答える