【问题标题】:Java Swing ImageIcon Arrray setIcon displays last image onlyJava Swing ImageIcon 数组 setIcon 仅显示最后一个图像
【发布时间】:2018-03-06 16:23:59
【问题描述】:

我在使用 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]);
            }
        }
    }
});

【问题讨论】:

  • 跟踪您设置的最后一个图标,然后在再次单击按钮时设置下一个图标(您不需要循环)。
  • 一次调用 actionPerformed 是一键点击。因此,您当然不能在一个方法调用中显示所有图像。在您的类中保留一个索引字段,并在每次单击按钮时递增(即每次调用 actionPerformed)。显然,您还需要确保索引永远不会 ≥ 数组的大小。

标签: java arrays swing imageicon


【解决方案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 避免索引溢出。

【讨论】:

  • curRentIndex 变量可以是在er() {之后声明的匿名类的成员
  • 成功了,谢谢!在我不知道为什么我没有想到之前,我已经使用了 % array.length 。再次感谢一堆:)
  • @Scott,不要忘记点击复选标记“接受”答案,这样人们就知道问题已经解决了。
【解决方案2】:
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;
   }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多