JavaFx TableView, как определить, виден ли ScrollBar - PullRequest
0 голосов
/ 28 июня 2018

На основании этого примера (Вариант # 1) Я создаю фиксированный столбец, используя 2 TableView s в SplitPane. TableView, который показывает другие столбцы (не фиксированный), может стать настолько широким, что отображается ScrollBar, для которого я должен компенсировать -fx-padding: 0 0 13px 0;, чтобы сохранить TableRow с обоих TableView s выровнены.

Итак, я должен выяснить, отображается ли ScrollBar или нет, или найти совершенно другой способ обеспечения выравнивания TableRow. К сожалению, очевидный способ не работает. (ScrollBar не null, я просто не опубликовал код, чтобы убедиться, что)

ScrollBar horizontalScrollBar = (ScrollBar) lookup(".scroll-bar:horizontal");
horizontalScrollBar.visibleProperty().addListener((observable, oldValue, newValue) -> {
    System.out.println(newValueobservableScrollBar);
});

По какой-то причине слушатель не срабатывает, когда появляется или исчезает ScrollBar.

1 Ответ

0 голосов
/ 02 июля 2018

Итак, чтобы выяснить, является ли конкретная полоса прокрутки видимой, мне сначала нужно было ее найти, поэтому я просмотрел все полосы прокрутки в этой конкретной таблице.

Set<Node> scrollBars = itemsTableView.lookupAll(".scroll-bar");

Затем отфильтруйте набор, чтобы получить нужную полосу прокрутки (в моем случае - горизонтальную)

Optional<Node> horizontalScrollBar = scrollBars.stream()
          .filter(node ->
            ((ScrollBar) node).getOrientation().equals(Orientation.HORIZONTAL))
          .findAny();

А затем присоедините слушателя к свойству видимости полосы прокрутки

horizontalScrollBar.ifPresent(node ->
          node.visibleProperty().addListener((observable, oldValue, newValue) -> {
                    if(newValue)
                    {
                        columnTableView.setStyle("-fx-padding: 0 0 13px 0;");
                    } else
                    {
                        columnTableView.setStyle("-fx-padding: 0 0 0 0;");
                    }
              })
        );

Почти выглядит просто так? Ну, это так, как только вы поняли, что

lookup(".scroll-bar:horizontal");

НЕ возвращает горизонтальную полосу прокрутки, кроме первой (вертикальной). И до тех пор, пока вы не поймете это, ваше приложение будет вести себя как-то загадочно.

...