JavaFX AnchorPane maxHeight игнорируется с обрезанным кружком - PullRequest
0 голосов
/ 14 января 2020

У меня есть AnchorPane, которая содержит обрезанный круг. Я установил максимальную высоту для анкерной панели, чтобы, если позиция круга была высокой, круг не отображался. Проблема заключается в том, что, когда круг идет в нижнюю часть anchorpane, это увеличивает его высоту. Это не должно случаться.

1002 * Это происходит еще до того, обрезается элемент достигает нижней части anchorpane. Как только «невидимая» часть круга достигает нижней части, она начинает увеличивать свою высоту.
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);
    }

}

y = 500

y = 575

...