4

我使用水平 SplitPane 制作了一个 javafx 程序,该程序的一侧有一个画布,其中绘制了一些东西。当 SplitPane 调整大小时,Canvas 也会随之调整大小。在我切换到 Java 10 之前一切正常。突然,Canvas 端只能扩展,不能缩小。任何人都知道为什么会这样?(工作 Java 版本是 1.8.0_181)

package test;

import javafx.application.Application;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.SplitPane;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Test extends Application {

private static Display display;

@Override
public void start(Stage primaryStage) {

    display = new Display();
    StackPane stackPaneDisplay = new StackPane();
    stackPaneDisplay.getChildren().add(display);
    stackPaneDisplay.setStyle("-fx-background-color: white");

    AnchorPane anchorPaneDisplay = new AnchorPane();
    anchorPaneDisplay.getChildren().add(stackPaneDisplay);
    AnchorPane.setBottomAnchor(stackPaneDisplay, Double.MIN_VALUE);
    AnchorPane.setTopAnchor(stackPaneDisplay, Double.MIN_VALUE);
    AnchorPane.setLeftAnchor(stackPaneDisplay, Double.MIN_VALUE);
    AnchorPane.setRightAnchor(stackPaneDisplay, Double.MIN_VALUE);

    display.widthProperty().bind(stackPaneDisplay.widthProperty());
    display.heightProperty().bind(stackPaneDisplay.heightProperty());

    StackPane stackPaneLeft = new StackPane();

    SplitPane splitPane = new SplitPane();
    splitPane.setOrientation(Orientation.HORIZONTAL);
    splitPane.getItems().addAll(stackPaneLeft, anchorPaneDisplay);

    BorderPane root = new BorderPane();
    root.setCenter(splitPane);

    Scene scene = new Scene(root);
    primaryStage.setMaximized(true);

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

    splitPane.setDividerPositions(0.2);

}

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

}

和帆布类

package test;

import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;

public class Display extends Canvas {

GraphicsContext gc = this.getGraphicsContext2D();

public Display() {
    widthProperty().addListener(e -> {
        draw();
    });
}

public void draw() {
    gc.strokeOval(500, 500, 100, 100);
}

}

提前致谢

4

0 回答 0