2017-03-24 3 views
0

私はAutoComplete ComboBox in JavaFXを読みましたが、ほとんどのアップルの答えはラムダ式を使用しています。ラムダ式のないJavaFXのオートコンプリートコンボボックス

私のプロジェクトでは私はそれらを使うことができないので、誰かがラムダ式なしでコードを提供できるかどうか尋ねたいと思います。あなたのIDEを前後に変換することができるはず

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

すべてのラムダ式はanonymusクラスに変換することができます。しかし、javafx ** 8でラムダを使用することは許されていません**ラムダを使用するAPIにクラスがあるので、不条理な制約のようです... – fabian

+0

私はバージョン7を使用しています。 lamda式がこれを参照してください知っている。 –

+0

2つのメソッドに関するドキュメントを参照することで、非ラムダ実装の記述方法を決定できます。[Observable.addListener](http://docs.oracle.com/javase/8/javafx/api/javafx/ Bean/Observable.html#addListener-javafx.beans.InvalidationListener-)および[Node.addEventHandler](http://docs.oracle.com/javaf/8/javafx/api/javafx/scene/Node.html#addEventHandler- javafx.event.EventType-javafx.event.EventHandler-)。匿名のクラスを書くことに慣れていると仮定します。 – VGR

答えて

1

:ここ

は、ラムダ式とコードの2つの部分です。以下は、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を作成できます。

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