JavaFX:如何禁用 TableView 中的 ScrollBars

gee*_*que 1 css java javafx tableview

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

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

在此输入图像描述

我在下面尝试过的事情

我读了这篇文章,但答案只是使单元格调整大小以适应宽度,而不是禁用ScrollBar. 我在这里ScrollBar阅读了有关s的文档,但找不到 a或属性。我也阅读了这里的文档,但没有运气。visibleenabledTableView

我在这里搜索了JavaFX CSS指南,发现下面有两个策略可以引用滚动窗格。

-fx-hbar-policy:
-fx-vbar-policy:
Run Code Online (Sandbox Code Playgroud)

但将 包裹TableView在 a 中ScrollPane并没有按预期工作。它不允许我“适应父母”。我想引用这些属性,但TableView如果可能的话,可以直接引用。非常感谢任何建议。

Sla*_*law 7

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

.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;
}
Run Code Online (Sandbox Code Playgroud)

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

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();
    }
});
Run Code Online (Sandbox Code Playgroud)

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

table.setMinSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);
Run Code Online (Sandbox Code Playgroud)

如果您不希望TableView超出其首选大小,请对最大大小执行相同的操作。如果需要,您还可以给出明确的首选项大小。