0

私はGUI(およびJava、3か月以内に開始)に非常に慣れていないので、宿題のために行っているGUIについてサポートが必要です。私はこれを理解することができず、何時間もそれに取り組んできたので、最後の手段としてここに来ました。

ImageIconの配列を通過し、各ImageIconを一度に1つずつ表示する(前に表示されていたものを消去する)GUIを作成する必要があります。最初の画像が表示される場所に到達しましたが、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++;
            }

        }
    }
4

3 に答える 3

2
  • これらのメソッドは、 Icon/ImageIconおよびJLabelに関するチュートリアルで説明されています。JLabel#setIcon()

  • imageNumber++;がの配列から外れていないかどうかを確認することを忘れないでくださいImageIcon[] images;。そうでない場合、配列インデックスの境界外例外によって GUI がフリーズします。

于 2012-04-05T08:02:10.200 に答える
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");
          }

        }
于 2012-04-05T08:02:39.243 に答える
1

ButtonListener にあと数行必要です


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


        }
    }
于 2012-04-05T08:02:19.783 に答える