2017-01-02 90 views
1

我有一個HBox和兩個(或更多)按鈕。我希望所有按鈕的寬度相同。我無法以像素爲單位設置按鈕的寬度,因爲文本是從每種語言的資源包中獲取的(因此文本的長度是可變的)。這是我試過的代碼,但沒有成功:JavaFX:HBox中具有相同寬度的按鈕

Button but1=new Button("Long text"); 
Button but2=new Button ("Text"); 
HBox.setHgrow(but1, Priority.ALWAYS); 
HBox.setHgrow(but2, Priority.ALWAYS); 
HBox hbox=new HBox(); 
hbox.getChildren().addAll(but1,but2); 
Scene scene=new Scene(hbox, 1000, 600); 
stage.setScene(scene); 
stage.show(); 

什麼是我的錯?

+0

@IchichiUchiha如果我們說「相同的寬度」,那麼它應該至少有兩個按鈕。 –

回答

2

設置按鈕最大寬度最大值:

but1.setMaxWidth(Double.MAX_VALUE); 

但它只會重新調整按鈕,以填補橫向盒的寬度。如果你需要寬度相同的按鈕,你應該找到最長的按鈕,然後將其寬度設置爲其他按鈕。

but1.setPrefWidth(width); 
+1

但是「找到最長的按鈕」並不是特別容易......您需要確保佈局合格等。如果「HBox」的寬度發生變化,最長按鈕的寬度可能會改變。 –

+0

我同意在這種情況下定義按鈕寬度並不容易。我沒有測試過它。也許你應該創建自定義的HBox來控制佈局childeren,但這是很多工作,而不是當前問題的範圍。 – MBec

3

您需要將按鈕的maxWidth設置爲Double.MAX_VALUE並設置HBox.setHgrow()Priority.ALWAYS使按鈕填寫HBox中的可用寬度。

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.Priority; 
import javafx.stage.Stage; 

public class Test extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Button but1 = new Button("Long text"); 
     Button but2 = new Button ("Text"); 
     HBox hbox=new HBox(); 
     hbox.getChildren().addAll(but1,but2); 

     but1.setMaxWidth(Double.MAX_VALUE); 
     but2.setMaxWidth(Double.MAX_VALUE); 
     HBox.setHgrow(but1, Priority.ALWAYS); 
     HBox.setHgrow(but2, Priority.ALWAYS); 

     Scene scene=new Scene(hbox, 1000, 600); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     Application.launch(); 
    } 
} 
相關問題