2011-10-06 206 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