这是我在这里的第一篇文章,我有那看来真的nooby一个问题,但是这已经困扰我过去一小时左右。
我正在与一个JPanel一个简单的JFrame中,但Windows 7的边框似乎挡住了我的面板部分的视图。 举例来说,如果我画一个小广场,在坐标0,0,就不会出现,我怀疑它的窗框后面。
我已经试过搞乱与周围包的setSize,setpreferred大小的setResizable,和不同的布局,但我不能得到它显示前20个像素左右!
这是我有:
public RedSunGame() {
super("Red Sun");
rs = new JPanel(new BorderLayout(), true);
rs.setPreferredSize(new Dimension(WIDTH, HEIGHT));
add(rs, "Center");
setPreferredSize(new Dimension(WIDTH, HEIGHT));
pack();
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
编辑:
感谢您的回复,比较遗憾的是缺乏信息的:)
我用我在一本书中看到了双缓冲策略。 gameRender和paintScreen是一个标准的游戏循环。 我RedSunGame类扩展JFrame的。 所有相关的代码,你可以问,除了上面:
private static final int WIDTH = 500;
private static final int HEIGHT = 500;
private JPanel rs;
private Graphics2D g2d;
private Image dbImage;
private void gameRender() {
//create buffer
if (dbImage == null){
dbImage = createImage(WIDTH, HEIGHT);
g2d = (Graphics2D)dbImage.getGraphics();
}
//clear screen
g2d.setColor(Color.white);
g2d.fillRect(0, 0, WIDTH, HEIGHT);
g2d.setColor(Color.blue);
g2d.setFont(font);
g2d.drawString("FPS: " + FPS, 0, HEIGHT);
g2d.fillRect(30, 30, 10, 10);
}
private void paintScreen() {
Graphics g;
try {
g = getGraphics();
if ((g != null) && (dbImage != null))
g.drawImage(dbImage, 0, 0, null);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
catch (Exception e)
{ System.out.println("Graphics context error: " + e); }
}
以我目前的设置,它看起来像这样。 http://i.imgur.com/qaabC.png
这是发生了什么,如果我有g2d.fillRect(30,30,10,10),即坐标30,30,而不是0,0唯一的变化。 这肯定躲在边境往上顶。 http://i.imgur.com/uzfFe.png
此外,将其设置为BorderLayout.CENTER似乎没有作出任何情况下的差异。
(抱歉,它不会让新用户发表图片)
编辑:我想通了。 我是直接画到JFrame。 @Guillaume波莱我知道为什么,因为它吸引到的帧而不是面板实际上应该显示的内容,你不应该重写JFrames的paint方法! 谢谢