我创建了一个(JavaFX)combobox,我正在使用从HBoxes制作的observable list填充它,以便在每个列表单元格中显示带有一些文本的图像。这样显示得很好,但是每当您选择列表中的某个项目时,它都会消失。一旦您选择了每个项目,它将不再呈现任何项目。(您仍然可以通过单击先前存在它们的空间来选择它们。)
请问您知道如何纠正这个问题吗?
下面显示了我的代码的一部分:
请问您知道如何纠正这个问题吗?
下面显示了我的代码的一部分:
public class IconListComboBox {
Group listRoot = new Group();
VBox mainVBox = new VBox();
ComboBox selectionBox = new ComboBox();
List<HBox> list = new ArrayList<HBox>();
ListView<HBox> listView = new ListView<HBox>();
ObservableList<HBox> observableList;
public IconListComboBox(int dimensionX, int dimensionY, ArrayList<String> names, ArrayList<ImageView> icons)
{
//VBox.setVgrow(list, Priority.ALWAYS);
selectionBox.setPrefWidth(dimensionY);
selectionBox.setPrefHeight(40);
for(int i = 0; i < names.size(); i++)
{
HBox cell = new HBox();
Label name = new Label(names.get(i));
Label icon = new Label();
icon.setGraphic(icons.get(i));
name.setAlignment(Pos.CENTER_RIGHT);
icon.setAlignment(Pos.CENTER_LEFT);
icon.setMaxWidth(Double.MAX_VALUE);
HBox.setHgrow(icon, Priority.ALWAYS);
cell.getChildren().add(icon);
cell.getChildren().add(name);
list.add(cell);
}
observableList = FXCollections.observableList(list);
listView.setItems(observableList);
listView.setPrefWidth(dimensionX);
selectionBox.setMaxWidth(dimensionX);
listView.setMaxWidth(dimensionX);
selectionBox.setItems(observableList);
mainVBox.getChildren().add(selectionBox);
mainVBox.getChildren().add(listRoot);
//mainVBox.getChildren().add(listView);
//listRoot.getChildren().add(listView);
}
非常感谢您提前的协助!
.setCellFactory
如何工作,现在仍然不太明白。我需要进一步研究一下。我能否做类似于:.setCellFactory(new Callback<ListView<HBox>, ListCell<HBox>>()
...? - Ben HaywardComboBox
的类型从HBox
更改为表示数据的类。因此,您需要一个Callback<ListView<T>, ListCell<T>>
,其中T
是表示数据的类。(在文档示例中,表示数据的类是Color
。这里需要更复杂的东西,封装文本和图像。) - James_D.setButtonCell(cellFactory.call(null));
但我需要把它放在哪里呢?cellFactory不是<Color>示例中所给的变量。.. 我需要将其从null更改吗? - Ben Hayward