Всем привет! Я пытаюсь решить, казалось бы, простую проблему, но не могу ее исправить. Я работаю над примером приложения с библиотеками Java / Swing; У меня есть JFrame и JPanel. Я просто хочу достичь следующих целей:
JPanel ДОЛЖЕН быть центрирован внутри JFrame.
JPanel ДОЛЖЕН иметь ВСЕГДА размер, указанный в
setPreferredSize () метод. Его размер НЕ ДОЛЖЕН быть меньше этого размера.
Я пробовал использовать GridBagLayout: это ТОЛЬКО способ, которым я могу это сделать.
См. Пример ниже:
/* file StackSample01.java */
import java.awt.*;
import javax.swing.*;
public class StackSample01 {
public static void main(String [] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(100, 100));
panel.setBackground(Color.RED);
frame.setLayout(new GridBagLayout());
frame.add(panel, new GridBagConstraints());
frame.setSize(new Dimension(200, 200));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Вот снимок экрана:
Я бы не стал использовать GridBagLayout, чтобы делать слишком простые вещи. Я попробовал простейшее решение, используя Box, но это не работает:
Пример кода:
/* file StackSample02.java */
import java.awt.*;
import javax.swing.*;
public class StackSample02 {
public static void main(String [] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(100, 100));
panel.setBackground(Color.RED); // for debug
panel.setAlignmentX(JComponent.CENTER_ALIGNMENT); // have no effect
Box box = new Box(BoxLayout.Y_AXIS);
box.add(Box.createVerticalGlue());
box.add(panel);
box.add(Box.createVerticalGlue()); // causes a deformation
frame.add(box);
frame.setSize(new Dimension(200, 200));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Здесь скриншот,
Есть идеи? Спасибо всем: -)