3333import javafx .beans .property .StringProperty ;
3434import javafx .beans .value .ChangeListener ;
3535import javafx .beans .value .ObservableValue ;
36+ import javafx .collections .transformation .FilteredList ;
3637import javafx .fxml .FXML ;
3738import javafx .scene .Node ;
3839import javafx .scene .control .ComboBox ;
@@ -76,9 +77,12 @@ public class ManageWorkController {
7677 private boolean comboChange ;
7778 private Project selectedProject ;
7879
80+ private FilteredList <Project > filteredList ;
81+
7982 public void setModel (final Model model ) {
8083 this .model = model ;
81- projectComboBox .setItems (model .getSortedAvailableProjects ());
84+ filteredList = new FilteredList <>(model .getSortedAvailableProjects ());
85+ projectComboBox .setItems (filteredList );
8286 }
8387
8488 @ FXML
@@ -187,17 +191,15 @@ public Project fromString(final String string) {
187191 comboChange = true ;
188192 // needed to avoid exception on empty textfield https://bugs.openjdk.java.net/browse/JDK-8081700
189193 Platform .runLater (() -> {
190- projectComboBox .getEditor ().selectAll ();
191194 setTextColor (projectComboBox .getEditor (), newValue .getColor ());
192-
193195 });
194196 }
195197
196198 );
197199
198200 projectComboBox .getEditor ().textProperty ().addListener (new ChangeListener <String >() {
199201
200- Boolean isValidProject = true ;
202+ boolean isValidProject = true ;
201203
202204 @ Override
203205 public void changed (final ObservableValue <? extends String > observable , final String oldValue ,
@@ -223,9 +225,11 @@ public void changed(final ObservableValue<? extends String> observable, final St
223225 // needed to avoid exception on empty textfield https://bugs.openjdk.java.net/browse/JDK-8081700
224226 Platform .runLater (() -> {
225227 projectComboBox .hide ();
226- projectComboBox
227- .setItems (model .getSortedAvailableProjects ().filtered (project -> ProjectsListViewController
228- .doesProjectMatchSearchFilter (projectComboBox .getEditor ().getText (), project )));
228+
229+ final String searchText = projectComboBox .getEditor ().getText ();
230+ filteredList .setPredicate (
231+ project -> ProjectsListViewController .doesProjectMatchSearchFilter (searchText , project ));
232+
229233 if (projectComboBox .getEditor ().focusedProperty ().get ()) {
230234 projectComboBox .show ();
231235 }
0 commit comments