当前位置: 首页 > 知识库问答 >
问题:

listview javafx中的多个标签和图像

杜英叡
2023-03-14

我想创建具有多个标签和图像的listView项。我创建了一个cell类:

public class Cell extends ListCell<String> {
private HBox hBox;
private Label description;
private Pane pane;
private ImageView imageView;
private Image deleteImage;
private JFXButton delete;

public Cell() {
    super();
    this.hBox = new HBox();
    this.description = new Label();
    this.pane = new Pane();
    this.delete = new JFXButton("delete");

    this.hBox.getChildren().addAll(description, pane, delete);
    HBox.setHgrow(pane, Priority.ALWAYS);
    delete.setOnAction(event -> getListView().getItems().remove(getItem()));
}

@Override
protected void updateItem(String item, boolean empty) {
    super.updateItem(item, empty);
    setText(null);
    setGraphic(null);

    if (item != null && !empty) {
        description.setText(item);
        setGraphic(hBox);
    }
}

这是我的控制器代码的一部分:

 void addToShopCart(ActionEvent event) {
    Image partImage = selectedPart.getPicture();
    shopListView.getItems().addAll(selectedPart.getDescription());
    shopListView.setCellFactory(param -> new Cell(partImage));
}

selectedpart具有映像的自定义类。但是现在我完全不知道如何向这些标签发送文本,因为updateItem()方法只获得一个字符串。关于图像,我想对每一个项目分别设置不同的图像。我尝试发送到构造函数,但然后所有的图像都是一样的。我使用的是MVC,我也可以使用代码。

共有1个答案

姜运珧
2023-03-14

听起来你的列表项不仅仅是字符串,所以你的模型应该是一个更专业的类。根据它的复杂程度,您甚至可能希望使用TableView,但现在假设您只有一个名称和一个图像,并希望使用ListView

首先,您需要一个类来描述列表中的项目--假设它们是“产品”(因为它是一个购物清单),并且有一个描述和一个图像:

class Product {
    final StringProperty description = new SimpleStringProperty(this, "description"); 
    final StringProperty image = new SimpleStringProperty(this, "image"); 

    // add getters, property-getters and setters...
}

接下来,将cell类定义为扩展ListCell -这将意味着item属性的类型将为product,也应该是updateItem方法的item参数的类型。
现在,无论何时更新/更改项,您都可以更改描述和图像:

@Override
protected void updateItem(Product item, boolean empty) {
    super.updateItem(item, empty);
    setText(null);
    setGraphic(null);

    if (item != null && !empty) {
        description.setText(item.getDescription());
        imageView.setImage(...);
        setGraphic(hBox);
    }
}

添加项时,使用适当的说明和图像创建一个新的product实例,并将其添加到列表中。注意,不需要每次添加项时都调用setCellFactory--应该在初始化期间调用一次(假设在设置单元工厂之后可能有理由更改它,但这不是一种常见的做法,在您的情况下也不需要)。

注意:加载图像可能会很慢(取决于图像大小),因此您可能希望缓存或预加载实际的image对象。您还可以在多个ImageView实例中使用相同的image对象,因此如果多个产品使用相同的图像,这也是有益的。

 类似资料:
  • 我使用JSChart来创建一个简单的时间图。我没有在他们的文档中找到任何设置时间标签的信息。我只想每天出现一次。最好是在午夜。 现在我每个数据集得到1个日期标签。这太过分了。 示例图像 JS函数初始化图表 PHP调用上面的模板。

  • 使用jib-maven-plugin,我想用多个标签构建镜像。虽然基本上运行良好,但它仅用标记图像。 我的Maven

  • 我有导致绘制多条线的数据,我想在图例中为这些线添加一个标签。我认为用下面的例子可以更好地说明这一点, 有没有办法告诉plot方法避免多个标签?我不想尽可能多地使用自定义图例(您可以同时指定标签和线型)。

  • 根据这个和这个GitHub问题,目前没有本地方法在使用构建一个或多个图像时如何为服务的图像提供多个标签。 我的用例是构建docker compose中定义的图像。yml将其归档,并使用一些自定义标记(例如一些构建编号或日期或类似标记)对其进行一次标记,然后将其作为最新标记进行一次标记。 虽然这可以通过使用docker标签的纯轻松实现,但只允许在映像键中设置一个标签。将与一起使用对我来说不是一个选项

  • 我需要计算表示为多个热向量的标签和预测的混淆矩阵。sklearn似乎不支持这种情况。 这是我所拥有的一个例子。假设有三个类,和;目标/标签为: 因此,我们有标签矩阵: 预测是: 预测矩阵为: 我希望输出是一个混淆矩阵,大致如下所示: 我使用来估计分类精度。然而,尽管正在为此类标签的准确性而工作,但混淆矩阵不支持上述场景。是否有任何替代? 另一个问题似乎给出了三个混淆矩阵,这不是我要寻找的情况。

  • 下面是java代码: 这有帮助吗?我真的不知道了...