Question

I would like to center content of a GroupLayout in Java applet. After long research I still cannot figure out how to do it.

Code below shows my applet. All elements are centered to layout but the layout is not center to applet.

JPanel cp=new JPanel();

String[] s = new String[2];
s[0] = "Price";
s[1] = "Name";

JComboBox c = new JComboBox(s);

JProgressBar pb=new JProgressBar(17, 23);
pb.setValue(20);
pb.setStringPainted(true);

JLabel l=new JLabel("Name of product");

JButton b=new JButton("Send a message");
b.setEnabled(true);

cp.add(c);
cp.add(pb);
cp.add(l);
cp.add(b);

GroupLayout layout = new GroupLayout(cp);
cp.setLayout(layout);

layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);

layout.setHorizontalGroup(
   layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
           .addComponent(c,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE)
           .addComponent(pb,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE)
           .addComponent(l,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE)
           .addComponent(b,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE))
);
layout.setVerticalGroup(
   layout.createSequentialGroup()
      .addComponent(c,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE)
      .addComponent(pb,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE)
      .addComponent(l,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE)
      .addComponent(b,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE,
                        GroupLayout.PREFERRED_SIZE)
);

I will appriciate any help.

Was it helpful?

Solution

The important lines are:

        Container cont = getContentPane();
        cont.setLayout(new GridBagLayout());
        add(cp);

Screenshot

Applet GUI

SSCCE

The 'full' 79 line code is:

//<applet code='TestApplet' width='250' height='250'></applet>
import java.awt.*;
import javax.swing.*;

public class TestApplet extends JApplet {

    public void init() {
        JPanel cp=new JPanel();

        Container cont = getContentPane();
        cont.setLayout(new GridBagLayout());
        add(cp);

        String[] s = new String[2];
        s[0] = "Price";
        s[1] = "Name";

        JComboBox c = new JComboBox(s);

        JProgressBar pb=new JProgressBar(17, 23);
        pb.setValue(20);
        pb.setStringPainted(true);

        JLabel l=new JLabel("Name of product");

        JButton b=new JButton("Send a message");
        b.setEnabled(true);

        cp.add(c);
        cp.add(pb);
        cp.add(l);
        cp.add(b);

        GroupLayout layout = new GroupLayout(cp);
        cp.setLayout(layout);

        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(
           layout.createSequentialGroup()
              .addGroup(layout.createParallelGroup(
                  GroupLayout.Alignment.CENTER)
                   .addComponent(c,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE)
                   .addComponent(pb,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE)
                   .addComponent(l,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE)
                   .addComponent(b,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE))
        );
        layout.setVerticalGroup(
           layout.createSequentialGroup()
              .addComponent(c,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE)
              .addComponent(pb,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE)
              .addComponent(l,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE)
              .addComponent(b,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE,
                                GroupLayout.PREFERRED_SIZE)
        );
    }
}

OTHER TIPS

You can create vertical and horizontal Glue elements from the Box factory and add these to the sides of your layout. When the layout is set out, the glue expands and forces the rest of the layout into the center.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top