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

时间:2018-03-06 16:24:00

标签: java arrays swing imageicon

我遇到了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]);
            }
        }
    }
});

2 个答案:

答案 0 :(得分:1)

做这样的事情:

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来避免索引溢出。

答案 1 :(得分:0)

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