Java 为什么我的JPanel比它应该的小?

Java 为什么我的JPanel比它应该的小?,java,swing,Java,Swing,我正在尝试学习Swing,并制作了一个面板(在其他StackOverflow代码的帮助下)。我在一个框架上添加了一个棋盘格设计,但是我发现这个框架没有它应该的那么大 这是我的密码: @Override protected void paintComponent(Graphics g) { int width = getWidth(), height = getHeight(); g.clearRect(0, 0, width, height);

我正在尝试学习Swing,并制作了一个面板(在其他StackOverflow代码的帮助下)。我在一个框架上添加了一个棋盘格设计,但是我发现这个框架没有它应该的那么大

这是我的密码:

    @Override
    protected void paintComponent(Graphics g) {
        int width = getWidth(), height = getHeight();
        g.clearRect(0, 0, width, height);
        g.setColor(Color.BLACK);

        for (int i=0;i<=width;i+=50) {
            g.drawLine(0,i,width,i);
        }
        for (int i=0;i<=height;i+=50) {
            g.drawLine(i,0,i,height);
        }
        label.setText("H = "+ getHeight() +"  W = "+ getWidth()); // check actual size
        add(label);
    }

    private void gui(Pan window) {
        frame = new JFrame();
        Container container = frame.getContentPane();       
        container.add(window);
        frame.setSize(400, 400); // size written here
        frame.setVisible(true);
    }
@覆盖
受保护组件(图形g){
int width=getWidth(),height=getHeight();
g、 clearRect(0,0,宽度,高度);
g、 设置颜色(颜色为黑色);
对于(int i=0;i
它将是362乘384,而不是400乘400

因为框架的大小包括标题栏和边框。请不要使用setSize()方法

而是重写自定义面板的
getPreferredSize()
方法,以返回您希望面板的大小

然后使用:

frame.pack();
然后,框架的大小将是面板的首选大小,加上标题栏和边框的大小

它将是362乘384,而不是400乘400

因为框架的大小包括标题栏和边框。请不要使用setSize()方法

而是重写自定义面板的
getPreferredSize()
方法,以返回您希望面板的大小

然后使用:

frame.pack();

然后,框架的大小将是面板的首选大小,加上标题栏和边框的大小。

Java为边框添加插图。请参阅Java为边框添加插图。请参阅覆盖
GetPreferedSize()
效果很好!返回400 x 400的维度会使窗口大小正确。但是,如果我添加
setresizeable(false)
,它将变为410 x 410。思考?@Chronicle,setresizeable()应该在打包帧之前完成。帧仍然假定可调整大小的边框的边框为5像素。由于没有边框,额外的空间将分配给面板。覆盖
getPreferedSize()
效果很好!返回400 x 400的尺寸将使窗口大小正确。但是,如果添加
setResizeable(false)
,它将由410变为410。在打包帧之前,应先完成Thinks?@Chronicle,setResizeable()。帧仍假定可调整大小的边框为5像素的边框。由于没有边框,因此额外的空间将分配给面板。