2017-01-02 6 views
1

HBoxと2つ(またはそれ以上)のボタンがあります。そして、私はすべてのボタンが同じ幅になるようにします。私はボタンの幅をピクセル単位で設定することはできません。なぜなら、テキストはすべての言語のリソースバンドルから取り出されるからです(テキストの長さは可変です)。これは私が試したコードですが、成功しませんでした: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

@ItachiUchiha「同じ幅」と言うと、少なくとも2つのボタンがあると考えられます。 –

答えて

2

最大値に設定ボタン最大幅:

but1.setMaxWidth(Double.MAX_VALUE); 

しかし、それは唯一のhboxの幅を埋めるために、ボタンのサイズを変更します。同じ幅のボタンが必要な場合は、最も長いボタンを見つけて、その幅を他のボタンに設定する必要があります。

but1.setPrefWidth(width); 
+1

しかし、 "最も長いボタンを見つける"というのは特に簡単ではありません。レイアウトパスが作られたことを確認する必要があります。また、HBoxの幅が変わると、最も長いボタンの幅が変わることがあります。 –

+0

この状況では、ボタンの幅を定義するのは簡単ではないと私は同意します。私はそれをテストしていない。おそらく、レイアウトのコントロールを持つカスタムHBoxを作成する必要がありますが、これは多くの作業であり、現在の質問の範囲ではありません。 – MBec

3

あなたはDouble.MAX_VALUEにボタンのmaxWidthを設定する必要があり、また、ボタンはHBoxので利用可能な幅を埋める作るためにPriority.ALWAYSHBox.setHgrow()を設定します。

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(); 
    } 
} 
関連する問題