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

问题描述 投票:1回答:2

我遇到了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]);
            }
        }
    }
});
java arrays swing imageicon
2个回答
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来避免索引溢出。


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;
   }
 }
© www.soinside.com 2019 - 2024. All rights reserved.