ComboBox: TestEditor to ListView binding
Stephen F Northover
steve.x.northover at oracle.com
Mon Jul 7 14:47:11 UTC 2014
Hi Kirill,
I looked at this again quickly and while there might be a combination of
events and listeners that can make a combo box behave this way, you are
better to create your own search box and manage the popup list. The
reason for this is that any code you are likely to write that
manipulates the combo box will be sensitive to event ordering.
There is an example of a search field as part of EnsembleApp. It is
quite complicated and fancy and is mixed in with EnsembleApp code so you
might have to work a bit to extract a simpler version of what you are
looking for.
Hopefully Jasper is reading this right now and can whip up a hundred
lines of code or so that do what you want.
Steve
On 2014-07-04, 5:48 PM, Kirill Kirichenko wrote:
> I'm implementing a searchbox.
> In the textfield of the combobox I'm typing a search string.
> textProperty of the editor has an onChange listener which forms a list
> of strings that contain the text as a substring. Then I set this list
> of strings as a content of the drop down list of the combobox.
> The problem is when I start selecting items in the drop down list the
> editor field gets updated making new substring search and updating the
> list again.
> I want to break this dependency. I don't want to update the text
> property when I select an item in the drop down list OR I want to
> distinguish in the textProperty listener what caused that event - real
> editing the field or setting the field trough binding from the list view.
>
> I hope I could make myself clear.
> K
>
> On 05.07.2014 01:21, Stephen F Northover wrote:
>> Hi Kirill,
>>
>> What exactly are you trying to do? The following (crap) listens for the
>> value to change and then sets it back:
>>
>> ChangeListener<String> l = new ChangeListener<String> () {
>> public void changed(ObservableValue observable, String
>> oldValue,
>> String newValue) {
>> System.out.println("attempt to set new value: " +
>> newValue);
>> Platform.runLater(() -> {
>> comboBox3.valueProperty().removeListener(this);
>> System.out.println("restoring old value: " +
>> newValue);
>> comboBox3.setValue(oldValue);
>> comboBox3.valueProperty().addListener(this);
>> });
>> };
>> };
>> comboBox3.valueProperty().addListener(l);
>>
>> This is not good code because it adds and removes a listener to avoid
>> notification when the value is reset. It uses runLater() in order to
>> stop the combo box from getting confused when the value is changed from
>> within a changed listener.
>>
>> Steve
>>
>>
>> On 2014-07-04, 3:09 PM, Kirill Kirichenko wrote:
>>> JavaFX ComboBox has binding between TextEdit field and the ListView
>>> selection such that edit field gets updated when we change the
>>> selected item in the drop down list.
>>> Is there a way to break this binding - when we select an item in the
>>> list the editor field remains untouched. Where should I look at ?
>>>
>>>
>>> Thanks.
>>> K
>>
More information about the openjfx-dev
mailing list