Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将动态大小的矩形添加到场景中_Java_Javafx - Fatal编程技术网

Java 将动态大小的矩形添加到场景中

Java 将动态大小的矩形添加到场景中,java,javafx,Java,Javafx,我有一个包含字符串的列表数组列表 我通过嵌套循环将这些字符串转换成文本对象。 我有它们的高度和宽度,只是当我尝试将它们放置在场景中时,我无法指定x,y值,因此它们显示在顶部。如何在不重叠的情况下将对象放置到场景中。理想情况下,第一个对象位于场景的中心,其他对象位于周围,但只是让它们出现在场景中,这将是一个开始 这是我到目前为止所拥有的。矩形是为了让我更清楚地看到物体周围有一个边框 TextFlow textFlow = new TextFlow(); Group group = new

我有一个包含字符串的列表数组列表

我通过嵌套循环将这些字符串转换成文本对象。 我有它们的高度和宽度,只是当我尝试将它们放置在场景中时,我无法指定x,y值,因此它们显示在顶部。如何在不重叠的情况下将对象放置到场景中。理想情况下,第一个对象位于场景的中心,其他对象位于周围,但只是让它们出现在场景中,这将是一个开始

这是我到目前为止所拥有的。矩形是为了让我更清楚地看到物体周围有一个边框

 TextFlow textFlow = new TextFlow();
    Group group = new Group(textFlow);

    Stage stage = new Stage();
    Scene scene = new Scene(group, 1200, 600, Color.WHITE);
    stage.setTitle("WordCloud");

    Integer size = 150;
    String family = "Arial";

    final Rectangle redBorder = new Rectangle(0, 0, Color.TRANSPARENT);
    redBorder.setStroke(Color.RED);
    redBorder.setManaged(false);

    Random rand = new Random(System.currentTimeMillis());

    //Loop through arrayList to get each individual list
    for (List e : list2) {
        //System.out.println(e);
        //this will decrease the font size for strings in each list
        size = (size - 30);
        //Random colour generator
        int red = rand.nextInt(255);
        int green = rand.nextInt(255);
        int blue = rand.nextInt(255);

        for (Object d : e) {
           System.out.println(d);

            Text text = new Text(x,y,(String) d);
            //gives it font and size depending on index of the list
            text.setFont(Font.font(family, size));
            //random colour generator being used
            text.setFill(Color.rgb(red, green, blue, .99));
            text.setTextAlignment(TextAlignment.JUSTIFY);
            textFlow.setPrefWidth(Region.USE_COMPUTED_SIZE);
            textFlow.setPrefHeight(Region.USE_COMPUTED_SIZE);
            textFlow.setLayoutX(scene.getWidth());
            textFlow.setLayoutY(scene.getHeight());
            text.boundsInParentProperty().addListener((observable, oldValue, newValue) -> {
                redBorder.setLayoutX(text.getBoundsInParent().getMinX());
                redBorder.setLayoutY(text.getBoundsInParent().getMinY());
                redBorder.setWidth(text.getBoundsInParent().getWidth());
                redBorder.setHeight(text.getBoundsInParent().getHeight());
            });


            group.getChildren().addAll(text, redBorder);

        }
    }
    stage.setScene(scene);
    stage.show();
}
我有更多没有添加的打包类代码,这给了我一个x,y值来打包到“bin”中,但我不确定如何将对象添加到场景中


谢谢

我试着运行你的代码来了解你在做什么以及问题出在哪里,但是你的代码不能像现在这样运行。有很多可用的布局,只需选择一个适合你需要的布局:对于更奇特的布局,你可能需要实现你自己的布局算法,但这不应该是一个太复杂的问题。但是,您没有提供所需布局的适当说明,以便我们推荐任何内容。@fabian我不确定使用哪种类型的窗格来获得所需的布局。我希望所有对象彼此相邻放置,框的边界相接触。我正在制作一个单词cloud,如果这能让你更多地了解我在追求什么?@SedrickJefferson啊,很抱歉,代码是从我的ide中获取的,其中一个列表的数组列表被传递到列表2中,我的错误。你试着使用了吗?我试着运行你的代码来了解你在做什么,以及问题是什么,但是您的代码不能像现在这样运行。有很多可用的布局,只需选择一个适合您需要的布局:对于更奇特的布局,您可能需要实现自己的布局算法,但这不应该是一个太复杂的问题。但是,您没有提供所需布局的适当说明,以便我们推荐任何内容。@fabian我不确定使用哪种类型的窗格来获得所需的布局。我希望所有对象彼此相邻放置,框的边界相接触。我正在制作一个单词cloud,如果这能让你更多地了解我在追求什么?@SedrickJefferson啊,对不起,代码是从我的ide中获取的,其中一个列表的数组列表被传递到列表2中,我的错误。你试过使用吗?