JavaFX组合框项在选择时被清除

JavaFX组合框项在选择时被清除,java,javafx,combobox,javafx-8,Java,Javafx,Combobox,Javafx 8,我有一个奇怪的问题。我在JavaFX中使用了一个组合框,其中每个项目都是一个HBox,是图像和标签的组合 list.forEach(continent -> { Image image = new Image(getClass().getResourceAsStream(continent + ".png")); ImageView imageView = new ImageView(image); imageView.setFitHeight(25); i

我有一个奇怪的问题。我在JavaFX中使用了一个组合框,其中每个项目都是一个HBox,是图像和标签的组合

list.forEach(continent -> {
    Image image = new Image(getClass().getResourceAsStream(continent + ".png"));
    ImageView imageView = new ImageView(image);
    imageView.setFitHeight(25);
    imageView.setFitWidth(25);
    imageCombo.getItems().add(new HBox(imageView, new Label(continent)));
 });
list
是字符串的数组列表
imageCombo
只是一个
ComboBox
以下是启动应用程序时的结果

在这之前没有问题。然而,当我选择其中一个项目时,问题就出现了。当我这样做时,它会被选中,但当我再次展开组合框列表时,先前选中的项目将变为空白,如果我选择该项目,该项目也将不可见。我试着使用细胞工厂,似乎帮不了我多少忙。以下是选择欧洲和非洲为例后的情况。请注意,非洲显示为当前选定的项目,因为这是最后选定的值


正如注释中所指出的:API文档不建议将
节点
插入到
组合框

您的
组合框
只能存储
字符串
值:

ComboBox<String> comboBox = new ComboBox<>();
comboBox.setItems(FXCollections.observableArrayList("asia", "europe", "america"));
然后使用此实现在下拉列表中显示
HBox
es:

comboBox.setCellFactory(param -> new MyListCell());
要在组合框本身上显示:

comboBox.setButtonCell(new MyListCell());


注意:通常情况下,
组合框不应存储字符串值,而应存储表示大陆的类的实例,如封装大陆名称和图像路径的
大陆

API文档不建议将
节点
插入到
组合框
的项中。因此,可以通过使用cellfactory为具有图像和标签字符串的组合框的项目创建数据模型来解决这个问题。@monolith52如果您能告诉我如何使用cellfactory获得图像和字符串,那就太好了。我不能让它工作,所以我试着这样做。工作得很有魅力
comboBox.setButtonCell(new MyListCell());