gpt4 book ai didi

ListView设置虚拟行高

转载 作者:行者123 更新时间:2023-12-02 00:41:43 25 4
gpt4 key购买 nike

一个小的图形问题,但我有一个 ListView 设置为显示自定义对象,其设置高度高于默认值。我尝试使用 setFixedCellSize(),它在大多数情况下都能完美运行,但在一种情况下,某些单元格的单元格高度可能会根据用户交互而增大和缩小。

class Example extends Label {
private boolean change = true;
public Example(String text) {
super(text);
setMinHeight(150);
setPrefHeight(150);
setMaxHeight(150);
Hyperlink link = new Hyperlink("Change");
setGraphic(link);
link.setOnAction(ae -> {
change = !change;
if(change) {
setMinHeight(80);
setPrefHeight(80);
setMaxHeight(80);
} else {
setMinHeight(180);
setPrefHeight(180);
setMaxHeight(180);
}
});
}
}

ListView<Node> list = new ListView<>();
list.setFixedCellSize(150);
list.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
list.getItems().addAll(new Example("Hello world"), new Example("12345"));

在我上面的示例中,单击超链接时标签会更改高度。添加 setFixedCellSize() 后,它不再执行此操作。是否有另一种方法可以实现更改虚拟行的相同效果但允许自定义节点更改高度?

最佳答案

您可以设置一个自定义单元格工厂,它根据单元格的状态设置您想要的高度(我假设“虚拟单元格”是指空单元格):

ListView<String> lv = new ListView<>();
lv.setCellFactory(lst ->
new ListCell<String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setPrefHeight(45.0);
setText(null);
} else {
setPrefHeight(Region.USE_COMPUTED_SIZE);
setText(item);
}
}
});
lv.getItems().addAll("Hello", "World");

这将导致非空单元格具有其首选大小(根据内容,在本例中它只是字符串),而空单元格将具有其首选大小 45。

Illustration

关于ListView设置虚拟行高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46249112/

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