drawImage不是绘图

时间:2013-01-04 02:07:22

标签: java user-interface drawimage

所以这基本上就是我的代码工作方式

class Main extends JFrame implements Runnable {

   public Main() {
      //init everything
   }

   public void start() {
      running = true;
      Thread thread = new Thread(this);
      thread.start();
   }

   public void run() {
      while(running) {
         render();
      }
   }

   public void render() {
      Image dbImage  = createImage(width, height);
      Graphics dbg = dbImage.getGraphics();
      draw(dbg);
      Graphics g = getGraphics();
      g.drawImage(dbImage, 0, 0, this);
      g.dispose();
   }

   public void draw(Graphics g) {
      for(int y=0; y < map.length; y++) {
         for(int x=0; x < map.length; x++) {
            g.drawImage(map.map[x + y* map.MAP_DIM], x*MAP_DIM, y*MAP_DIM, this);
         }
      }
   }

   public static void main(String... args) {
      Main main = new Main();
      main.start();
   }
}

但没有画出来,我看到的只是灰色。有谁知道问题可能是什么?我尝试在draw()方法结束时进行repaint(),但仍然没有。

1 个答案:

答案 0 :(得分:1)

您不应该使用Swing in Java自行管理绘图。

您必须让EDT线程通过自己的线程调用适当的重绘方法。这是通过调用JComponent的{​​{1}}来完成的。现在你不应该覆盖那个方法,而是覆盖paint(Graphics g)

所以你应该将你的draw方法从线程移动到适当的draw方法:

paintComponent(Graphics g)

请注意,您应该以固定的帧速率调用重绘,并使用双缓冲来避免闪烁。

更简单的解决方案是嵌入已经为此类工作准备的内容,例如Processing框架,效果非常好。