轻微的图形烦恼,但我设置了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"));
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,单击超链接时,标签会更改高度。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");
Run Code Online (Sandbox Code Playgroud)
这将导致非空单元格具有其首选大小(根据内容,在这种情况下,它只是字符串),而空单元格将具有其首选大小为45。
| 归档时间: |
|
| 查看次数: |
1194 次 |
| 最近记录: |