我在javafx中填充了数据的GridPane。第一行是标题单元格,我需要将它们垂直固定,以便它们始终在屏幕上(例如excel中的冻结窗格)。
我试过使用两个滚动窗格。到目前为止,这还行不通,因为我试图隐藏顶部滚动窗格的滚动条。我需要使顶部滚动窗格与底部滚动窗格的x轴同步滚动,我只想隐藏滚动条。
我已经考虑过使用堆栈窗格来代替上述方法,但是我不确定如何隐藏水平滚动条。
任何建议将不胜感激。
这是我的FXML
<BorderPane xmlns:fx="http://javafx.com/fxml" fx:id="results_pane" >
<top>
<ScrollPane fx:id="results_scroll_pane_titles" >
<GridPane fx:id="results_grid_view_titles">
</GridPane>
</ScrollPane>
</top>
<left><VBox fx:id="paint_tools_results"></VBox></left>
<center>
<ScrollPane fx:id="results_scroll_pane">
<GridPane fx:id="results_grid_view">
</GridPane>
</ScrollPane>
</center>
<right>
<VBox fx:id="queue_button_tools" alignment="BOTTOM_LEFT" >
<ScrollPane hbarPolicy="NEVER" fx:id="queue_scrollpane" >
<VBox fx:id="selected_page_queue">
<padding><Insets top="0" right="10" bottom="0" left="0"/></padding>
</VBox>
</ScrollPane>
<HBox>
<Button prefWidth="105" fx:id="view_all">View</Button>
<Button prefWidth="105" fx:id="remove_all" >Remove All</Button>
</HBox>
</VBox>
</right>
</BorderPane>
这也是我试图用来隐藏滚动条的代码:
Set<Node> nodes = results_scroll_pane_titles.lookupAll(".scroll-bar");
nodes.stream().filter((node) -> (node instanceof ScrollBar)).map((node) -> (ScrollBar) node).forEach((sb) -> {
if (sb.getOrientation() == Orientation.HORIZONTAL) {
title_scrollbar = sb;
}
sb.setVisible(false);
});
它找到了滚动条并隐藏了实际的滑块,但背景栏仍然可见。
最佳答案
我已经解决了。虽然有人指出我可以使用@VGR的表格视图,但由于我更喜欢使用网格窗格,因此我决定采用其他方法。
我这样做的方法是使滚动窗格的字体大小为1px。
results_scroll_pane_titles.setStyle("-fx-font-size:1px");
这并没有完全删除滚动条,但是非常适合我的需求。当然,然后我需要覆盖子元素的字体大小。
完成此操作后,我便可以绑定滚动条以沿另一个滚动条的h轴滚动。
hPosition.bind(results_scroll_pane.hvalueProperty());
hPosition.addListener(new ChangeListener() {
@Override
public void changed(ObservableValue arg0, Object arg1, Object arg2) {
results_scroll_pane_titles.setHvalue((double) arg2);
}
});
我认为出于我的目的,这比表视图更好,因为表视图具有一些我不需要弄乱的开销。
关于java - 如何在javafx中的Gridpane中修复一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43988547/