[英]Change ImageIcon in JLabel using Timer
我有两个类:逻辑和JFrame
。 在框架中,我有一个JLabel
和一个JButton
,我想:
单击此按钮后,标签中的ImageIcon
在确定的时间后使用Swing Timer
,就像它正在闪烁一样。 为此,我加载了两个亮度不同的图像( img1b
和img1
)。 我试图使计时器以不同的延迟两次更改图像,但未成功。 我还在按钮中放置了一个侦听器,并实现了actionPerformed
,如下所示:
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(btnImg1)) {
logic.piscaImagen(img1, lblImg1);
logic.piscaImagen(img1b, lblImg1);
在逻辑课中:
public void piscaImagen(ImageIcon img, JLabel lbl) {
Timer timer = new Timer(1250, null);
timer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt){
if(lbl.getIcon() != img){
lbl.setIcon(img);
}
}
});
timer.setRepeats(false);
timer.start();
}
但是,当我运行它时, logic.piscaImagen
没有任何变化。 有小费吗?
logic.piscaImagen(img1, lblImg1);
logic.piscaImagen(img1b, lblImg1);
在我看来,您正在启动两个计时器。 因此,第一个计时器触发并更改图像,然后第二个计时器触发并恢复图像,因此基本上您只能看到第一个图像。
您只需要一个计时器。 每次定时器触发时,您都会更改图像。 因此,Timer中的基本代码为:
if (lbl.getIcon() == img1)
lbl.setIcon(img1b);
else
lbl.setIcon(img1);
或者,对于更灵活的解决方案,您可以使用Animated Icon 。
Animated Icon
将允许您指定要显示的图标列表。 然后,当计时器触发时,将显示列表中的下一个图标。 您可以将Animated Icon
设置为连续显示,也可以控制循环数。
编辑 :回答不准确,不需要repaint()
-请参阅注释。
您错过了告诉程序需要更新显示的repaint()
调用。
@Override
public void actionPerformed(ActionEvent evt) {
if(lbl.getIcon() != img){
lbl.setIcon(img);
lbl.repaint();
}
}
( if
您的语句也缺少右括号,则不确定会产生什么影响/如果是错字)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.