关于java:JavaFX:如何在TableView中禁用ScrollBar

JavaFX: How to disable ScrollBars in TableView

我有一个JavaFX TableView,当父节点的大小调整得太小而无法显示数据而不是使其变得可滚动时,我希望表行为截断TableView的图像。为了澄清,我只希望滚动条被禁用或不可见,因此它们不会显示。

下面是我在SceneBuilder中的节点层次结构,以帮助您。

enter

1
2
-fx-hbar-policy:
-fx-vbar-policy:

但是将TableView包裹在ScrollPane中并没有按预期工作。它不允许我"适合父母"。我想引用这些属性,但是如果可能的话,直接在TableView中引用。任何建议,我们将不胜感激。


完全隐藏滚动条,无论是否"应该"显示,都可以使用以下CSS实现:

1
2
3
4
5
6
7
8
9
.table-view .scroll-bar * {
    -fx-min-width: 0;
    -fx-pref-width: 0;
    -fx-max-width: 0;

    -fx-min-height: 0;
    -fx-pref-height: 0;
    -fx-max-height: 0;
}

如果要禁用所有滚动,则可以将事件过滤器添加到TableView

1
2
3
4
5
6
7
8
table.addEventFilter(ScrollEvent.ANY, Event::consume);

// or if you only want to disable horizontal scrolling
table.addEventFilter(ScrollEvent.ANY, event -> {
    if (event.getDeltaX() != 0) {
        event.consume();
    }
});

如果您不希望在父级变得太小时缩小TableView,请设置最小大小以使用首选大小:

1
table.setMinSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);

如果您不希望TableView增长到其首选大小,请对最大大小进行相同的操作。如果需要,还可以给出一个明确的首选大小。