2012-04-05 62 views
0

我對圖形用戶界面(和Java,在不到3個月前開始)非常新穎,需要一些GUI幫助,我正在做一個家庭作業。我來這裏是作爲最後的手段,因爲我無法弄清楚這個問題,並且已經花了好幾個小時來研究它。圖形用戶界面一次顯示一個數組中的每個圖像

我需要製作一個圖形用戶界面,並通過ImageIcons數組並逐個顯示每個ImageIcon(擦除顯示的前一個)。我已經將它展現在顯示我的第一張圖片的地方,但是我的JButton完全沒有做任何事情,而且我也不知道如何讓這件事情起作用。我瀏覽了我的教科書以及我的老師給出的許多在線資源和例子,但仍然一無所獲。我知道,一旦我看到一個解決方案,我會覺得很愚蠢,但現在,我很累,而且我開始不思考,因爲我一直這麼做。請幫助= D!

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.ImageIcon; 

public class HangmanPanel extends JPanel { 
    private JLabel imageLabel; 
    private ImageIcon[] images; 
    private JButton nextImage; 
    private int imageNumber; 


    public HangmanPanel() { 

     nextImage = new JButton("Next Image"); 
     nextImage.setEnabled(true); 
     nextImage.setToolTipText("Press for next image."); 
     nextImage.addActionListener(new ButtonListener()); 

     images = new ImageIcon[8]; 
     // Populating the array 
     { 
      images[0] = new ImageIcon("hangman0.png"); 
      images[1] = new ImageIcon("hangman1.png"); 
      images[2] = new ImageIcon("hangman2.png"); 
      images[3] = new ImageIcon("hangman3.png"); 
      images[4] = new ImageIcon("hangman4.png"); 
      images[5] = new ImageIcon("hangman5.png"); 
      images[6] = new ImageIcon("hangman6.png"); 
      images[7] = new ImageIcon("hangman7.png"); 
     } 

     setBackground(Color.white); 

     add(nextImage); 
     int count = 0; 
     while (images.length > count) 
     imageLabel = new JLabel (images[imageNumber]); 
     count++; 
     imageNumber++; 
     add (imageLabel); 
    } 


    public void paint(Graphics page) { 
     super.paint(page); 


    } 
    private class ButtonListener implements ActionListener{ 
     public void actionPerformed(ActionEvent event) { 
      imageNumber++; 
      } 

     } 
    } 
+0

1)不要覆蓋'漆()'基於'JPanel',超越'的paintComponent一個Swing( )'而不是。 2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-04-06 05:47:41

回答

2
  • 這些方法在本教程的描述下AVOUT Icon/ImageIconJLabel,使用方法JLabel#setIcon()

  • 不要忘記檢查,如果imageNumber++;不出來的ImageIcon[] images;陣列,否則數組索引超出界限例外將凍結您的GUI,

1

您只需要幾個點你的ButtonListener中的e行


    private class ButtonListener implements ActionListener{ 
     public void actionPerformed(ActionEvent event) { 
      imageNumber++; 
      imageNumber %= images.length; 
      imageLabel.setIcon(images[imageNumber]); 
      imageLabel.repaint(); 


     } 
    } 
2

假設你想在你按下按鈕時改變圖片,你想把你的邏輯放在ActionListener裏面。這將使程序在單擊按鈕時觸發更改。

在構造函數中,您只需啓動第一個圖標,並且想要保存全局計數引用,以便知道下一個圖像。 「圖像變化的邏輯」將是你的聽衆裏面,所以你想要做這樣的事情:

//construcor 
    imageLabel = new JLabel (images[imageNumber]); 
    imageNumber++; 
    add (imageLabel); 

//listener 
private class ButtonListener implements ActionListener{ 
     public void actionPerformed(ActionEvent event) { 
      if(imageNumber<images.length){ //add a check so you don't get outofbounds exception 
       imageLabel.setIcon(images[imageNumber]); //this will set the image next in line 
       imageNumber++; 
       imageLabel.repaint(); 
      } 
      else 
      System.out.println("Whole array has been looped thru, no more images to show"); 
      } 

     } 
+0

一個很好的答案+1 – mKorbel 2012-04-05 08:06:07

+0

應該沒有必要打電話repaint ... – kleopatra 2012-04-05 08:10:18

+0

!!!有一個.setIcon ... Xp讓生活變得更容易。非常感謝吉米=) – Structures 2012-04-05 08:12:00

相關問題