0

我正在尝试使用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);

}
}

截图链接

4

1 回答 1

1

实际上您的面板没有移位,它位于 0,0。问题是面板的大小实际上是 810,610 而不是 800,600。出于某种原因(到目前为止我找不到,如果有人有我想学习的想法),当你调用setResizable(false)a时JFrame,它的插图被修改,最终导致你的内容窗格比预期的要大(在至少在 JDK6/Win7 上)。setResizable(false)在添加组件和打包框架之前调用它,它可以工作。

还可以考虑绘制一个与面板大小相同的矩形(g.fillRect(0, 0, getWidth(), getHeight());这样无论发生什么情况,您都可以确保填满整个区域。

有什么理由用白色填充背景然后用黑色替换它?

于 2012-07-05T09:19:07.017 回答