Столбец GroupLayout не выровнен
Крайний левый столбец - это то, на что я ссылаюсь здесь:
Около недели назад я убедил папу отказаться от 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.:)
Вот скриншот: