4

全て、

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を縮小したいと思います。

代替テキスト 代替テキスト

(これは少し異なる問題だと思いますが、これは私が望んでいることを示しています。制約フィールドを保持するパネルは行数に基づいて大きくなっています。オプションの数に基づいてレイアウトを大きくする必要があります。コンボボックスの選択)

4

2 に答える 2

2

CardLayout をサブクラス化し、preferredLayoutSizeメソッドをオーバーライドして、現在のカードのみを考慮するようにすることができます。

フレームが拡大および縮小することを確認するにpackは、コンテンツのサイズを設定した後に呼び出す必要がある場合があります。それがすべての場合に機能するかどうかはわかりませんが(縮小しない場合があります)、試してみる価値はあります.

于 2010-11-09T14:36:23.027 に答える
1

フォームごとに JDialog を使用する必要があるようです。

または、わざわざ CardLayout を使用せず、各パネルを手動で削除/置換してから、ダイアログを pack() します。

于 2010-11-09T16:03:40.877 に答える