JPanel SetPrefferedSize与实际大小不匹配

McM*_*oss 0 java swing jpanel

我有这个我无法处理的小虫子.我将JPanel的大小设置为(150,90),但paintComponent()中的代码显示为(160,100).怎么了?谢谢你的时间和帮助.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test2 extends JPanel{

    public static void main(String[] args) {

        JFrame window = new JFrame("Test");
        Test2 content = new Test2();
        window.setContentPane(content);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLocation(120,70);
        window.pack();
        window.setResizable(false);
        window.setVisible(true);
    }

    Test2(){
        setBackground( new Color(0,120,0) );
        setPreferredSize( new Dimension(150, 90));
        repaint();
    }

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor( Color.YELLOW);
        g.drawRect(0, 0, 150, 90);
        System.out.println(this.getWidth());
        System.out.println(this.getHeight());
    }
}
Run Code Online (Sandbox Code Playgroud)

控制台输出表明大小为(160,90).黄色矩形显示相同.

And*_*son 5

    window.pack();
    window.setResizable(false);
Run Code Online (Sandbox Code Playgroud)

应该:

    window.setResizable(false);
    window.pack();
Run Code Online (Sandbox Code Playgroud)

将窗口更改为不可调整大小会更改窗口的"chrome"(外部包装) - 它可能会变得更厚或更薄.如果我们在调用pack之前执行此操作,Swing将正确处理更改的chrome.

提示