簡體   English   中英

更換imageIcon

[英]Replacing a imageIcon

我有一個名為“ AmountWrongGuessed”的值,該值給出用戶在猜測一個單詞時提出的錯誤猜測的數量。
每次在數組列表中找不到單詞時,AmountWrongGuessed就會變為++。 (通過println進行了測試,它可以正常工作)

現在的問題是,每當AmountWrongGuessed上升1時,它應該顯示一個ImageIcon。
但是被引導時,它始終顯示最后一個圖像圖標,並跳過其他圖標。

我不使用布局管理員(如果將其設置為null,則這將使總圖片setLayout = null有所不同)

同樣在初始化該游戲時,錯誤猜測的數量默認為0,但也不顯示第一個圖像圖標。 (在將每個圖標添加到相同位置之前,我使用了不同的標簽,但隨后出現的問題是僅顯示了第一個圖像,而沒有進行任何更改)。

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

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

圖像的創建:

 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);
    }
}

CreateComponents()之后,屬性lblHang引用了您最后創建的標簽(一個包含圖像hang2的標簽)。為了以后使用3個標簽,您需要具有3個標簽服裝,然后才能在Pictures()

順便說一句,在Java中,命名約定是方法名稱以小寫字母開頭。

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();
        }
    });
}
    }

我認為,如果您想使用jlabels切換圖像,上述代碼會有所幫助。 這將有助於旋轉包含圖像的jlabel,但是此代碼尚未優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM