ユーザーが入力したときにJTextFieldのコンテンツの長さを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/401598

  •  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());
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top