1

GroupLayout を使用して、Windows 7 (64 ビット) 上の Java 7 でフレームを構築しています。以下は、GroupLayout で Oracle の例を見て使用したレイアウトの構造です。

希望するレイアウト:

+------------------------------------------+

|  [Label1] [ComboBox1]                    |

|  [Label2] [TextField1] [Button1]         |

|  [Label3] [TextField2] [Button2]         |

|  [Label4] [ComboBox2]                    |

+------------------------------------------+

コードでの私のデザイン:

layout.setHorizontalGroup(layout.createSequentialGroup()

    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))
        .addComponent(Label1)
        .addComponent(Label2)
        .addComponent(Label3)
        .addComponent(Label4)
    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))
        .addComponent(ComboBox1)
        .addComponent(TextField1)
        .addComponent(TextField2)
        .addComponent(ComboBox2)                
    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING))
        .addComponent(Button1)
        .addComponent(Button2)

);

layout.linkSize(SwingConstants.HORIZONTAL, Button1, Button2);

layout.setVerticalGroup(layout.createSequentialGroup()

    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE))
            .addComponent(Label1)
            .addComponent(ComboBox1)
    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE))
            .addComponent(Label2)
            .addComponent(TextField1)
            .addComponent(Button1)
    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE))
            .addComponent(Label3)
            .addComponent(TextField2)
            .addComponent(Button2)
    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE))
            .addComponent(Label4)
            .addComponent(ComboBox2)
);

もっと経験豊富な人にチェックしてもらう必要があります。現在、このコードはサイズのアライメントの問題を引き起こしComboBox1, ComboBox2TextField2大幅に削減されています。

これを改善するためのあなたの提案は何ですか?

4

2 に答える 2

2

まず、私は個人的には避けたいと思いGroupLayoutますが、実際にはハンドコーディングを意図したものではありません。

代わりに GridBagLayout を使用します

setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
add(label1, gbc);
gbc.gridx++;
add(comboBox1, gbc);

gbc.gridx = 0;
gbc.gridy++;
add(label2, gbc);
gbc.gridx++;
add(textField1, gbc);
gbc.gridx++;
add(button1, gbc);

gbc.gridx = 0;
gbc.gridy++;
add(label3, gbc);
gbc.gridx++;
add(textField2, gbc);
gbc.gridx++;
add(button2, gbc);

gbc.gridx = 0;
gbc.gridy++;
add(label4, gbc);
gbc.gridx++;
add(comboBox2, gbc);
于 2012-08-29T11:17:48.860 に答える
2

これらのタイプのレイアウトでは、ほとんどの場合FormLayout、 JGoodiesを選択します。もちろん、これは標準のJDKには含まれていないため、これがオプションかどうかはわかりません.

そのレイアウトの主な利点 (imo) の 1 つは、適切で制御可能なサイズ変更動作を使用して、コンポーネントを列に簡単に配置できることです。

于 2012-08-29T12:15:36.520 に答える