我有一个包含字符串
的列表的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'但我不确定如何将对象添加到场景中。
谢谢!