java - GroupLayout 对齐问题

标签 java swing boxlayout

我在根据需要在 Java 中设置 GroupLayout 时遇到问题。

我的代码如下。组件的理想位置是:

++++++++++++++++++++++++++++++++++++++++++++++++++++
+LABEL_A       caseStudyComboBox           LABEL_B +
+LABEL_C       TextfieldE                  BtnD    +
++++++++++++++++++++++++++++++++++++++++++++++++++++

输出不是上面的,而是:

 +++++++++++++++++++++++++++++++++++++++++++++++++++
 +LABEL_A                                          +
 +                caseStudyCombBox                 +
 +                                  LABEL_B        +
 +       LABEL_C IS LONGER THAN A:                 +
 +                                TextfieldE       +
 +                                           BtnD  +
 +++++++++++++++++++++++++++++++++++++++++++++++++++

请提出一些补救措施。 谢谢。

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

最佳答案

当您设置水平和垂直组时,括号看起来有点困惑。这些控件不属于您创建的预期组。

代替

layout.setHorizontalGroup(layout.createSequentialGroup()
 .addGroup(layout.createParallelGroup())
 .addComponent(Label_A)
 .addComponent(Label_C)

实际上应该是:

layout.setHorizontalGroup(layout.createSequentialGroup()
 .addGroup(layout.createParallelGroup()
 .addComponent(Label_A)
 .addComponent(Label_C))

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

下面是经过稍微修改后的代码的结果:

enter image description here

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

关于java - GroupLayout 对齐问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13021817/

相关文章:

java - 从面板顶部留出间隙

java - 如何在 JFrame 中将 FlowLayout 更改为 BoxLayout

java - 我怎样才能使用 BoxLayout 来做到这一点?

java - 线程 sleep 阻止我的 Swing 应用程序执行

java - 如何在盒子布局中使用VerticalGlue

java - 使用 Ant 脚本创建的 WAR 文件无法在 eclipse 中调试

java - spring JPA增量保存实体

java - JFileChooser showSaveDialog 多次出现

java - 在不使文本变灰的情况下在 JTextField 中设置文本颜色

java - 如何使用 HTML 格式化使用 JOptionPane 创建的乘法表?