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

Czy istnieje metoda, która może powstrzymać animację od grania? Myślałem o przypisaniu statycznego pliku jpg z gifem, a kiedy najecham, przypisz animowany gif, ale nie sądzę, aby zdarzenie miało miejsce w przypadku zdejmowania myszy w MouseMotionListener, więc mogę załadować statyczny plik jpg.Animowane GIF na JButton, graj, gdy mysz unosi się w powietrzu

Pętla gif w przycisku, jednak po najechaniu na nią znika.

W jaki sposób ustawić tekst statyczny, jeśli mój kursor myszy nie znajduje się na przycisku?

Jeśli użyję MouseMotionListener, czy wywoła to zdarzenie, jeśli zdejmę mysz?

@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) { 
} 

Odpowiedz

5

Patrz:

Nie ma potrzeby ustawiania jawnego odbiornika myszy, przełączanie odbywa się automatycznie.

E.G. W tym przykładzie nie dodałem MediaTracker, więc umieściłem obraz w etykiecie, aby umożliwić załadowanie. Użytkownikiem końcowym jest ImageObserver (poczekaj, aż zobaczysz, że obraca się przed odrzuceniem pierwszego okna dialogowego).

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); 
    } 
} 

Ponadto, nie sprawiają, że obraz statyczny jako JPEG. Plik JPEG jest stratny i nie obsługuje przezroczystości. Użyj pojedynczego pliku GIF lub PNG.

+2

@Lan Spróbuj wyprodukować [animowany GIF z 'ImageIO'] (http://stackoverflow.com/questions/10836832/show-an-animated-bg-in-swing). ;) –

+1

Dzięki za link, nauczyłem się czegoś nowego. – LanguagesNamedAfterCofee

+0

@Lan Ta ciekawka zaskoczyła mnie, gdy natknąłem się na nią! Regularnie używam "ImageIO" do obrazów nie animowanych, a okazje, w których potrzebowałem animowanych GIF-ów, były zazwyczaj w komponentach, które obsługiwały to wszystko "automagicznie" (przyciski, HTML w komponentach itd.). Pomimo tego, że przeglądam dokumentację, nie mogę znaleźć żadnego wyjaśnienia, dlaczego 'ImageIO' nie * tworzy animowany GIF. –

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

Animowany obraz gif nie będzie niewidoczny, gdy wskaźnik myszki przesunie się nad przyciskiem.

Powiązane problemy