gpt4 book ai didi

Java-Swing : The ImageIcon cannot change in runtime?

转载 作者:行者123 更新时间:2023-12-01 18:29:30 25 4
gpt4 key购买 nike

我在java中有这段代码

private void buttonShowImageActionPerformed(java.awt.event.ActionEvent evt)
{
if(folderFiles != null)
{
for(int i=0; i<folderFiles.size(); i++)
{
icon = new ImageIcon(folderFiles.get(i));
labelImage.setIcon(icon);
timeDelay(2); // A method that delays 2 secs - it works
}
}
}

当我按下按钮时,它会等待一段时间,从第一个图像转到最后一个图像,并逐个跳过文件夹中的图像延迟方法有效(我测试过)提前致谢!

最佳答案

关于:

timeDelay(2); // A method that delays 2 secs - it works

不,无论您如何测试它,它都不起作用。 Swing 不是这样工作的,您最好避免做出这样的假设。使用 Swing 计时器。

你会问,我怎么知道它不起作用,我会告诉你:该代码不会调用后台线程,也不会启动 Swing Timer,所以它唯一能做的就是延迟当前线程,可能在 Thread.sleep(...) 的某个地方。如果你调用这个并“测试”这个,是的,它会导致延迟,并显示在你的 System.out.println(...) 中。语句到控制台,但它也会 sleep Swing 事件线程,并使您的应用程序进入休眠状态。所以你真的不想这样做。

事实上,查看这是否适用于 Swing 的最佳测试是您当前的代码。然后会发生什么?您声明:

When I push the button, it waits some time, and from the 1st goes to the last image, and skips the images from the folder one-by-one

因此,事实上您知道这样一个事实:您的延迟对于 Swing 不起作用,因为您描述了代码践踏 Swing 事件线程、使其崩溃的典型症状。再次强调,使用 Swing Timer。这是 link to the Swing Timer Tutorial .

如果这是我的代码,我不会在每次按下按钮时都读取图像,而是一次读取所有图像,并且只读取一次,然后将它们放入 ArrayList<ImageIcon> 中。说叫iconList。假设您这样做了,那么代码可能如下所示:

private void buttonShowImageActionPerformed(java.awt.event.ActionEvent evt) {
// !! I'd use a variable or constant instead of the magic number 2000
new Timer(2000, new ActionListener() {
int count = 0;
actionPerformed(ActionEvent e) {
if (count != iconList.size()) {
labelImage.setIcon(iconList.get(count));
count++;
} else {
// stop the Timer
((Timer) e.getSource()).stop();
}
}
}).start();
}
<小时/>

编辑
你问:

My friend one last question ..... I put the "int count = 0;" inside the actionPerformed and nothing happend ... I cannot understand why it works only if it is outside the method .... ?

请理解 Swing Timer 的工作方式是重复调用 actionPerformed 方法,这里每 2000 秒调用一次。我的代码所做的是,当计时器启动时,计数设置为0。每次调用actionPerformed方法,计数增加1,并显示下一个ImageIcon。

在您的代码中,当调用 actionPerformed 方法时,计数将重新设置为 0,显示第一个图像,然后计数递增。但每次调用 actionPerformed 方法时,您的代码都会将计数重置回 0,因此增量不起作用。

关于Java-Swing : The ImageIcon cannot change in runtime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com