[英]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.