2016-06-25 36 views
2

ComboBoxを作成して、選択したImageのプレビューを表示しようとしていますが、代わりにComboBoxに文字列値が表示されます。JavaFXコンボボックス画像

ComboBoxNodeというように作成すると表示される唯一の方法は、ドロップダウンメニューから選択したオプションが消えたら、誰かが提案してくれればうれしいということです。

以下の私のコード:

String notOnLine = "file:Java1.png"; 
String onLine = "file:Java2.png"; 
ObservableList<String> options = FXCollections.observableArrayList(); 
options.addAll(notOnLine, onLine); 
final ComboBox<String> comboBox = new ComboBox(options); 
comboBox.setCellFactory(c -> new StatusListCell()); 

ListCell

public class StatusListCell extends ListCell<String> { 
    protected void updateItem(String item, boolean empty){ 
     super.updateItem(item, empty); 
     setGraphic(null); 
     setText(null); 
     if(item!=null){ 
      ImageView imageView = new ImageView(new Image(item)); 
      imageView.setFitWidth(40); 
      imageView.setFitHeight(40); 
      setGraphic(imageView); 
      setText("a"); 
     } 
    } 

} 

preview

私は、リストが閉じられた後に画像がComboBox自体に表示されるようにしたいと思います。現在、URLを表示しているだけです(例:file:Java1.png)。

+0

は、今では – Marcin

答えて

3

あなたはComboBoxbuttonCellPropertyを指定することができます。

comboBox.setButtonCell(new StatusListCell()); 

ボタン電池がコンボボックス 「ボタン」の領域に示されているものをレンダリングするために使用されます。画像は私がコンボボックスにその画像を見てみたいと思います選択すると

+1

また、 '' ComboBox'に収まるImageView'作るために絶頂の制約を調整するだけで、画像パス(文字列)です。 'comboBox.setMinHeight(50);'さらに、 'ImageView'の再作成は避けるべきです。 'image'プロパティを' null'に設定すると何も表示されず、ノードの再作成を避けることができます。また、小さな画像の場合、これは問題ではありませんが、大きな画像の場合はキャッシュを使用することをお勧めします(例:Map >)。 – fabian

関連する問題