JavaFX:如何在TableView中禁用ScrollBar

时间:2019-03-11 00:22:06

标签: java css javafx tableview

我希望每个人都过得很好。

我在javafx中有一个TableView,并且当父窗格的大小调整得太小而无法显示数据而不是使其变得可滚动时,我希望表行为截断TableView的图像。为了澄清,我只希望ScrollBars禁用或不可见,以便它们不显示。

下面是我的等级结构,以防万一。

enter image description here

我在下面尝试过的事情

我读了this post,但是答案只是使单元格调整大小以适合宽度,而不是禁用ScrollBar。我阅读了ScrollBar的here上的文档,但是找不到setVisible()或setEnabled()属性。我也很幸运地阅读了TableView文档here

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

-fx-hbar-policy:
-fx-vbar-policy:

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

非常感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:1)

完全隐藏滚动条,无论是否“应该”显示滚动条,都可以使用以下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;
}

如果要禁用所有滚动,则可以将事件过滤器添加到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();
    }
});

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

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

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