JPanel SetPrefferedSize与实际大小不匹配

时间:2015-08-27 14:45:19

标签: 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());
    }
}

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

1 个答案:

答案 0 :(得分:5)

    window.pack();
    window.setResizable(false);

应该是:

    window.setResizable(false);
    window.pack();

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

提示