繁体   English   中英

JPanel和JFrame坐标混乱

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM