【问题标题】:JavaFX AnchorPane maxHeight ignored with clipped CircleJavaFX AnchorPane maxHeight 被裁剪的 Circle 忽略
【发布时间】:2021-07-15 17:29:20
【问题描述】:

我有一个 AnchorPane,其中包含一个剪裁圆。我为锚窗格设置了最大高度,这样如果圆圈的 y 位置很高,则不会显示圆圈。问题是当圆圈到达锚板的下部时,它会增加它的高度。这不应该发生。

这甚至发生在被剪裁的元素到达锚窗格的下部之前。一旦圆的“不可见”部分到达下部,它就开始增加它的高度。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Init extends Application {

    private AnchorPane canvasContainer;

    private AnchorPane mainPane;

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

        canvasContainer = new AnchorPane();
        mainPane = new AnchorPane();

        Scene scene = new Scene(mainPane, 800, 700);
        stage.setScene(scene);

        canvasContainer.setPrefWidth(600.0d);
        canvasContainer.setPrefHeight(500.0d);

        //IGNORED
        canvasContainer.setMaxHeight(canvasContainer.getPrefHeight());

        canvasContainer.setLayoutX(14.0d);
        canvasContainer.setLayoutY(14.0d);

        canvasContainer.setStyle("-fx-border-color: black; -fx-border-width: 1 1 1 1;");

        RadialGradient gradient = new RadialGradient(0, 0, 0.5, 0.5, 1, true, CycleMethod.NO_CYCLE, new Stop[] {
                new Stop(0, Color.ORANGE),
                new Stop(0.2, Color.YELLOW),
                new Stop(0.5, Color.TRANSPARENT)
        });

        //I AM MODIFYING THIS VALUE
        int y = 500;

        Circle circleGradient = new Circle(200, y, 50);
        circleGradient.setFill(gradient);

        Rectangle rect = new Rectangle(200 - 50, y - 50, 1000, 50/2);

        circleGradient.setClip(rect);

        canvasContainer.getChildren().addAll(circleGradient);

        mainPane.getChildren().add(canvasContainer);

        stage.show();

    }

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

}

【问题讨论】:

标签: javafx height clip


【解决方案1】:

当我试图让一个圆圈变大以填充一个矩形时,我遇到了同样的问题,该矩形是我场景的一小块区域。填充动画效果很好,但 canvasContainer 的 maxHeight 和 maxWidth 被忽略了。就我而言,这最终导致该地区不断扩大并摧毁附近的一切。

解决方案:将圆圈添加到 mainPane 而不是 canvasContainer

【讨论】:

    猜你喜欢
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2015-10-10
    • 1970-01-01
    • 2019-05-02
    • 2019-02-07
    • 1970-01-01
    相关资源
    最近更新 更多