Java 设置JPanel的大小
我正在编写一个与swing组件一起工作的应用程序,我注意到有一件事需要解释 我有以下课程:Java 设置JPanel的大小,java,swing,Java,Swing,我正在编写一个与swing组件一起工作的应用程序,我注意到有一件事需要解释 我有以下课程: 我在其上实例化gui维度的枚举 public enum GuiDimension { WIDTH(700), HEIGHT(400); private final int value; private GuiDimension(int value) { this.value = value; } public int getValue(){ return value;
public enum GuiDimension {
WIDTH(700), HEIGHT(400);
private final int value;
private GuiDimension(int value) {
this.value = value;
}
public int getValue(){
return value;
}
}
private GamePanel gamePanel = new GamePanel();
public static void main(String[] args) {
new MainFrame();
}
public MainFrame() {
initGameFrame();
}
private void initGameFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(gamePanel);
setResizable(false);
setUndecorated(true);
pack();
setVisible(true);
setLocationRelativeTo(null);
}
}
public enum GuiDimension {
WIDTH(700), HEIGHT(400);
private final int value;
private GuiDimension(int value) {
this.value = value;
}
public int getValue(){
return value;
}
}
private GamePanel gamePanel = new GamePanel();
public static void main(String[] args) {
new MainFrame();
}
public MainFrame() {
initGameFrame();
}
private void initGameFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(gamePanel);
setResizable(false);
setUndecorated(true);
pack();
setVisible(true);
setLocationRelativeTo(null);
}
}
public class GamePanel extends JPanel {
public GamePanel() {
setPreferredSize(new Dimension(GuiDimension.WIDTH.getValue(),GuiDimension.HEIGHT.getValue()));
//it makes other stuff that are not of interest for this contest
}
}
我注意到,枚举确实不是整数,而是对象,但当我返回
GuiDimension.WIDTH.getValue()
GuiDimension.HEIGHT.getValue()
SetSize (new Dimension (GuiDimension.WIDTH.getValue (), GuiDimension.HEIGHT.getValue ()));
或
SetSize (GuiDimension.WIDTH.getValue (), GuiDimension.HEIGHT.getValue ());
而不是我在示例中插入的这个
setPreferredSize(new Dimension(GuiDimension.WIDTH.getValue(),GuiDimension.HEIGHT.getValue()));
框架显示的尺寸错误,我不明白为什么。
如果GuiDimension.WIDTH.getValue()
和GuiDimension.WIDTH.getValue())
对于setPreferredSize(…)
是正确的
为什么setSize(int,int)
和setSize(Dimension)
不一样
当测试这个简单的代码时,您可以看到这一点 大多数布局管理器会忽略组件的大小,但会尊重其首选大小,有时是最小值和最大值,因此当您调用
pack()
时,您的大小将更改为布局管理器和组件首选大小认为应为最佳大小的大小
顺便说一句,根据kleopatra(Jeanette),如果您确实需要设置组件的首选大小,最好重写getPreferredSize()
,而不是调用setPreferredSize(…)
。后者可以通过在其他位置对同一组件调用setPreferredSize(…)
来覆盖,而前者不能
另一方面,在示例代码中,您使用了两次宽度,似乎没有使用高度
编辑
您有一条关于包装和组件尺寸的评论已被删除。我的答复是:
pack()
方法要求布局管理器对组件进行布局,布局管理器在这里很重要——它们看什么,大小与首选大小。如果您阅读了大多数布局管理器的javadoc和教程,您会发现它们最尊重首选尺寸。有些,如BoxLayout,也会查看最大尺寸和最小尺寸。@CiMat:pack()
要求布局管理器对组件进行布局,而布局管理器在这里起着重要作用——它们查看的是什么,尺寸与首选尺寸的对比。如果您阅读了大多数布局管理器的javadoc和教程,您会发现它们最尊重首选尺寸。有些,如BoxLayout,也会查看最大尺寸和最小尺寸。