大家好! 我正在尝试解决一个“显然”简单的问题,但是我无法解决它。 我正在使用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);
}
}
这里有一张截图,
有什么想法吗?感谢所有人 :-)