gpt4 book ai didi

image - Javafx ComboBox 选择后项目消失

转载 作者:行者123 更新时间:2023-12-02 11:56:15 30 4
gpt4 key购买 nike

我创建了一个(JavaFX)组合框,其中填充了由HBoxes组成的可观察列表,以便我可以显示每个图像中包含一些文本的图像列出单元格。

这显示得很好,除了每当您选择列表中的一项时,它就会消失。一旦您选择了每个项目,它就不会渲染任何项目。 (您仍然可以通过单击它们之前所在的空间来选择它们。

你知道我该如何纠正这个问题吗?

enter image description here enter image description here

我的部分代码如下所示:

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);


}

预先感谢您的帮助!

最佳答案

好的,感谢 @James_D 的非常友善的帮助,我已经成功解决了这个问题!

这适用于像我一样对 Java 文档中给出的示例感到有点畏惧的人。 (尽管,我下面的描述可能更糟糕!!)

<小时/>

所以,我首先添加一个 HBox ,它位于我想要的布局中,直接添加到 ComboBox 中......这是一个坏主意!

因此,在删除所做的所有操作之前,请将 HBox 保存到某处,然后执行以下操作:

1。创建一个新类来保存将进入每个单元格的日期(图像和字符串)。让 getter/setter 来执行此操作。我调用了我的 IconTextCell

2。将以下代码添加到 ComboBox 所在的类中:

yourComboBox.setCellFactory(new Callback<ListView<T>, ListCell<T>>() {

@Override public ListCell<T> call(ListView<T> p) {
return new ListCell<T>() {
Label name = new Label();
Label icon = new Label();
private final HBox cell;
{
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
cell = new HBox();

//HERE, ADD YOUR PRE-MADE HBOX CODE

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);
}

@Override protected void updateItem(T item, boolean empty) {
super.updateItem(item, empty);

if (item == null || empty) {
setGraphic(null);
} else {
name.setText(item.getLabel());
icon.setGraphic(item.getIcon());
setGraphic(cell);
//HERE IS WHERE YOU GET THE LABEL AND NAME
}
}
};
}
});

您会发现主要内容与我已经制作的内容非常相似,因此不会丢失任何代码。只需将“T”替换为您自己的代表单元格的类即可。

3。这将在列表中显示您的图标和字符串,但您还需要显示在按钮中(组合框的灰色顶部选择器部分,也称为按钮) 。为此,我们需要添加以下代码:

class IconTextCellClass extends ListCell<T> {
@Override
protected void updateItem(T item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item.getLabel());
}
}
};

selectionBox.setButtonCell(new IconTextCellClass());

...我就是这么做的。我希望这会有所帮助 - 请将其与我原来的帖子进行比较。实际内容(我创建 HBox 等的地方)显然没有被概括。您可以根据需要使其变得简单或复杂。

再次感谢您的帮助!我希望这篇文章可以帮助其他人!

关于image - Javafx ComboBox 选择后项目消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26319040/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com