【问题标题】:JavaFX ScrollPane [ setPrefSize, setMinSize, setMaxSize ] not workingJavaFX ScrollPane [ setPrefSize,setMinSize,setMaxSize ] 不起作用
【发布时间】:2016-12-21 21:07:46
【问题描述】:

我正在编写一个带有 ScrollPane 的 GUI 应用程序,但在调整大小时遇到​​了一些问题。我提取了以下示例中的基本代码:

import javafx.application.Application;
import javafx.geometry.Bounds;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
import javafx.scene.layout.VBox;
import javafx.scene.control.ScrollPane;

public class JavaFXExample extends Application {

    final int width = 300;
    final int height = 300;

    @Override
    public void start(Stage primaryStage) {

        Button b = new Button("This should be at the bottom!");

        //this vbox goes inside the scrollpane
        VBox boxInScrollPane = new VBox(10);
        boxInScrollPane.setAlignment(Pos.BOTTOM_CENTER);
        boxInScrollPane.getChildren().add(b);

        //main content
        ScrollPane scrollPane = new ScrollPane();
        scrollPane.setContent(boxInScrollPane);
        scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
        scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);

        //Doesn't do anything!
        scrollPane.setPrefSize(100, 100);
        scrollPane.setMaxSize(100, 100);
        scrollPane.setMinSize(100, 100);

        Scene scene = new Scene(scrollPane, width, height);

        primaryStage.setScene(scene);
        primaryStage.show();


        //set size of boxInScrollPane to be equal to the viewport
        Bounds viewportBounds = scrollPane.getViewportBounds();
        double innerWidth = viewportBounds.getMaxX() - viewportBounds.getMinX();
        double innerHeight = viewportBounds.getMaxY() - viewportBounds.getMinY();
        System.out.println(innerWidth + " " + innerHeight);
        boxInScrollPane.setPrefSize(innerWidth, innerHeight);

    }

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

}

所以我有一个窗口,其中包含一个 ScrollPane,其中包含一个 VBox,其中包含一个按钮。这里的示例是任意的,我在 300x300px 窗口中将滚动窗格的大小调整为 100x100px。重要的是,当我运行这段代码时,我会得到一个填充整个窗口的滚动窗格!这是我的输出:

这是怎么回事?

【问题讨论】:

    标签: java user-interface javafx scrollpane


    【解决方案1】:

    解决方案:

    Pane pane = new Pane(scrollPane);
    Scene scene = new Scene(pane, width, height);
    
    primaryStage.setScene(scene);
    
    primaryStage.show();
    

    来自场景构造器文档:

    为具有特定大小的特定根节点创建场景。

    将 ScrollPane 设置为根节点将使其在构造函​​数中调整为给定大小,因此之前的设置将不起作用。

    解决方案是制作一个简单的窗格,该窗格将调整大小,以便 ScrollPane 遵循自己的规则。

    【讨论】:

      【解决方案2】:

      场景根的大小可以填充整个场景,而不管其最小/首选项/最大大小。如果您希望ScrollPane 保持 100 像素宽和 100 像素高,请将其包装在另一个容器中(几乎任何容器都可以);然后容器将被调整大小,但ScrollPane 将尊重其布局大小:

      Scene scene = new Scene(new StackPane(scrollPane), width, height);
      

      默认情况下,StackPane 将其内容居中,因此会导致

      【讨论】:

        猜你喜欢
        • 2020-06-21
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        相关资源
        最近更新 更多