java - GroupLayout 的列未对齐

标签 java swing layout-manager grouplayout

最左边的列是我在这里引用的内容:

/image/zXIcF.png

大约一周前,我说服我爸爸放弃 Windows 10,转而使用 Linux Mint。考虑到他多么喜欢简单的界面,到目前为止,转变相当坎坷。他不愿意使用命令行,所以我花了大半天的时间尝试制作一个 java 用户界面,这样他就不会再提示他如何无法运行脚本了。不过,我确实希望它是完美的,这种错位让我很恼火。老实说,我不明白该专栏与其他专栏相比有什么不同。

这是我的格式方法,它执行所有 GroupLayout 操作

    private void format() {
    GroupLayout layout = new GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setAutoCreateGaps(true);
    layout.setAutoCreateContainerGaps(true);

    layout.setHorizontalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(LEADING))
                .addComponent(inputLabel)
                .addComponent(outputLabel)
                .addComponent(exitButton)
            .addGroup(layout.createParallelGroup(LEADING)
                    .addComponent(inputTextField, 300, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(outputTextField, 300, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    )
            .addGroup(layout.createParallelGroup(LEADING).addComponent(inputButton).addComponent(outputButton)
                    .addComponent(compressButton)));

    layout.linkSize(SwingConstants.HORIZONTAL, inputButton, outputButton);

    layout.setVerticalGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(LEADING)
                    .addComponent(inputLabel)
                    .addComponent(inputTextField, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(inputButton))
            .addGroup(layout.createParallelGroup(LEADING)
                    .addComponent(outputLabel)
                    .addComponent(outputTextField, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(outputButton))
            .addGroup(layout.createParallelGroup(LEADING)
                    .addComponent(exitButton)
                    .addComponent(compressButton)));

    setTitle("PDF CONVERTER");
    pack();
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}

任何帮助将不胜感激。提前致谢!

最佳答案

问题出在水平布局组中。您没有用右圆括号完成前两组。

我还对代码进行了一些改进。我通过垂直组中的基线对齐来抑制文本字段的垂直增长。

此外,最好在文本字段中定义预期的列数,而不是在布局中硬编码最小大小。

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class PdfConverterEx extends JFrame {

    public PdfConverterEx() {

        initUI();
    }

    private void initUI() {

        JLabel inputLabel = new JLabel("Input:");
        JLabel outputLabel = new JLabel("Output:");

        JTextField field1 = new JTextField(25);
        JTextField field2 = new JTextField(25);

        JButton browseBtn1 = new JButton("Browse");
        JButton browseBtn2 = new JButton("Browse");

        JButton exitBtn = new JButton("Exit");
        JButton compressBtn = new JButton("Compress");

        createLayout(inputLabel, outputLabel, field1, field2,
                browseBtn1, browseBtn2, exitBtn, compressBtn);

        setTitle("PDF Converter");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    private void createLayout(JComponent... arg) {

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);

        layout.setHorizontalGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
                        .addComponent(arg[0])
                        .addComponent(arg[1])
                        .addComponent(arg[6]))
                .addGroup(layout.createParallelGroup()
                        .addComponent(arg[2])
                        .addComponent(arg[3]))
                .addGroup(layout.createParallelGroup()
                        .addComponent(arg[4])
                        .addComponent(arg[5])
                        .addComponent(arg[7]))
        );

        layout.linkSize(SwingConstants.HORIZONTAL, arg[5], arg[6]);

        layout.setVerticalGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(arg[0])
                        .addComponent(arg[2])
                        .addComponent(arg[4]))
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(arg[1])
                        .addComponent(arg[3])
                        .addComponent(arg[5]))
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(arg[6])
                        .addComponent(arg[7])));

        pack();

    }

    public static void main(String[] args) {

        EventQueue.invokeLater(() -> {
            PdfConverterEx ex = new PdfConverterEx();
            ex.setVisible(true);
        });
    }
}

祝您迁移到 Linux 顺利。 :)

这是屏幕截图:

enter image description here

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

相关文章:

java - 如何通过 Selenium 单击模式框中的 HTML 元素?

java - 直接调用 String 方法是否也会将该 String 存储在 String 池中?

java - JTable 中的日期时间选择器

java - GridBagConstraints 填充垂直和水平

java - 无法让 JPanel 在 Swing 中正确调整大小

java - 如何将 JLabel 对齐到 JPanel 的左侧?

java - Optaplanner 列出规划变量

java - 在日期列中插入了错误的日期

java - 当 ComponentOrientation 设置为 RTL 时 JLabel 和 JTextField 之间的不一致

java - 为 JButton 分配随机值