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
オブジェクトを使用して、特定の列のすべてのラベルのデフォルトの配置を設定することもできます。これは、フォームを作成する場合にははるかに便利なアプローチです。
ありがとう、それは素晴らしい応答です。 – Tranquility
注記 - 私はラベルの優先幅をより大きな値に設定するか、または指定した最大幅を設定して、配置を右に設定することで、正しく整列させることができます。つまり、setFillWidthの呼び出しは必要ありませんか?なぜこれが当てはまるのか、実際にsetFillWidthを使用する必要があるのかをさらに説明できますか? – Tranquility
'setFillWidth(true)'は、グリッド・ペインがノードの最大幅または列の幅の最大値をとることを意味します。 'setFillWidth'がfalse(デフォルト)の場合、ノードの幅を優先幅に設定します。ただし、列の幅はすべての内容の最大幅で決まります。そのため、ノードの幅を広げることで、列の幅を必要以上に大きくすることができます。 –