ListView设置虚拟行高

时间:2017-09-16 01:02:20

标签: listview javafx

一个小的图形烦恼但我有一个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()时不再执行此操作。是否有另一种方法可以实现更改虚拟行的相同效果,但允许自定义节点更改高度?

1 个答案:

答案 0 :(得分:5)

您可以设置一个自定义单元格工厂,根据单元格的状态设置所需的高度(我假设“虚拟单元格”表示空单元格):

language: csharp
dist: trusty
sudo: required
mono: none
dotnet: 2.0.0
solution: OpenRMS.sln
branches:
  only:
    - master-net-core
before_script:
  - chmod +x build.sh
  - chmod +x test.sh
script:
  - ./build.sh

这将导致非空单元格具有其首选大小(根据内容,在这种情况下,它只是字符串),而空单元格的首选大小为45。

this build