代码之家  ›  专栏  ›  技术社区  ›  Bob

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

  •  1
  • Bob  · 技术社区  · 8 年前

    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 回复  |  直到 8 年前
        1
  •  1
  •   devops    8 年前

    执行以下操作:

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

        2
  •  0
  •   logger    8 年前
    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;
       }
     }