ComboBox: TestEditor to ListView binding

Kirill Kirichenko kirill.kirichenko at
Mon Jul 7 19:50:29 UTC 2014

I have seen search box. Correct me if I'm wrong - this example just 
shows how to create a custom control that has an icon, text field and a 
button. What's more important to me is to be able to show a popup with 
say a ListView and be able to work with it like an ordinary combobox 
does (be ontop, autoclose, move with the parent window). I'm afraid 
searchbox example doesn't show it.
I tried to make it from scratch - using a scene without a decoration 
with a ListView inside. I think it's to burdensome to control all those 
focus, windows, mouse hover and click events.

Maybe searchbox is supposed to show search results in a separate 
component ? But I prefer a popup.


On 07.07.14 18:47, Stephen F Northover wrote:
> 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