3

我想在 Java 小程序中将 GroupLayout 的内容居中。经过长时间的研究,我仍然无法弄清楚如何去做。

下面的代码显示了我的小程序。所有元素都以布局为中心,但布局不是以小程序为中心。

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)
);

我会给予任何帮助。

4

2 回答 2

2

重要的几行是:

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

截屏

小程序图形用户界面

SSCCE

“完整”的 79 行代码是:

//<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)
        );
    }
}
于 2011-06-17T10:51:44.160 回答
0

您可以从 Box 工厂创建垂直和水平 Glue 元素并将它们添加到布局的侧面。当布局设置好时,胶水会膨胀并迫使布局的其余部分进入中心。

于 2011-10-03T14:09:42.677 回答