我在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/

10-10 10:13