Label.setAlignment(Pos.CENTER_RIGHT)を設定しても、その後GridPaneに追加されるラベルの配置に影響しない理由について混乱していますか?それを行う唯一の方法は、一見、グリッド(ColumnConstraintsなど)を使用するか、またはラベルを右揃えのHBoxに追加します。
ラベルの配置をCENTER_RIGHTに設定しても効果がないのはなぜですか? 「Labeled内に空のスペースがある場合に、Labeled内のテキストとグラフィックをどのように配置するかを指定します」というAPIを見ることができます。しかし、どのようにしてラベルに空きスペースを入れるのですか?
TL:DRバージョン:label.setAlignment(Pos.CENTER_RIGHT);
の代わりにGridPane.setHalignment(label, HPos.RIGHT);
を使用します。
JavaFXはトップダウンレイアウトを使用します。そのため、シーンは、ルートノードをシーンのサイズに合わせ、ルートノードは、そのレイアウト戦略とシーンが与えたスペースの量に応じて、各子ノードのサイズと位置を調整し、各子ノードはその子ノードのサイズと位置を調整します独自のレイアウト戦略と、使用可能なスペースの量などに応じて、シーングラフの下方へと続きます。
Label
のドキュメントによると、alignmentProperty
ラベル内に空のスペースがある場合に、ラベル内のテキストとグラフィックをどのように配置するかを指定します。
もちろん、ラベルに使用できるスペースの量は、その親(この場合はグリッドペイン)によって決まります。もちろん、 documentation を読むことで、グリッドペインのレイアウト戦略とその構成方法を知ることができます。簡単に言えば、しかし:
デフォルトでは、グリッドペインは各ノードに適切なサイズを割り当て、配置されたセルに追加のスペースがある場合、グリッドセルの左上にノードを配置します。ラベルの推奨サイズは、もちろん計算されたサイズです。コンテンツを保持するのに十分な大きさです。したがって、単純にラベルをグリッドペインに配置してラベルの配置を設定しても効果はありません。ラベルはコンテンツを保持するのに十分な大きさであり、テキスト/グラフィックを配置するための余分なスペースがないためです。これを視覚化するには、ラベルに背景色または境界線を配置します。
したがって、ラベルの配置をCENTER_RIGHT
に設定してから、ラベルを拡大するようにグリッドペインに指示できます。これには2つのことが必要です。まず、グリッドペインにセルの幅をラベルで埋めるように指示します。
GridPane.setFillWidth(label, true);
また、グリッドペインは子ノードの最大サイズも考慮し、ラベルはデフォルトで優先サイズを最大サイズとして使用するため、ラベルを大きくすることができます。
label.setMaxWidth(Double.MAX_VALUE);
その後、ラベルはセルのサイズまで拡大します。
label.setAlignment(Pos.CENTER_RIGHT);
独自のコンテンツを右に揃えます。
より賢明なアプローチは、おそらくグリッドペインにセル内のラベルの配置方法を伝えることです。
GridPane.setHalignment(label, HPos.RIGHT);
次に、ラベルにデフォルトのサイズと配置を適用させ、すべてが機能するようにします。
ColumnConstraints
オブジェクトを使用して、特定の列のすべてのラベルにデフォルトの配置を設定することもできます。これは、フォームを作成する場合にはるかに便利な方法です。