[英]JPanel and JFrame coordinate messed up
我正在尝试使用JPanle和JFrame编写游戏。 我在框架内设置了一个面板。 当我在面板上绘制时,面板的矩形大小为0,0。 矩形向上和向左移动一些像素。 我该如何解决这个问题? 我用谷歌搜索,看到了insets方法,但是我不想每次绘制时都用它来计算坐标。
这是代码
public class Game extends JFrame{
public Game(){
this.getContentPane().setPreferredSize(new Dimension(800,600));
pane p = new pane();
this.getContentPane().add(p,BorderLayout.CENTER);
p.setPreferredSize(new Dimension(800,600));
pack();
setResizable(false);
setVisible(true);
}
public static void main(String[] args){
new Game();
}
}
public class pane extends JPanel{
public pane(){
setDoubleBuffered(false);
setBackground(Color.black);
setPreferredSize( new Dimension(800, 600));
setFocusable(true);
requestFocus();
}
@Override
public void paint(Graphics g) {
g.setColor(Color.white);
g.fillRect(0, 0, 800, 600);
g.setColor(Color.black);
g.fillRect(0, 0, 800, 600);
}
}
实际上,面板没有偏移,它位于0,0。 问题在于该面板的实际大小为810,610,而不是800,600。 由于某种原因(到目前为止,我无法找到,并且如果有人有我想学习的想法),当您在JFrame
上调用setResizable(false)
时,其inset会被修改,最终导致您的内容窗格变为比预期的要大(至少在JDK6 / Win7上)。 在添加组件和包装框架之前,请调用setResizable(false)
,它可以工作。
还可以考虑绘制一个与面板大小相同的矩形( g.fillRect(0, 0, getWidth(), getHeight());
以便确保无论发生什么情况都可以填充整个区域。
有什么理由用白色填充背景,然后用黑色替代?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.