我有一个我无法处理的小虫子。 我将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)。黄色矩形显示相同。
答案 0 :(得分:5)
window.pack();
window.setResizable(false);
应该是:
window.setResizable(false);
window.pack();
将窗口更改为不可调整大小会更改窗口的“chrome”(外部包装) - 它可能会变得更厚或更薄。如果我们在调用pack之前执行此操作,Swing将正确处理更改的chrome。
Test2
应覆盖首选尺寸方法。 @Override
表示法。