我正在尝试使用JPanle和JFrame编写游戏。我在框架内设置了一个面板。当我在面板上绘制矩形尺寸的面板为0,0时。矩形向上移动并向左移动一些像素。我该如何解决这个问题?我google了,我看到了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 :(得分:1)
实际上您的面板没有移位,它位于0,0。问题是该面板的实际大小为810,610而不是800,600。出于某种原因(到目前为止,我无法找到,如果有人有想法,我很乐意学习),当你在setResizable(false)
上调用JFrame
时,其内容会被修改,最终会导致您的内容窗格大于预期(至少在JDK6 / Win7上)。在添加组件并打包框架之前调用setResizable(false)
,它可以正常工作。
另外,请考虑绘制一个面板大小的矩形(g.fillRect(0, 0, getWidth(), getHeight());
,这样无论发生什么情况,您都可以确保填满整个区域。
有什么理由用白色填充背景然后用黑色替换它?