ホームページ >Java >&#&チュートリアル >Swing の GroupLayout は、動的に生成されたフォームのコンポーネントのサイズ変更とサイズ制限を効果的に管理するにはどうすればよいですか?

Swing の GroupLayout は、動的に生成されたフォームのコンポーネントのサイズ変更とサイズ制限を効果的に管理するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-02 06:37:09691ブラウズ

How Can Swing's GroupLayout Effectively Manage Component Resizing and Size Limits in Dynamically Generated Forms?

Swing GroupLayout: コンポーネントのサイズ変更と制限の管理

Swing では、GroupLayout はコンポーネントのレイアウトを管理するための堅牢なメカニズムを提供します。ただし、動的コンテンツと応答性の高いレイアウトを扱う場合は、コンポーネントのサイズ変更と制限を制御する必要があります。

動的に生成されたいくつかのデータ入力フォームが、次のようなレイアウトで GroupLayout を使用するシナリオを考えてみましょう。

*-----------------------------------------------*
| label A     |   field A                       |
| label B     |   field B                       |
| label C     |   field C                       |
*-----------------------------------------------*

ラベル (JLabel インスタンス) の最大幅を親フレームの幅の特定の部分に制限するには、 ComponentListener:

public void componentResized(ComponentEvent e) {
    int maxW = parentFrame.getWidth() / 3;
    for (JLabel l : labels) {
        l.setMaximumSize( // have also tried setSize() and setPreferredSize()
            new Dimension(
                Math.min(l.getSize().width, maxW),
                l.getMaximumSize().height));
    }
    groupLayout.invalidateLayout(getContentSpace());
}

ただし、このアプローチでは望ましい結果が得られない可能性があります。

提案された解決策: GroupLayout の優先サイズを活用する

GroupLayout は、の推奨サイズに依存する、より洗練されたソリューションラベル:

public class GroupPanel extends JPanel {
    // ...
    // Create a GroupLayout and set group constraints
    GroupLayout layout = new GroupLayout(this);
    this.setLayout(layout);
    layout.setAutoCreateGaps(true);
    layout.setAutoCreateContainerGaps(true);
    layout.setHorizontalGroup(layout.createSequentialGroup()
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
            .addComponent(label1)
            .addComponent(label2)
            .addComponent(label3))
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addComponent(field1)
            .addComponent(field2)
            .addComponent(field3))
    );
    layout.setVerticalGroup(layout.createSequentialGroup()
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label1)
            .addComponent(field1))
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label2)
            .addComponent(field2))
        .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
            .addComponent(label3)
            .addComponent(field3))
    );
    // ...
}

このアプローチの利点:

  • ラベルに割り当てられたスペースは、最も幅の広いラベルにも対応します。
  • テキストフィールドは適切にサイズ変更可能です。
  • 動作はプラットフォーム間で一貫しており、フォント。
  • GroupLayout は、サイズ変更動作の多くを自動的に処理し、手動調整の必要性を最小限に抑えます。

優先サイズ メカニズムを利用することで、GroupLayout はコンポーネントを管理するためのシンプルかつ効果的な方法を提供します。動的に生成されたデータ入力フォームのサイズ変更と制限。

以上がSwing の GroupLayout は、動的に生成されたフォームのコンポーネントのサイズ変更とサイズ制限を効果的に管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。