Столбец GroupLayout не выровнен

Крайний левый столбец - это то, на что я ссылаюсь здесь:

https://stackru.com/images/55b3b26bb7b2a4035d161043d8ec1114350bce5f.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);
}

Любая помощь приветствуется. Заранее спасибо!

1 ответ

Проблема в горизонтальной группе макетов. Вы не завершили первые две группы закрывающей правой круглой скобкой.

Я также немного улучшил код. Я подавил вертикальный рост текстовых полей с выравниванием базовой линии в вертикальной группе.

Кроме того, предпочтительно определить количество ожидаемых столбцов в текстовом поле, а не жестко задавать минимальный размер в макете.

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.:)

Вот скриншот:

Другие вопросы по тегам