如何在JFrame中正确地将JPanel(固定大小)居中?
2022-09-03 02:23:36
大家好!我试图解决一个 - 显然 - 简单的问题,但我无法解决它。我正在使用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);
}
}
这是一张截图,
有什么想法吗?谢谢大家:-)