2016-08-16 11 views
0

私は簡単な編集可能なComboBoxを自動完成で構築しています。内部のTextFieldの内容に応じて、ComboBoxの内容をフィルタリングします。
私はそれをうまく機能させることができましたが、TextFieldから文字を削除するときに自動補完ロジックを再適用することに問題があります。JavaFX ComboBox keyeventのTextFieldコンテンツ

私が見たことから、キーを押したイベントでは、テキストフィールドの内容にまだ追加された文字は含まれていません。
TextFieldのコンテンツをシミュレートするKeyEventの文字列バージョンを追加する単純なロジックを作成しました。私は基本的に
私のロジックを適用するための完全なテキストを持っている必要があり、このbeacuseを作った:

// In constructor 
cmb.getEditor().setOnKeyPressed(this::handleOnKeyPressed); 

public void handleOnKeyPressed(KeyEvent e) { 
    String text = comboBox.getEditor().getText() + e.getText(); 
    // Filtering logic based on text 
} 

いくつかの文字を入力するときにこれがうまく動作しますが、バックスペースを押すか、キーを削除すると、ある(機能していませんコードごとに明らかです)。
キャレットの位置を確認し、キャレットの位置に基づいてバックスペース/削除文字の削除をシミュレートする方法があります。しかし、これはかなり面倒です...
これを行うための他の優しい方法がないのでしょうか?全文を直接入手することは可能ですか?最初は変更リスナーを追加することを考えましたが、TextFieldでは不可能と思われます。

アイデア?
ありがとうございます!

+0

を)'のTextField – ItachiUchiha

+0

はい、確かに、以下で検証された回答! – Xendar

答えて

1

エディタフィールド内のテキストが変更されるたびに起動されますエディタのtextPropertyChangeListener<String>を追加することができます:あなたは `textProperty(にリスナーを追加することができます

cmb.getEditor().textProperty().addListener(this::handleComboTextChange); 

... 

public void handleComboTextChange(ObservableValue<? extends String> o, String oldText, String newText) { 
    ... 
} 
+0

ああ、私はとても馬鹿だと感じています...もちろん、リスナーのテキストプロパティを調べなければなりません... ありがとう! – Xendar

関連する問題