0

2つのコンポーネントを縦に並べたレイアウトを作成したいと思います。最初のコンポーネントは、Panelを拡張して画像を表示する、私自身のクラスImagePanelのインスタンスであり、画像全体を表示するために必要な正確なスペースを占めるようにします。残りのスペースは、他のコンポーネント(この場合はGridLayoutを備えた別のパネル)で埋める必要があります。写真をご覧ください。

希望のレイアウト

Androidではweightプロパティを使用してこれを行うことができますが、Javaでそのようなものを見つけることができず、Javaの標準のレイアウトマネージャーのいずれもこれに適しているとは思えません。

ImagePanelをBorderLayout.NORTHに配置し、他のパネルをBorderLayout.CERNTERに配置しようとしましたが、2番目のパネルが画像と重なっていたため、機能しませんでした。

私もGridLayoutの使用について考えていますが、グリッドは画像のサイズを気にしないので、それもうまくいくとは思いません。

どんな助けでも大歓迎です。

4

3 に答える 3

2

getPreferredSize()画像パネルが正しいサイズ(つまり、表示される画像のサイズ)を返す場合、BorderLayoutは機能するはずです。

カスタムImagePanelの代わりに、ImageIconを含み、テキストを含まない単純なJLabelを使用すると、それが可能になります。

于 2012-11-02T08:07:34.123 に答える
1

Javaで最も強力なレイアウトはGridBagLayoutです。これには、weightxおよびweightyプロパティ、アンカー、塗りつぶしなどがあります。

デフォルトでは、GridBagLayoutを使用すると、各コンポーネントに完全に表示するために必要なすべてのスペースがあります。2番目のパネルを拡張する場合は、画像でweighty = 0.0、他のパネルでweighty=1.0で十分です。

于 2012-11-01T22:07:08.807 に答える
0

javax.swing.Boxまさにあなたが望むものでなければなりません。ボックスには縦型と横型の2種類があり、縦型が必要です。

Box box = Box.createVericalBox();
box.add(comp1);
box.add(Box.createVerticalStrut(5)); // add some empty space
  .
  .
  .
add(box);

Box片側だけを強制的に等しくします。垂直の場合、それは幅であり、長さは任意のサイズにすることができます。

于 2012-11-03T23:52:02.847 に答える