2012-10-13 18 views
5
Icon icon = new ImageIcon(getClass().getResource("/img/icon.gif")); 
aButton = new JButton("Its a button", icon); 

Esiste qualche tipo di metodo che può impedire a un animato di giocare? Stavo pensando di assegnare un jpg statico alla gif, quindi quando passo il mouse, assegna la gif animata, ma non penso che ci sia un evento per togliere il mouse in MouseMotionListener in modo da poter caricare il jpg statico.GIF animata su JButton, riproduci quando il mouse è al passaggio del mouse

La gif si ripete nel pulsante, tuttavia, se si passa sopra di esso, scompare.

Come posso rendere statica la GIF se il cursore del mouse non si trova sul pulsante?

Se utilizzo MouseMotionListener, si attiva un evento se togli il mouse?

@Override 
public void mouseMoved(MouseEvent e) { 
//play the gif 
//if I take mouse off, call some method to stop playing animated gif 
} 

@Override 
public void mouseDragged(MouseEvent e) { 
} 

risposta

5

See:

Non è necessario impostare un listener mouse esplicito, la commutazione avviene automaticamente.

E.G. In questo esempio non ho aggiunto uno MediaTracker così ho inserito l'immagine in un'etichetta per consentire il tempo di caricamento. L'utente finale è lo ImageObserver (attendi finché non lo vedi girare prima di chiudere la prima finestra di dialogo).

import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.net.URL; 
import javax.swing.*; 

public class ImageSwapOnButton { 

    public static void main(String[] args) throws Exception { 
     URL url = new URL("http://1point1c.org/gif/thum/plnttm.gif"); 

     Image image = Toolkit.getDefaultToolkit().createImage(url); 
     ImageIcon spinIcon = new ImageIcon(image); 
     JOptionPane.showMessageDialog(null, new JLabel(spinIcon)); 

     // create a static version of this icon 
     BufferedImage bi = new BufferedImage(150,150,BufferedImage.TYPE_INT_ARGB); 
     Graphics g = bi.getGraphics(); 
     g.drawImage(image,0,0,null); 
     g.dispose(); 
     ImageIcon staticIcon = new ImageIcon(bi); 

     JButton button = new JButton(staticIcon); 
     button.setRolloverIcon(spinIcon); 
     JOptionPane.showMessageDialog(null, button); 
    } 
} 

Inoltre, non rendere l'immagine statica come JPEG. Un JPEG è lossy e non supporta la trasparenza. Utilizzare un solo frame GIF o un PNG.

+2

@Lan Prova a produrre un [GIF animato con 'ImageIO'] (http://stackoverflow.com/questions/10836832/show-an-animated-bg-in-swing). ;) –

+1

Grazie per il link, ho imparato qualcosa di nuovo. – LanguagesNamedAfterCofee

+0

@Lan Quel boccone mi ha sorpreso quando mi sono imbattuto in esso! Uso regolarmente 'ImageIO' per immagini non animate, e le occasioni in cui avevo bisogno di GIF animate erano tipicamente in componenti che lo gestivano tutto 'automaticamente' (pulsanti, HTML nei componenti ecc.). Nonostante il mio trascinamento nella documentazione, non riesco a trovare alcuna spiegazione sul motivo per cui ImageIO' * non * produce una GIF animata. –

-1
button.setIcon(new ImageIcon("/*icon location*/")); 
button.setRolloverIcon(new ImageIcon("/*icon location*/" 

L'immagine gif animata non diventa invisibile quando il puntatore del mouse si sposta sul pulsante.

Problemi correlati