首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GroupLayout对齐问题

GroupLayout对齐问题
EN

Stack Overflow用户
提问于 2012-10-23 08:08:38
回答 1查看 304关注 0票数 3

我在Java中设置所需的GroupLayout时遇到问题。

我的代码如下所示。零部件的所需位置为:

代码语言:javascript
复制
++++++++++++++++++++++++++++++++++++++++++++++++++++
+LABEL_A       caseStudyComboBox           LABEL_B +
+LABEL_C       TextfieldE                  BtnD    +
++++++++++++++++++++++++++++++++++++++++++++++++++++

与上面不同的是,输出为:

代码语言:javascript
复制
 +++++++++++++++++++++++++++++++++++++++++++++++++++
 +LABEL_A                                          +
 +                caseStudyCombBox                 +
 +                                  LABEL_B        +
 +       LABEL_C IS LONGER THAN A:                 +
 +                                TextfieldE       +
 +                                           BtnD  +
 +++++++++++++++++++++++++++++++++++++++++++++++++++

请建议一些补救措施。谢谢。

代码语言:javascript
复制
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);
        }
    });
}
}
EN

回答 1

Stack Overflow用户

发布于 2012-10-23 09:28:50

在设置水平组和垂直组时,看起来括号有点混乱。这些控件不属于您创建的目标组。

而不是

代码语言:javascript
复制
layout.setHorizontalGroup(layout.createSequentialGroup()
 .addGroup(layout.createParallelGroup())
 .addComponent(Label_A)
 .addComponent(Label_C)

它实际上应该是:

代码语言:javascript
复制
layout.setHorizontalGroup(layout.createSequentialGroup()
 .addGroup(layout.createParallelGroup()
 .addComponent(Label_A)
 .addComponent(Label_C))

在第一种情况下,您将标签添加到顺序组中,而不是像第二种情况中那样添加到并行组中。

以下是略微修改了以下代码的结果:

代码语言:javascript
复制
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))
);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13021817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档