单击按钮时更改照片

时间:2017-03-20 00:44:25

标签: java swing icons imageicon

import javax.swing.Icon;
import javax.swing.ImageIcon;


public class Stage1 extends javax.swing.JFrame {


    int score = 0;
    int iter = 1;


    public Stage1() {
        initComponents();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("Stage 1");
        Icon ic = new ImageIcon("a"+ iter + ".jpg");
        pic.setIcon(ic);


    }


    private void submitActionPerformed(java.awt.event.ActionEvent evt) {                                       

        if(answer.getText().equals("input"))
        {
            score++;
            iter++;
            answer.setText("");
            String sc = Integer.toString(score);
            jLabel1.setText(sc);
            jLabel2.setText(Integer.toString(iter));
        }
        else
        {
            iter++;
            Icon ic = new ImageIcon("a"+ iter +".jpg");
            answer.setText("");
            jLabel2.setText(Integer.toString(iter));
        }


    }                                      


    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Stage1().setVisible(true);
            }
        });
    }


    private javax.swing.JTextField answer;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel pic;
    private javax.swing.JButton submit;

}

我删除了不必要的代码。 每次单击按钮时如何更改照片? 当我单击按钮时,iter变量递增。 但它并没有改变照片。它只显示a1.jpg 我想要发生的是,每次点击按钮,它都会显示下一张照片(a2.jpg,a3.jpg,a4.jpg ......)

1 个答案:

答案 0 :(得分:2)

您永远不会在ActionListener中的JLabel上调用pic.setIcon(...)。您只能在Stage1构造函数中调用一次,因此JLabel的Icon将永远不会更改。解决方案是在侦听器中调用此方法。

你的问题是一个“神奇的思考”,认为如果你改变一个变量引用的对象,对该对象的所有其他引用也会改变,但这不是Java的工作方式。当您更改ic引用的Icon时,这对JLabel中显示的当前对象没有影响。你必须编写代码来自行更改。