2017-09-01 54 views
1

我需要一些幫助獲取組件在我的場景圖上縮放。在下面的圖片中,頂部有組件,間隔很好,一切看起來很不錯,很正常。與窗口大小成比例的Java組件(JavaFX)

enter image description here

我這樣做,通過設置與

menu.setPadding在頂部菜單上的襯墊(新插圖(30,0,30,30));

and HBox.setMargin(button,new Insets(0,0,0,370));爲按鈕,其中370是字段和按鈕之間的填充。此外,文本字段的首選寬度爲400.

但是,當我展開窗口時,我意識到爲文本字段設置的首選寬度不會改變,並且它很小,並且按鈕的邊距也會更改,所以我不知道如何設置這個數字與窗口的大小成正比。我不知道我是否用CSS或簡單的java方法解決這個問題。

enter image description here

這是與其中組分最大化窗口時遇到問題頂部交易的代碼。 'pane'是BorderPane的一個實例。

private void setTopMenu() { 

menu = new HBox(); 
menu.setPadding(new Insets(30, 0, 30, 30)); 

button = new Button("ABCD ABCD ABCD"); 

tf = new TextField(); 
tf.setPromptText("search"); 
tf.setPrefWidth(400); 
tf.setId("text-field"); 

top.getChildren().addAll(tf, button); 

HBox.setMargin(button, new Insets(0,0,0,370)); 

pane.setTop(menu); 
} 
+0

如果你只是需要調整'TopMenu'內部的組件的大小,你不能''將窗口的寬度綁定到'Button'和'TextArea'寬度的寬度嗎? –

+0

但如何? @MarcoLuzzara – c2J

回答

1

你有2種方式:

  • 第一種是最簡單的,但也不太靈活:

    HBox.setHgrow(button, Priority.ALWAYS); 
    HBox.setHgrow(tf, Priority.ALWAYS); 
    

    指定Priority你可以決定怎麼之間的額外空間組件和HBox將被填充。

  • 使用Property結合:

    button.prefWidthProperty().bind(menu.widthProperty().divide(3)); 
    

    在這個例子中你button將被調整到menuWidthProperty每次最後這個屬性改變的1/3。 Here更好地解釋。

+1

另請注意,使用'GridPane'(只有一行),您可以將列的寬度指定爲百分比;所以你可以得到與沒有綁定的第二個選項相同的結果。 –

+0

是的,他可以使用'ColumnConstraint'和'setPercentWidth'方法。你是正確的讓我們注意到它。 –

+0

感謝@MarcoLuzzara爲我介紹綁定,我留下深刻的印象,我之前不知道它。我幾乎得到了我想要的結果。而不是綁定到菜單(如在你的答案),我設法綁定到場景的寬度。但是,邊距仍然會改變,有沒有辦法將按鈕的邊距與場景寬度綁定?我做了一個快速搜索,找到了填充的綁定,但這對我來說並不適用。再次感謝 – c2J

相關問題