首页 > 解决方案 > javafx:如何设置组的边界,以便它显示内部许多形状的特定窗口,这可能会或可能不会超出我的预期边界?

问题描述

我有一个 JavaFX 组,其中包含很多 ImageViews 和一些叠加层。我希望它渲染一个特定的数学矩形,该矩形通常与组合子对象的边界框不匹配。对于一个更简单的具体示例,我创建了以下应用程序:

import javafx.application.*;
import javafx.scene.*;
import javafx.scene.layout.*;
import javafx.scene.paint.*;
import javafx.scene.shape.*;
import javafx.stage.*;

public class GroupWindow
    extends Application
{
    @Override
    public void start(Stage stage)
        throws Exception
    {
        Group gr = new Group();

        Shape circle1 = new Circle(-300, 0, 50);
        circle1.setFill(Color.GREEN);
        gr.getChildren().add(circle1);

        Shape circle2 = new Circle(0, 300, 50);
        circle2.setFill(Color.GREEN);
        gr.getChildren().add(circle2);

        Shape LLrect = new Rectangle(-200, 0, 200,200);
        LLrect.setFill(Color.BLUE);
        gr.getChildren().add(LLrect);

        VBox vbox = new VBox(gr);

        stage.setScene(new Scene(vbox));

        stage.show();
    }

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

当我运行应用程序时,我得到一个看起来像的窗口
蓝色方块和两个绿色圆圈

我需要的是让它看起来像

左下角的蓝色方块

如果我知道告诉 Group 将其视口限制为 [-200..200] 中的 x 和 [-200..200] 中的 y 的方法调用,我就可以做到这一点。

一条评论建议设置剪辑。添加 agr.setClip(new Rectangle(-200,-200, 400,400));会导致它不绘制绿色圆圈,但渲染的窗口包含与第一个(不受欢迎的)屏幕截图相同的空间。因此剪辑不会影响 Group 如何决定其渲染窗口。

我应该使用什么技术来将此意图指定给 javafx 的布局引擎?

标签: javafx

解决方案


推荐阅读