我有一个我无法处理的小错误。
我将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)。黄色矩形显示相同。
最佳答案
window.pack();
window.setResizable(false);
应该:
window.setResizable(false);
window.pack();
将窗口更改为不可调整大小会更改窗口的“ chrome”(外部的包装)-它可能变厚或变薄。如果我们在调用打包之前执行此操作,Swing将正确处理更改后的镶边。
提示
请参见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?(是)。在这种情况下,
Test2
应该覆盖首选的size方法。要进行编译时检查,请添加
@Override
表示法。Swing GUI应在事件调度线程上启动。否则,可能会导致(偶尔)运行时错误以及通常的随机行为。
关于java - JPanel SetPrefferedSize与实际大小不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32252541/