2017-01-09 21 views
2

ボタンの幅はいつでもその内容(textProperty)に自動的にリサイズできますが、もっと必要なものがあります。JavaFX:テキストと同じ幅とサイズのボタン

私はボタンのグループを持っています。それぞれに独自のテキストがあります。私はすべてのボタンが同じ幅を持つようにする必要がありますが、同時に同じ幅を可能な限り小さくしたい(ボタンに余分なスペースや省略記号がないようにします)。

getWidth()getlayoutBounds.getWidth()およびgetlayoutBoundsInParent().getWidth()は、計算された幅を返さないことを理解するまでは簡単だと思いました。

当初、私が直接、すべてのプロパティ(widthProperty()などにprefWidthProprety())に結合されたが、最終的に私が調査するために戻って手動モードに落ちた:

Button buttonA; // With original text "hello world" 

buttonA.setText("Testing new String. This is very long so the width will be very big."); 
buttonA.layout(); 
buttonA.requestLayout(); 

Platform.runLater(() -> 
{ 
    System.out.println(buttonA.getWidth()); // Gives me old value 
    System.out.println(buttonA.getlayoutBounds.getWidth()); // Gives me old value 
    System.out.println(buttonA.getlayoutBoundsInParent().getWidth()); // Gives me old value 
}); 

だから今、私はどのようなオプションがありますか?あなたに答えるために

+0

すべてのボタンをVBOXに配置しようとしましたか? VBOXの幅をUSE_COMPUTED_SIZEに設定し、ボタンの幅のプロパティをvboxの幅のプロパティにバインドしてください – Zoltanik

+2

*もう誰もドキュメントを読むことはありませんか?標準のOracle [レイアウト・チュートリアル](http://docs.oracle.com/javase/8/javafx/layout-tutorial/size_align.htm#JFXLY133)には、例としてこれがあります。それは言う:* "各ボタンの高さと幅を決定し、各ボタンの好ましいサイズをセットのボタンの最大の高さと幅に設定するという手間を経ることができます。 (*または*、@ Zoltanik、バインディングを使用して)サイズを計算せずにこの問題を解決する方法を示します。 –

答えて

1

は、レイアウト機能に関する質問:

あなたが好きButtonの親にレイアウトを要求することができます。私はapplyCssを追加し、requestLayoutを削除した

buttonA.setText("Testing new String. This is very long so the width will be very big."); 
buttonA.getParent().layout(); 
buttonA.getParent().applyCss(); 

必要に応じて、このノードとその子ノードにスタイルを適用します。この メソッドは、通常は直接呼び出す必要はありませんが、 をParent.layout()と共に使用して、次の パルスの前にノードのサイズを設定するか、シーンがステージにない場合に使用できます。

+0

さて、それは働いています... 'applyCss()'は重要な部分ではなく、仕事をする親の 'layout()'を呼び出しています。 – Jai

+0

装飾されていない 'Button'sの場合は正しいですが、いくつかのCSSを設定すると、それは「重要」になります:) – DVarga

+0

これは最初の場所でボタンの幅を同じにする方法ではありません。 'VBox'(またはあなたが使っているレイアウトペイン)があなたのために働くようにしてください。 –

関連する問題