【问题标题】:How to center content of a GroupLayout in Java applet如何在 Java 小程序中将 GroupLayout 的内容居中
【发布时间】:2011-06-17 09:42:54
【问题描述】:

我想在 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)
);

我会给予任何帮助。

【问题讨论】:

  • 取决于您添加 GroupLayout JPanel cp 的组件。请显示相关代码。 JPanel 的容器也需要一个布局管理器。
  • 这就是我所有的代码。我只忘了最后一行:add(cp)
  • 这不是你的全部代码。我想你在一个扩展 JFrame 的类中,对吧?
  • 1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2)小程序本质上比框架更棘手。 3) 使GroupLayout 居中在applet 中的方法与您在框架中执行的方法完全相同。 4) 鉴于 (​​2) 并且你不理解 (3),我怀疑你在这个项目中咬得比你能咀嚼的更多。
  • @firstNamer:如果您发布一个简短的可编译程序(SSCCE)来演示您的问题,您可能会更快地获得更好的帮助。为什么只需要使用 GroupLayout 呢?为什么不使用更易于使用的布局组合?

标签: java swing applet grouplayout


【解决方案1】:

重要的几行是:

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

【讨论】:

  • ..是的 - 如果我不必添加进口和其他杂物,它会更快。
  • 使用网格包布局并不能回答如何以组布局居中的问题
  • @Simon 如果您一直阅读到第 34 行(是的,我知道这是为“电视一代”所做的努力),您可能会注意到代码使用2 个布局,一个GridBagLayout 和一个GroupLayout。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-09-10
    • 1970-01-01
    • 2020-01-10
    • 2016-04-17
    • 2012-03-17
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    相关资源
    最近更新 更多