开发者

Replacing a imageIcon

I have a value called 'AmountWrongGuessed' that gives the amount of wrong guesses the users puts while guessing a word.

Each times the word is not found in the arraylist the AmountWrongGuessed goes ++. (tested this wih a println and it works properly)

Now the problem is each time the AmountWrongGuessed goes 1 up it should display a ImageIcon.

But insteed it displays the last image icon all the time, and skips the other icons.

I use no layout mananger (its set to null, if this makes any difference in the total picture setLayout = null)

Also while initialising this game the amountwrongguessed is default 0, yet it does not display the first imageicon either.开发者_JAVA技巧 (i used different labels before to add each icon on the same position but then i had the problem only the first image displayed and nothing changed).

public HrView(Hrgame hg) {
    this.hg = hg;

    CreateComponents();
    SetLayoutComponents();
    UpdateComponents();
    AddListeners();
}

Creation of the images:

 private void CreateComponents() {

    hang0 = new ImageIcon("hang0.gif");
    lblHang = new JLabel(hang0);
    lblHang.setLocation(60, -10);
    lblHang.setSize(200, 200);       

    hang1 = new ImageIcon("hang1.gif");
    lblHang = new JLabel(hang1);
    lblHang.setLocation(60, -10);
    lblHang.setSize(200, 200);

    hang2 = new ImageIcon("hang2.gif");
    lblHang = new JLabel(hang2);
    lblHang.setLocation(60, -10);
    lblHang.setSize(200, 200);
}

  private void AddListeners()
{
    btnCheck.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {

            hg.Input(tfToGuessInput.getText().toLowerCase());
            Pictures();
            lblHang.updateUI();

        }
    });
}


private void Pictures()
{
    //works, does increment
    System.out.println(hg.getAmountWrongGuessed());

    if (hg.getAmountWrongGuessed() == 0) {
        add(lblHang);
    }
    if (hg.getAmountWrongGuessed() == 1) {
        add(lblHang);
    }
    if (hg.getAmountWrongGuessed() == 2) {
        add(lblHang);
    }
}


After CreateComponents() your attribute lblHang references the label you created last (the one containing image hang2.) In order to use the 3 labels later on, you need to have 3 label attibutes which you can then use in Pictures().

Btw, in Java the naming convention is that method names start with a lowercase character.


import javax.swing.*;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import java.awt.BorderLayout;
import java.awt.*;
import java.awt.event.*;

public class testgui{

private static int flag = 1;

public static void main(String[] args){

final JLabel label = new JLabel("",new ImageIcon("0.jpg"),JLabel.CENTER);
final JLabel label1 = new JLabel("",new ImageIcon("1.jpg"),JLabel.CENTER);
final JLabel label2 = new JLabel("",new ImageIcon("2.jpg"),JLabel.CENTER);

final JFrame frame = new JFrame();

final JPanel panel = new JPanel();

frame.add(panel,BorderLayout.CENTER);

frame.setVisible(true);

final JButton button = new JButton("Next");

frame.add(button,BorderLayout.SOUTH);

panel.add(label);

frame.pack();

button.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
        if(flag==0){
        System.out.println("0.jpg");
        //label image, flag increment
            flag = flag+1;
            panel.removeAll();
            panel.add(label);
            frame.pack();

        } else if(flag==1){
        System.out.println("1.jpg");
        //label1 image, flag increment
            flag = flag+1;
            panel.removeAll();
            panel.add(label1);
            frame.pack();
        } else if (flag==2){
        System.out.println("2.jpg");
        //label2 image, reset flag to 0
            flag = 0;
            panel.removeAll();
            panel.add(label2);
            frame.pack();
        }
        else{
            System.out.println("Wrong flag number !");
        }
        panel.validate();
        panel.updateUI();
        }
    });
}
    }

I think if you want to switch images, using jlabels, the above codes would help. It would help to rotate jlabels containing images but this codes are not optimized.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜