3

Java で GroupLayout を必要に応じて設定する際に問題が発生しています。

私のコードを以下に示します。コンポーネントの望ましい配置は次のとおりです。

++++++++++++++++++++++++++++++++++++++++++++++++++++
+LABEL_A       caseStudyComboBox           LABEL_B +
+LABEL_C       TextfieldE                  BtnD    +
++++++++++++++++++++++++++++++++++++++++++++++++++++

上記の代わりに、出力は次のようになります。

 +++++++++++++++++++++++++++++++++++++++++++++++++++
 +LABEL_A                                          +
 +                caseStudyCombBox                 +
 +                                  LABEL_B        +
 +       LABEL_C IS LONGER THAN A:                 +
 +                                TextfieldE       +
 +                                           BtnD  +
 +++++++++++++++++++++++++++++++++++++++++++++++++++

何か対策案をください。ありがとう。

import java.awt.Component;
import java.awt.Dimension;

import javax.swing.*;
import static javax.swing.GroupLayout.Alignment.*;

public class EXP1 extends JFrame {
String [] caseStudyList = {
        "",
        "Case A",
        "Case B"
};
//
public EXP1() {
    JLabel Label_A = new JLabel("LABEL A ");
    JComboBox caseStudyComboBox = new JComboBox(caseStudyList);
    JLabel Label_B = new JLabel("LABEL B");
    JLabel Label_C = new JLabel("LABEL C IS LONGER THAN A: ");
    JButton BtnD = new JButton("BUTTON D");
    JTextField TextFieldE = new JTextField();

    GroupLayout layout = new GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setAutoCreateGaps(true);
    layout.setAutoCreateContainerGaps(true);

    layout.setHorizontalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(TRAILING))
                .addComponent(Label_A, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(Label_C, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(LEADING))
                .addComponent(caseStudyComboBox, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(TextFieldE, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(LEADING))
                .addComponent(Label_B, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(BtnD, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    );

    layout.linkSize(SwingConstants.HORIZONTAL, Label_B, BtnD);

    layout.setVerticalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(BASELINE))
                .addComponent(Label_A)
                .addComponent(caseStudyComboBox)
                .addComponent(Label_B)
            .addGroup(layout.createParallelGroup(LEADING))
                .addComponent(Label_C)
                .addComponent(TextFieldE)
                .addComponent(BtnD)
    );

    setTitle("EXPERIMENT");
    this.pack();
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
    // TODO Auto-generated method stub
    //BPAOntoEIAUI mainUI = new BPAOntoEIAUI();
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                UIManager.setLookAndFeel(
                              "javax.swing.plaf.metal.MetalLookAndFeel");
                            //  "com.sun.java.swing.plaf.motif.MotifLookAndFeel");
                            //UIManager.getCrossPlatformLookAndFeelClassName());
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            new EXP1().setVisible(true);
        }
    });
}
}
4

1 に答える 1

3

水平グループと垂直グループを設定するときに、ブラケットに少し混乱があるようです。コントロールは、作成した意図したグループから外れます。

それ以外の

layout.setHorizontalGroup(layout.createSequentialGroup()
 .addGroup(layout.createParallelGroup())
 .addComponent(Label_A)
 .addComponent(Label_C)

実際には次のようになります。

layout.setHorizontalGroup(layout.createSequentialGroup()
 .addGroup(layout.createParallelGroup()
 .addComponent(Label_A)
 .addComponent(Label_C))

最初のケースでは、2 番目のケースのように、並列グループではなく順次グループにラベルを追加しています。

次のわずかに変更されたコードの結果を次に示します。

ここに画像の説明を入力

layout.setHorizontalGroup(layout.createSequentialGroup()
        .addGroup(layout.createParallelGroup(TRAILING)
            .addComponent(Label_A, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(Label_C, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        .addGroup(layout.createParallelGroup(LEADING)
            .addComponent(caseStudyComboBox, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(TextFieldE, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        .addGroup(layout.createParallelGroup(LEADING)
            .addComponent(Label_B, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(BtnD, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

layout.linkSize(SwingConstants.HORIZONTAL, Label_B, BtnD);

layout.setVerticalGroup(layout.createSequentialGroup()
        .addGroup(layout.createParallelGroup(BASELINE)
            .addComponent(Label_A)
            .addComponent(caseStudyComboBox)
            .addComponent(Label_B))
        .addGroup(layout.createParallelGroup(LEADING)
            .addComponent(Label_C)
            .addComponent(TextFieldE)
            .addComponent(BtnD))
);
于 2012-10-23T01:28:50.443 に答える