2017-03-24 35 views
0

我读AutoComplete ComboBox in JavaFX但最upvotes答案使用Lambda表达式。自动完成组合框JavaFX中没有Lambda表达式

在我的项目,我可以不使用它们,所以我想问一下,如果有人可以不lambda表达式提供的代码。

这里是代码的两个部分lambda表达式:

1)

comboBox.getEditor().focusedProperty().addListener(observable -> { 
      if (comboBox.getSelectionModel().getSelectedIndex() < 0) { 
       comboBox.getEditor().setText(null); 
      } 
     }); 

2)

comboBox.addEventHandler(KeyEvent.KEY_PRESSED, t -> comboBox.hide()); 
+2

每个lambda表达式可被转换到一个anonymus类。但是没有被允许使用lambda表达式在JavaFX的** 8 **似乎是一个荒谬的约束,因为有使用Lambda表达式API中的类... – fabian

+0

我使用的版本7.只想塔格它在JavaFX的8这样的人谁知道lamda表达看到这一点。 –

+0

你应该能够确定如何通过查看这两种方法的文档编写非拉姆达实现:[Observable.addListener](http://docs.oracle.com/javase/8/javafx/api/javafx/豆/ Observable.html#的addListener-javafx.beans.InvalidationListener-)和[Node.addEventHandler](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#addEventHandler- javafx.event.EventType-javafx.event.EventHandler-)。假设你熟悉编写匿名类,那就是。 – VGR

回答

1

你的IDE应该能够来回转换。以下是在Eclipse中使用它的一个示例。

1)

2)

comboBox.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() { 
      @Override 
      public void handle(KeyEvent t) { 
       comboBox.hide(); 
      } 
     }); 

希望有所帮助。

+0

非常感谢。我使用IntelliJ,然后我没有找到该选项? –

+0

我认为只有启用Java 8时才会显示该选项。 –

0

如果你愿意使用外部库,你可以让一个自动填充组合框使用ControlsFX的代码只有几行。

ComboBox<String> comboBox = new ComboBox<>(); 
comboBox.getItems().addAll("Option A", "Option B", "Option C"); 
comboBox.setEditable(true); 
TextFields.bindAutoCompletion(comboBox.getEditor(), comboBox.getItems()); 

controlsFX autocomplete box