全て、
Javaで作成しているフォームタイプのビューがあります。コンボボックスの内容に基づいて、フォームのいくつかの側面を切り替える必要があります。私はこれを行うためにカードレイアウトを使用しています、そしてそれはうまくいきます。
問題は、カードレイアウトが、追加されたコンポーネントのすべての優先サイズの最大値を使用して、独自の優先サイズを決定することです。これは、フィールドの数が少ないオプションを選択した場合、スイッチャーコンポーネントのカードレイアウトのサイズが適切であるため、空白が存在することを意味します。
選択が変更されるたびにカードレイアウトパネルの推奨サイズを手動で変更しようとしましたが、これは効果がありません。パネルは常にすべてのコンポーネントに適合する最大値です。
combo.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Dimension preferredSize = null;
switch (combo.getSelectedIndex()) {
case 0:
preferredSize = panel0.getPreferredSize();
break;
case 1:
preferredSize = panel1.getPreferredSize();
break;
case 2:
preferredSize = panel2.getPreferredSize();
break;
default:
assert false;
}
patternOptions.setPreferredSize(preferredSize);
c.show(patternOptions, TYPE[combo.getSelectedIndex()]);
}
});
一言で言えば、iTunesスマートリストUIのように、より多くのスペースを必要とするオプションが選択されたときにUIを動的に拡大し、より少ないスペースを必要とするときにUIを縮小したいと思います。
(これは少し異なる問題だと思いますが、これは私が望んでいることを示しています。制約フィールドを保持するパネルは行数に基づいて大きくなっています。オプションの数に基づいてレイアウトを大きくする必要があります。コンボボックスの選択)