ユーザーが入力したときにJTextFieldのコンテンツの長さを取得するにはどうすればよいですか?
-
03-07-2019 - |
質問
JTextFieldにはkeyTypedイベントがありますが、その時点でセルの内容はまだ変更されていないようです。
そのため、ここで読むと.length()は常に間違っています。
キーストローク後にユーザーに表示される長さを取得する簡単な方法が必要ですか?
解決
これはおそらく最適な方法ではありません(そしてしばらく経ちました)が、過去にJTextFieldと任意のイベント(挿入、更新、削除)にDocumentListenerを追加しましたI:
evt.getDocument().getLength()
テキストフィールドのコンテンツの合計長を返します。
他のヒント
これは、この" bug"に関連している可能性があります。 (または「機能」)
リスナーは、イベントを処理する前にキーイベントを通知されます リスナーが「盗む」ことを許可するそれらを消費することによってイベント。これは与える 消費イベントの古いawt概念との互換性。
" typed" イベントは、コンポーネントにテキストが入力されたことを意味しません。これは バグ、意図された動作です。
可能な解決策は、関連ドキュメント
// Listen for changes in the text
myTextField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
// text was changed
}
public void removeUpdate(DocumentEvent e) {
// text was deleted
}
public void insertUpdate(DocumentEvent e) {
// text was inserted
}
});
テキストがどのように変更されても、これは機能します。クリップボードのカット/ペースト、プログラムによる" setText()" TextField、またはUIのフィールドに入力するユーザー。
KeyEvent
は低レベルのイベントで、ここでは適切ではありません[おなじみのように聞こえます]。
JTextField
システムは、文字が入力されたことをどのように認識しますか?キー入力イベント(IIRC、PL& Fを介して行われます)を介して。イベントは、リスナーの前にシステムリスナーにディスパッチされますか?そうするかもしれないし、しないかもしれない。
この場合、おそらく Document
に移動して、より高いレベルのリスナーを追加します。 Swingでは、モデルを早期に使用することをお勧めします。「J」クラスのインターフェイスは一貫性がありません。入力データをインターセプトする場合、おそらくカスタムモデル(または Document
の場合は DocumentFilter
)が必要です。
このコードを使用:
public void jTextField6KeyReleased(java.awt.event.KeyEvent evt)
{
System.out.println(jTextField6.getText().length());
}