单击按钮时更改照片

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 ……)

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

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