Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置JPanel的大小_Java_Swing - Fatal编程技术网

Java 设置JPanel的大小

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;

我正在编写一个与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;
     }
    }
    
    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,也会查看最大尺寸和最小尺寸。