3

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.

firstNamer
  • 33
  • 1
  • 3
  • depends on which component you are adding your GroupLayout JPanel cp. show the relative code please. the container of your JPanel need a layout manager too. – Heisenbug Jun 17 '11 at 09:49
  • Thats all my code. I forgot only last line: add(cp) – firstNamer Jun 17 '11 at 09:56
  • 1
    that's not all your code. I suppose you are inside a class extending JFrame, right? – Heisenbug Jun 17 '11 at 09:59
  • Sorry, I mean that code is in my init() function for my applet. – firstNamer Jun 17 '11 at 10:02
  • 1
    1) For better help sooner, post an [SSCCE](http://pscode.org/sscce.html). 2) Applets are inherently more tricky than frames. 3) The way to get a `GroupLayout` centered in an applet is exactly the same way you might do it in a frame. 4) Given (2) and that you don't understand (3), I suspect you have bitten off more than you can chew with this project. – Andrew Thompson Jun 17 '11 at 10:36
  • 1
    @firstNamer: if you post a short compilable program (an [SSCCE](http://sscce.org)) that demonstrates your problem, you'll likely get better help quicker. Why the need to use only GroupLayout though? Why not use a combination of easier to use layouts? – Hovercraft Full Of Eels Jun 17 '11 at 10:37

2 Answers2

2

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)
        );
    }
}
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
  • ..and yes - it *would* have been sooner if I had not had to add the imports & other cruft. – Andrew Thompson Jun 17 '11 at 10:59
  • 1
    Using a grid bag layout does not answer the question of how one can center with a group layout – Simon G. Oct 03 '11 at 14:08
  • @Simon If you read *all the way down to the 34th line* (yes I know it's an effort for the 'TV generation'), you might notice that the code uses 2 layouts, a `GridBagLayout` **and** a `GroupLayout`. – Andrew Thompson Oct 03 '11 at 14:35
0

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.

Simon G.
  • 6,587
  • 25
  • 30