ListView单元格会比它们所包含的Node变大



我在为我的大学项目做GUI,我必须在一行中显示一系列由颜色定义的元素。因为它们可以在运行时更改,所以我使用了ListView。不可能有超过四元素,他们应该占据的空间量定义,但是当我把节点列表的细胞内部,周围的细胞显示了边界节点(在这种情况下一个矩形)使得ListView出去他的首选大小和显示滚动条,我不希望看到因为不应该是可滚动列表+很微小的酒吧几乎涵盖了所有。

下面是我为单元格工厂编写的代码:

private void initializeBalcony(SimpleListProperty<String> balconyProperty, ListView<String> balconyView) {
        balconyView.setBorder(null);
        balconyView.setItems(balconyProperty);
        balconyView.setCellFactory(row -> new ListCell<String>() {
            @Override
            protected void updateItem(String item, boolean empty) {
                super.updateItem(item, empty);
                if (item == null || empty)
                    Platform.runLater(() -> this.setGraphic(null));
                else {
                    this.setMaxSize(27.5, 38);
                    Rectangle councillor = new Rectangle();
                    councillor.setWidth(20);
                    councillor.setHeight(35);
                    councillor.setFill(Paint.valueOf(item));
                    Platform.runLater(() -> this.setGraphic(councillor));
                }
            }
        });
    }

加上ListView的FXML定义:

<ListView fx:id="coastBalcony" fixedCellSize="38.0" layoutX="80.0" orientation="HORIZONTAL" prefHeight="40.0" prefWidth="120.0" />

问题图形显示

我不知道我做错了什么,也许我应该只使用和HBox,但我曾经有问题与listchangelistener

您正在设置fixedCellSize="38.0",在HORIZONTAL方向的情况下是单元格的宽度。因此,您应该将其设置为所需值(从您的示例中,我猜它是27.5)。此外,你可能想摆脱单元格填充,无论是手动设置它在你的ListCell实现使用setPadding(new Insets(0))或css:

.list-cell {
    -fx-padding: 0;
}

相关内容

  • 没有找到相关文章

最新更新