3

I am having problems in setting the GroupLayout as desired in Java.

My code is given below. The desired placement for components is:

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

Instead of the above, the output is:

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

Please suggest some remedy. Thanks.

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);
        }
    });
}
}
tenorsax
  • 21,123
  • 9
  • 60
  • 107

1 Answers1

3

Looks like there is a bit of confusion with brackets when you set up horizontal and vertical groups. The controls fall out of the intended groups that you create.

Instead of

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

It should actually be:

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

In first case you're adding labels to the sequential group instead of the parallel group like in the second case.

Here is the result with the following slightly modified code:

enter image description here

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))
);
tenorsax
  • 21,123
  • 9
  • 60
  • 107