向场景添加动态大小的矩形

时间:2017-09-06 11:14:06

标签: java javafx

我有一个包含字符串

的列表的arraylist

我已经通过嵌套循环将这些字符串转换为文本对象。 当我尝试将它们放在场景上时,我有它们的高度和宽度我无法指定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'但我不确定如何将对象添加到场景中。

谢谢!

0 个答案:

没有答案