2016-02-16 11 views
5

Label.setAlignment(Pos.CENTER_RIGHT)を設定しても、GridPaneに追加されるラベルのアラインメントに影響しないのは混乱しますか?それを行う唯一の方法は、見かけ上グリッド(例えば、ColumnConstraints)を介してか、例えば、右揃えのHBoxにラベルを追加します。GridFaneでのLabelのJavaFXアライメント

ラベルの配置をCENTER_RIGHTに設定しても効果がないのはなぜですか?私は、APIが次のように言っていることがわかります: "Labeled内に空白がある場合に、Labeled内のテキストとグラフィックの整列方法を指定します。"しかし、ラベルの空きスペースを取得するにはどうすればよいですか?

答えて

13

TL:DRバージョンlabel.setAlignment(Pos.CENTER_RIGHT);の代わりにGridPane.setHalignment(label, HPos.RIGHT);を使用してください。

JavaFXはトップダウンレイアウトを使用します。したがって、シーンはルートノードをシーンのサイズに合わせてサイズを決定し、ルートノードはレイアウト戦略とシーンが与えたスペースの量に応じて子ノードのサイズと位置を決定し、各子ノードは子ノードのサイズと位置を決めますそれ自身のレイアウト戦略と使用可能なスペースの量に応じて、シーングラフの下に表示されます。

Labelのドキュメントによると、alignmentProperty

は、標識内の空きスペースがある場合には、標識内のテキストとグラフィックが整列する方法を指定します。

もちろん、ラベルに使用可能なスペースの量は、その親(この場合はグリッドペイン)によって決まります。もちろん、グリッドペインのレイアウト戦略とその設定方法については、documentationを参照してください。デフォルトでは、グリッドペインは各ノードに優先サイズを割り当て、配置されているセルに余分なスペースがある場合はグリッドセルの左上にノードを揃えます。ラベルの好ましいサイズはもちろん、計算されたサイズです。内容を保持するのに十分なサイズです。したがって、単にラベルをグリッドペインに配置し、ラベルの配置を設定しても内容は保持され、テキスト/グラフィックを整列する余分なスペースはないため、効果はありません。ラベルに背景色や境界線を配置して、これを視覚化することができます。

ラベルのアラインメントをCENTER_RIGHTに設定してから、グリッドペインにラベルの拡大を指示することができます。グリッドペインは、デフォルトの使用によって、子ノードの最大サイズ、およびラベルを尊重しているので、

GridPane.setFillWidth(label, true); 

と:まず、ラベルは、セルの幅を埋めるようにするグリッドペインを教えて:これは2つのことが必要ですその最大サイズとしての推奨サイズは、ラベルが成長することができます:

label.setMaxWidth(Double.MAX_VALUE); 

次にラベルは、セルの大きさに成長し、そしてあなたも

label.setAlignment(Pos.CENTER_RIGHT); 

を持っている場合、それはその位置を合わせます自身の共同右に。

より賢明なアプローチは、単にセルにラベルを配置する方法をグリッドペインを伝えるために、おそらくです:

GridPane.setHalignment(label, HPos.RIGHT); 

その後、ラベルはデフォルトのサイズとアライメントをとりましょうと、すべてが動作します。

ColumnConstraintsオブジェクトを使用して、特定の列のすべてのラベルのデフォルトの配置を設定することもできます。これは、フォームを作成する場合にははるかに便利なアプローチです。

+0

ありがとう、それは素晴らしい応答です。 – Tranquility

+0

注記 - 私はラベルの優先幅をより大きな値に設定するか、または指定した最大幅を設定して、配置を右に設定することで、正しく整列させることができます。つまり、setFillWidthの呼び出しは必要ありませんか?なぜこれが当てはまるのか、実際にsetFillWidthを使用する必要があるのか​​をさらに説明できますか? – Tranquility

+0

'setFillWidth(true)'は、グリッド・ペインがノードの最大幅または列の幅の最大値をとることを意味します。 'setFillWidth'がfalse(デフォルト)の場合、ノードの幅を優先幅に設定します。ただし、列の幅はすべての内容の最大幅で決まります。そのため、ノードの幅を広げることで、列の幅を必要以上に大きくすることができます。 –

関連する問題