2014-03-24 108 views
0

嗨我正在嘗試創建一個Java桌面應用程序,我可以每5秒自動移動一次圖像。我能夠做到這一點。問題是我想使用自己的圖像,並且我想將所有圖像放在單個Jlabel上。我沒有下面的代碼如何自動更改Jlabel

我怎麼能得到這個?

private static class ImagePanel extends JPanel { 

     URL[] urls; 
     ImageIcon[] image; 
     BufferedImage[] images; 
     Random rand = new Random(); 
     JLabel imagelabel; 

     public ImagePanel() { 
      urls = new URL[4]; 

      try { 


       urls[0] = new URL("http://i.stack.imgur.com/NCsHu.png"); 
       urls[1] = new URL("http://i.stack.imgur.com/UvHN4.png"); 
       urls[2] = new URL("http://i.stack.imgur.com/s89ON.png"); 
       urls[3] = new URL("http://i.stack.imgur.com/QEK2o.png"); 


       images = new BufferedImage[5]; 
       images[0] = ImageIO.read(urls[0]); 
       images[1] = ImageIO.read(urls[1]); 
       images[2] = ImageIO.read(urls[2]); 
       images[3] = ImageIO.read(urls[3]); 

      } catch (MalformedURLException ex) { 
       ex.printStackTrace(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 

      setBackground(Color.BLACK); 

      Timer timer = new Timer(5000, new ActionListener(){ 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        repaint(); 
       } 
      }); 
      timer.start(); 
     } 

     private int random() { 
      int index = rand.nextInt(4); 
      return index; 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      BufferedImage img = images[random()]; 
      g.drawImage(img, 0, 0, 400, 400, 0, 0, 
        img.getWidth(), img.getHeight(), this); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(400, 400); 
     } 
    } 
} 

在此先感謝

回答

3

「但這個問題我想用我自己的形象,我希望把所有的圖像在單JLabel的。」

該程序似乎與網址一起工作。所以我想你的問題是如何使用你自己的文件圖像。

你應該做的是把圖像在您的項目包中,如同

ProjectRoot 
     src 
      resources 
        image1.png 
        image2.png 

然後你就可以像這樣的東西

//urls[0] = new URL("http://i.stack.imgur.com/NCsHu.png"); 
urls[0] = ImagePanel.class.getResource("/resources/image1.png"); 
urls[1] = ImagePanel.class.getResource("/resources/image2.png"); 

更換URL多見於embedded-resource維基瞭解更多關於如何使用嵌入式資源的信息。


此代碼看起來familar ;-)


編輯

根據您的問題標題和問題有關JLabel,代碼實際上不使用JLabel。它描繪了圖像。如果您確實想要使用JLabel,那麼您可以使用imageLabel.setIcon(images[randon()])更改標籤圖標。您可以在Timer收聽者