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

Chr*_*cle 0 java swing

我正在尝试学习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);
    }
Run Code Online (Sandbox Code Playgroud)

如果你运行它,你会看到窗口的大小.它将是362乘384,而不是代码中写的400乘400.

如果我将尺寸更改为500乘500,则窗口将为462乘484.

问:为什么尺寸偏差为38和16?

cam*_*ckr 5

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

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

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

然后你使用:

frame.pack();
Run Code Online (Sandbox Code Playgroud)

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