2013-11-20 41 views
0

我不知道如何描述这个问题。 我想在背景中用矩形在单元格(gridpane)中间设置一个Textobject。不知道如何做到这一点或为这个问题寻找合适的词。希望有人能帮助我。 :-)如何在javafx的一个组中设置2个对象

那是我的代码现在:

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

它让我看到正确的画面和填充用矩形单元格和文本是在中心位置。

Button.getChildren().addAll(r,abt); 

的Textobject是在错误的位置即rectantangle的上方,不应该,但我需要这个。后来我想创建很多这样的分组对象。

调用toBack()和toFront()不会在这里工作过:-(

编辑:

这里我有问题的照片

http://s14.directupload.net/file/d/3449/blgrlw63_jpg.htm

在Z文本的顺序应该在前面,并且在这个网格中的矩形在后面。 使用此代码

abt.setLayoutX(27); 
abt.setLayoutY(27); 

可以设置文本的位置,但不是一个好的选项。

回答

0

您可以使用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工作在“后进先出”的方式。因此,您最后添加的孩子是第一个显示(或更好:窗格顶部的元素)。任何下一个孩子将被放置在第一个孩子的后面。

要解决您的问题,请创建一个堆叠面板,然后将矩形放入其中,然后放入文本。之后,将堆叠面板放置在网格面板上的所需位置。

+0

是的,我也想过用stackpane但我可能没有意识到这一点,但这个例子是可能的! thx ;-) – Arktor

0

您应该使用Hbox而不是Rectangle,因为没有将文本设置为Rectangle形状的属性。

gridFirst.setGridLinesVisible(true); 
    hboxFirst.setStyle("-fx-background-color:green"); 
    hboxFirst.setAlignment(Pos.CENTER); 
    hboxFirst.getChildren().add(new Text("hello")); 

enter image description here

enter image description here

+0

是的,这也是一个很好的解决方案,我会试验它:) – Arktor

相关问题