javafx - 自动调整滚动 Pane 的大小

标签 javafx javafx-2 javafx-8

我想调整 ScrollPane 的大小以适合父组件。我测试了这段代码:

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;


public class MainApp extends Application {

    @Override
    public void start(Stage stage) throws Exception {

        BorderPane bp = new BorderPane();
        bp.setPrefSize(600, 600);
        bp.setMaxSize(600, 600);
        bp.setStyle("-fx-background-color: #2f4f4f;");

        VBox vb = new VBox(bp);

        ScrollPane scrollPane = new ScrollPane(vb);
        scrollPane.setFitToHeight(true);
        scrollPane.setFitToWidth(true);

        scrollPane.setHbarPolicy(ScrollBarPolicy.AS_NEEDED);
        scrollPane.setVbarPolicy(ScrollBarPolicy.AS_NEEDED);

        Scene scene = new Scene(scrollPane);

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

但是正如你所看到的,我没有看到树形滚动条。我的代码有什么问题吗?

enter image description here

最佳答案

滚动条不会显示,因为

  1. 您已将策略设置为 ScrollBarPolicy.AS_NEEDED
  2. 滚动条的宽度和高度会自动调整为其容器的宽度和高度,在本例中,容器是可调整大小的 Vbox。

要解决此问题,您可以删除 setFitToHeightsetFitToWidth 并将它们保留为 false。

请注意,ScrollBarPolicy 也可以设置为 ALWAYS,而不是 AS_NEEDED,即使窗口展开,这也会保留滚动条.

Refer here for more information using ScrollPane

ScrollPane API: setFitToHeight

    public class MainApp extends Application {

        @Override
        public void start(Stage stage) throws Exception {

            BorderPane bp = new BorderPane();
            bp.setPrefSize(600, 600);
            bp.setMaxSize(600, 600);
            bp.setStyle("-fx-background-color: #2f4f4f;");

            VBox vb = new VBox(bp);

            ScrollPane scrollPane = new ScrollPane(vb);
            //scrollPane.setFitToHeight(true);
            //scrollPane.setFitToWidth(true);

            scrollPane.setHbarPolicy(ScrollBarPolicy.ALWAYS);
            scrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);

            Scene scene = new Scene(scrollPane);

            stage.setScene(scene);
            stage.show();
        }

        public static void main(String[] args) {
            launch(args);
        }
    }

关于javafx - 自动调整滚动 Pane 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25037196/

相关文章:

java - 如何从 javafx 中的按钮内部获取按键事件

java - javafx 中具有绑定(bind)属性的空指针/数组索引越界/疯狂异常

java - 获取 JavaFX 表中的复选框值

javafx - 如何在javaFX中使 Canvas 可调整大小?

JAVAFX:如何在 TableView 中包含数据的单元格上设置 MouseEvent 左键单击操作

JavaFX 事件/监听器/处理程序

javafx-2 - 如何在 JavaFX 中实现可以处理任何 EventType 的真正自定义事件处理程序?

javafx从mysql接收图像设置为 ImageView

css - JavaFX如何应用CSS主题

java - 删除 WebView Javafx 中的滚动条