2013-11-20 63 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

相關問題