Java Swing ImageIcon Arrray setIcon 仅显示最后一个图像

Java Swing ImageIcon Arrray setIcon displays last image only

我在使用 ImageIcon 数组时遇到问题。当我单击 swing gui 上的 JButton 时,将显示 imageicon 的最后一个图像。我希望能够继续单击按钮并显示图像并让它遍历数组中的所有图像图标。

如何实现?感谢您对此事的指导:)

Icon[] myIcons = { 
    new ImageIcon(getClass().getResource("image0.png")),
    new ImageIcon(getClass().getResource("image1.png")),
    new ImageIcon(getClass().getResource("image2.png")),
    new ImageIcon(getClass().getResource("image3.png")),
};    

btnSubmit.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btnSubmit) {
            for (int i = 0; i < myIcons.length; i++) {
                lblImage.setIcon(myIcons[i]);
            }
        }
    }
});

做这样的事情:

btnSubmit.addActionListener(new ActionListener() {
    int curentIndex = -1;

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btnSubmit) {
            curentIndex = (curentIndex + 1) % myIcons.length;
            lblImage.setIcon(myIcons[curentIndex]);
        }
    }
}

使用% myIcons.length避免索引溢出。

if (e.getSource() == btnSubmit) {
    for (int i = 0; i < myIcons.length; i++) {
      lblImage.setIcon(myIcons[i]);
    }
}

你的逻辑是错误的。看看这段代码。看看出了什么问题。一旦你点击。您告诉程序在单击按钮后循环遍历每个图标,而不是每次单击然后设置图像,因此您将在循环结束时得到 lblImage.setIcon(myIcons[4]); 。这就是您获得最后一张图片的原因。

您需要在每次单击时设置每个图像,而不是将其放入循环中。

 int i = 0; 

 btnSubmit.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent e) {
   if (e.getSource() == btnSubmit) {
         lblImage.setIcon(myIcons[i]);
         i++; 
         if(i == myIcons.length-1) i=0;
   }
 }