9

強化されたマルチメディア、Web ビューアー、および視覚効果を使用できる可能性があるため、プロジェクトで Swing の代わりに JavaFX を使用しています。ただし、Web ( http://docs.oracle.com/javafx/2/layout/jfxpub-layout.htmなど) で見つけたものから学んだことは、 JavaFXレイアウト マネージャーはサイズのスケーリングに重点を置いているということです。 content のサイズに基づく親ですが、 Swing、少なくとも使用されているに基づいて、parent に従ってコンテンツをスケーリングすることに重点を置いてLayoutいます。

現在、私は何人AccordionかのTitledPane子供たちと一緒に使用しています。そのうちの 1 つにはGridPane、単純な理由で、エミュレートするための最善の方法が含まれていますGridLayout(以前の質問から学んだように、JavaFX レイアウトは GridLayout に相当します)。TitledPaneのコンテンツを 2 行と 1 列に分割し、各行の高さを で使用可能なスペースの 50% (またはTitledPaneでスケーリング) にしたいと考えています。このために、with 2 s usingと 1 withを追加しました。ただし、コンテンツがグリッドで適切にスケーリングされていることに気付きましたが、グリッドが使用可能なすべてのスペースを占有していませんStageSceneGridLayout(2,1)BorderLayout.CENTERGridPaneRowConstraintsetPercentHeight(50)ColumnConstraintsetPercentWidth(100)TitledPane(どうやら a の中心のように振る舞わないためBorderPane)。また、コンテンツを親に合わせてスケーリングしようとしましsetMaxWidthたが、どちらもうまくいかないようです (ここで述べたように: JavaFX: How to make my custom component use all available space fromparent layout? )。たとえそれができたとしても、UI 要素ツリーのすべての子孫に最大幅を設定して、それらすべてを拡大縮小する必要がありますか?

TitledPaneいずれにせよ、タイトル付きペインのサイズに合わせて拡大縮小する 2 つの等しいスペースを互いの下に配置する方法を知っている人はいますか?

列幅が使用可能なすべてのスペースを占めていない

4

1 に答える 1

10

実際、グリッドペインは成長してその親をすべて埋めています。以下のコードを検討してください。デバッグ目的でグリッドペインに背景色 (赤) を追加しました。

Accordion accordion = new Accordion();
TitledPane titledPane = new TitledPane();
titledPane.setText("Title");
GridPane gridPane = new GridPane();
gridPane.setStyle("-fx-background-color:red");

gridPane.add(new TextArea("Hello"), 0, 0);
gridPane.add(new TextArea("World"), 0, 1);

titledPane.setContent(gridPane);
accordion.getPanes().add(titledPane);

このコードを実行すると、グリッドペインはその親をすべて塗りつぶします (タイトルペインのコンテンツ全体に赤い色が広がっていることを確認してください)。

ただし、グリッドペインのコンテンツがすべての列を埋めるわけではありません。ウィンドウのサイズを変更しようとすると、グリッドペインに合わせてテキストエリアの幅が変化していないことがわかります。これを修正するには、グリッドペインの最初の列がグリッドペイン自体とともに成長するように指示する必要があります。その方法は、次の制約を追加することです。

ColumnConstraints columnConstraints = new ColumnConstraints();
columnConstraints.setFillWidth(true);
columnConstraints.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().add(columnConstraints);
于 2013-10-04T07:24:22.993 に答える