2011-10-06 133 views
0

我試圖做一個簡單的程序,顯示讓圖像在屏幕上晃動。 現在iv'e成功地讓圖像從左到右形成,但現在我在屏幕上顯示了20張圖像。Java隱藏圖像

我需要得到的是當下一張圖像被打印出來,以前的圖像被隱藏。另外如果有人可以幫我用計時器打印,這將是很好的。

這裏是我的代碼

package imagemove; 

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.image.*; 
import java.io.*; 
import javax.imageio.*; 
import javax.swing.*; 

public class imagemove extends Component { 
    private int x; 
    private int y; 

    BufferedImage img; 

    public imagemove() { 
     try { 
      img = ImageIO.read(new File("F:/JAVA/workspace/Tutorials/src/imagemove/1.jpg")); 
     } catch (IOException e) { 
     } 

    } 


    public void paint(Graphics g) { 
     x = 0; 
     y = 50; 

     for (int number = 1; number <= 15; number++) { 
      g.drawImage(img, x, y, this); 
      if (x > 1000) { 
       x = 0; 
      } else { 
       x += 100; 
      } 

      if(y > 100) { 
       y -= 100; 
      } else { 
       y += 25; 
      } 
      repaint(); 
     } 
    } 


    public static void main(String[] args) { 
     JFrame f = new JFrame("Boot"); 
     f.setSize(1000,1000); 
     f.add(new imagemove());   
     f.setVisible(true); 
    } 
} 

回答

0

是這樣工作的;它測試了它:

public class imagemove extends Component { 
    private int x; 
    private int y; 


    BufferedImage img; 

    public imagemove() { 
     try { 
      img = ImageIO.read(new File("F:/JAVA/workspace/Tutorials/src/imagemove/1.jpg")); 
     } catch (IOException e) { 
     } 

     x = 0; 
     y = 50; 
    } 


    @Override 
    public void paint(Graphics g) { 
     g.drawImage(img, x, y, this); 
     if (x > 1000) { 
      x = 0; 
     } else { 
      x += 100; 
     } 

    if(y > 100) { 
     y -= 100; 
    } else { 
     y += 25; 
    } 
} 


public static void main(String[] args) { 
    JFrame f = new JFrame("Boot"); 
    f.setSize(1000,1000); 
    f.add(new imagemove());   
    f.setVisible(true); 

    for (int number = 1; number <= 15; number++) { 
     f.repaint(); 

     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) {} 
    } 
} 

}

+0

然後它不會顯示我任何圖像 –

+0

編輯我的帖子與工作版本。 – MasterCassim

+1

爲什麼'this'是BufferedImage的ImageObserver? – Simiil

0

不能調用從paint()方法中重繪。

2
  1. 你應該把你的for循環放在另一個方法,這是從主要方法調用。 (繪製圖像指令應該明顯保留在繪畫方法中)
  2. 使用paintComponent而不是繪畫
  3. 將super.paintComponent(g)作爲paintComponent()的第一行。與以前的圖像應該被清除

編輯:

延長,而不是組件的JComponent。組件是AWT,JComponent是Swing

+0

正確的答案對我來說+1 – mKorbel