Отсутствует ваша sscce , проблема заключается в коде, который вы не показываете.Возможно использование макета родительского контейнера или pack()
.Обратите внимание, что по умолчанию макет JFrame
равен BorderLayout
;положение по умолчанию CENTER
.Вот sscce , с которым вы можете сравнить ваш код.
Добавление: комментируя, что родителем вашей GroupLayout
панели является другой JPanel
, вы спросили следующее:
Знаете ли вы, как заставить это работать в моей ситуации?
Да, дайте приложению JPanel
подходящую компоновку, например, GridLayout
, как показано ниже.Последний ведет себя очень похоже на BorderLayout.CENTER
из JFrame
в этом отношении.
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
/** @see http://stackoverflow.com/questions/6769722 */
public class GroupPanel extends JPanel {
private final JButton button = new JButton("Start");
private final JSeparator jSeparator = new JSeparator();
private final JTextField jTextField = new JTextField(10);
public GroupPanel() {
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
layout.setHorizontalGroup(layout.createParallelGroup()
.addComponent(button)
.addComponent(jSeparator)
.addComponent(jTextField)
);
layout.setVerticalGroup(layout.createSequentialGroup()
.addComponent(button, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jSeparator, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField, GroupLayout.PREFERRED_SIZE,
GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
);
}
private static void display() {
JFrame f = new JFrame("GroupPanel");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new GridLayout(1, 0));
f.add(new GroupPanel());
f.add(new GroupPanel());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
display();
}
});
}
}