Object 如何在javafx中在一个组中设置2个对象

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

我不知道如何描述这个问题。 我想在一个单元格的中间设置一个文本框(GRIDANE),它的背景是矩形。不知道怎么做,也不知道如何为这个问题找到合适的词。希望有人能帮助我。:-)

这就是我现在的代码:

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"));