Object 如何在javafx中在一个组中设置2个对象
我不知道如何描述这个问题。 我想在一个单元格的中间设置一个文本框(GRIDANE),它的背景是矩形。不知道怎么做,也不知道如何为这个问题找到合适的词。希望有人能帮助我。:-) 这就是我现在的代码:Object 如何在javafx中在一个组中设置2个对象,object,javafx,position,z-order,Object,Javafx,Position,Z Order,我不知道如何描述这个问题。 我想在一个单元格的中间设置一个文本框(GRIDANE),它的背景是矩形。不知道怎么做,也不知道如何为这个问题找到合适的词。希望有人能帮助我。:-) 这就是我现在的代码: void AbtButton(String Abteil) { Rectangle r = new Rectangle(); r.setWidth(80); r.setHeight(40); r.setArcWidth(20); r.setArcHeight
void AbtButton(String Abteil) {
Rectangle r = new Rectangle();
r.setWidth(80);
r.setHeight(40);
r.setArcWidth(20);
r.setArcHeight(20);
r.setFill(Color.AQUAMARINE);
r.setStroke(Color.BLACK);
r.setStrokeWidth(2);;
r.toBack();
Text abt = new Text(Abteil);
abt.setId(Abteil);
abt.setFont(Font.font ("Verdana", FontWeight.BOLD, 20));
abt.setTextAlignment(TextAlignment.CENTER);
abt.toFront();
Button.getChildren().addAll(r,abt);
}
如果我
gridpane.add(r, 1, 1);
gridpane.add(abt, 1, 1);
它向我显示正确的图片,并用矩形填充单元格,文本位于中心位置
与
Textobject位于错误的位置,即矩形上方,不应该是这样,但我需要这个。稍后我想创建很多这样的分组对象
toBack()和toFront()在这里也不起作用:-(
编辑:
这里我有一个问题的图片
在此网格窗格中,文本的z顺序应在前面,矩形应在后面。
使用此代码
abt.setLayoutX(27);
abt.setLayoutY(27);
可以设置文本的位置,但这不是一个好选项。您可以使用
StackPane
类来解决问题。查看以下代码:
GridPane g1 = new GridPane();
StackPane sp = new StackPane();
Rectangle r = new Rectangle(100, 100);
r.setFill(Color.AQUA);
Text t = new Text("StackOverFlow");
sp.getChildren().addAll(r,t);
g1.add(sp, 0, 0);
Scene sc = new Scene(g1,200,200);
primaryStage.setScene(sc);
primaryStage.show();
stackpane以“后进先出”的方式工作。因此,您最后添加的子项是第一个显示的(或者更好:窗格顶部的元素)。以下任何子项都将放置在第一个子项后面
要解决您的问题,请创建一个stackpane,然后将矩形放入其中,然后将文本放入其中。然后,将stackpane放入gridpane上所需的位置。您应该使用Hbox而不是矩形,因为没有将文本设置为矩形的属性
gridFirst.setGridLinesVisible(true);
hboxFirst.setStyle("-fx-background-color:green");
hboxFirst.setAlignment(Pos.CENTER);
hboxFirst.getChildren().add(new Text("hello"));
是的,我也想过使用stackpane,但我没有意识到,但通过这个示例,这是可能的!thx;-)是的,这也是一个很好的解决方案,我将尝试:)
gridFirst.setGridLinesVisible(true);
hboxFirst.setStyle("-fx-background-color:green");
hboxFirst.setAlignment(Pos.CENTER);
hboxFirst.getChildren().add(new Text("hello"));