package de.idos.ev; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.ComboBox; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.stage.Stage; import javafx.util.Callback; public class ComboDemo extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { ComboBox box = new ComboBox(); RendererListCellFactory cellFactory = new RendererListCellFactory<>(new ToStringRenderer()); box.setCellFactory(cellFactory); box.getItems().add("The Item"); stage.setScene(new Scene(box)); box.getSelectionModel().select(null); stage.show(); } public interface ItemRenderer { String displayAsString(T t); String displayPromptText(); } public class ToStringRenderer implements ItemRenderer { @Override public String displayAsString(Object o) { return o.toString(); } @Override public String displayPromptText() { return "Select"; } } public class RendererListCellFactory implements Callback, ListCell> { private ItemRenderer renderer; public RendererListCellFactory(ItemRenderer renderer) { this.renderer = renderer; } @Override public ListCell call(ListView tListView) { return new RendererListCell<>(renderer); } } public class RendererListCell extends ListCell { private ItemRenderer renderer; public RendererListCell(ItemRenderer renderer) { this.renderer = renderer; } @Override protected void updateItem(T t, boolean b) { super.updateItem(t, b); if (null == t) { setText(renderer.displayPromptText()); return; } setText(renderer.displayAsString(t)); } } }