8


1

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

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

キーストロークの後にユーザーに表示される長さを取得する簡単な方法はありますか?

4 Answer


8


これはおそらく最適な方法ではありませんが(そしてそれはしばらく経ちましたが)、過去に私はJTextFieldとあらゆるイベント(insert、update、remove)にDocumentListenerを追加しました。

evt.getDocument()。getLength()

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


3


これはこのhttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4140413["bug "(あるいはむしろ"機能 ")に関連している可能性があります。]

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

考えられる解決策は、http://www.velocityreviews.com/forums/t136479-jtextfield-cant-listen-when-the-text-is-changed.html [関連文書]を聴くことです。

// 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のフィールドへのユーザー入力。 _


3


`KeyEvent`は低レベルのイベントで、ここではふさわしくありません[おなじみのとおり]。

`JTextField`システムは文字がタイプされたことをどのように認識しますか? キー入力イベント(IIRC、PLを通して行われる)を通して イベントはリスナーの前にシステムリスナーに送出されますか? それはしてもしなくてもよいです。

この場合、おそらく Document`に行き、より高いレベルのリスナーを追加したいでしょう。 Swingでは、モデルを早期に使用することをお勧めします - 'J’クラスのインターフェースはインコヒーレントです。 あなたが入力データを傍受しているのなら、おそらくカスタムモデルが欲しいでしょう(あるいは `Document`の場合は DocumentFilter`)。


2


このコードを使用してください:

public void jTextField6KeyReleased(java.awt.event.KeyEvent evt){System.out.println(jTextField6.getText()。length()); }