8

JTextField には keyTyped イベントがありますが、起動時にセルの内容がまだ変更されていないようです。

そのため、ここで読むと .length() は常に間違っています。

キーストローク後にユーザーに表示される長さを取得する簡単な方法が必要ですか?

4

4 に答える 4

10

これはおそらく最適な方法ではありません (そして、しばらく経ちました) が、過去に、DocumentListener を JTextField と任意のイベント (挿入、更新、削除) に追加しました。

evt.getDocument().getLength()

テキストフィールドの内容の全長を返します。

于 2008-12-30T21:48:56.257 に答える
3

これは、この「バグ」(または「機能」)に関連している可能性があります。

リスナーは、それらを処理する前に重要なイベントについて通知され、リスナーがイベントを消費することによってイベントを「盗む」ことができます。これにより、イベントを消費するという古い awt の概念との互換性が得られます。
「入力された」イベントは、テキストがコンポーネントに入力されたことを意味するものではありません。これはバグではなく、意図された動作です。

考えられる解決策は、関連付けられたドキュメントをリッスンすることです

// 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
}
});

これは、テキストがどのように変更されても機能することに注意してください。クリップボードの切り取り/貼り付け、TextField でのプログラム的な「setText()」、または UI のフィールドへのユーザー入力を介して。

于 2008-12-30T21:50:15.473 に答える
3

KeyEvents は、ここでは適切ではない低レベルのイベントです [おなじみのように聞こえます]。

JTextFieldシステムは、文字が入力されたことをどのように認識しますか? キー型イベント (IIRC、PL&F を介して実行) を介して。イベントはリスナーの前にシステム リスナーにディスパッチされますか? するかもしれないし、しないかもしれない。

この場合、おそらく に移動してDocument、より高いレベルのリスナーを追加する必要があります。Swing では、早い段階でモデルを使用することをお勧めします。'J' クラス インターフェイスは一貫性がありません。入力データをインターセプトする場合は、おそらくカスタム モデル (または の場合Document)が必要DocumentFilterです。

于 2008-12-30T22:10:57.583 に答える
2

次のコードを使用します。

public void jTextField6KeyReleased(java.awt.event.KeyEvent evt)
{
    System.out.println(jTextField6.getText().length());
}
于 2013-10-08T15:52:59.820 に答える