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

क्या कोई ऐसी विधि है जो एनिमेटेड को खेलने से रोक सकती है? मैं gif का एक स्थिर jpg असाइन करने की सोच रहा था, फिर जब मैं होवर करता हूं, एनिमेटेड gif असाइन करता हूं, लेकिन मुझे नहीं लगता कि MouseMotionListener में माउस को निकालने का कोई ईवेंट है, इसलिए मैं स्थिर jpg वापस लोड कर सकता हूं।जेबीटन पर एनिमेटेड जीआईएफ, माउस को घुमाए जाने पर इसे चलाएं

बटन में gif loops, हालांकि, अगर मैं इसे ओवरवर करता हूं, तो यह गायब हो जाता है।

यदि मेरा माउस कर्सर बटन पर नहीं है तो मैं gif static कैसे बना सकता हूं?

यदि मैं MouseMotionListener का उपयोग करता हूं, तो क्या यह मेरे माउस को बंद करने पर एक ईवेंट को आग लगा देता है?

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

उत्तर

5

देखें:

एक स्पष्ट माउस श्रोता सेट करने की कोई ज़रूरत नहीं है, परिवर्तन स्वचालित रूप से होता है।

ईजी। इस उदाहरण में मैंने MediaTracker नहीं जोड़ा है, इसलिए लोड समय की अनुमति देने के लिए छवि को लेबल में पॉप किया गया। अंतिम उपयोगकर्ता ImageObserver है (जब तक आप पहले संवाद को खारिज करने से पहले स्पिन देखते हैं तब तक प्रतीक्षा करें)।

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

इसके अलावा, स्थैतिक छवि जेपीईजी के रूप में न बनाएं। एक जेपीईजी हानिकारक है और पारदर्शिता का समर्थन नहीं करता है। या तो एक फ्रेम जीआईएफ या पीएनजी का उपयोग करें।

+2

@Lan [छवि छवि 'के साथ एनिमेटेड जीआईएफ का उत्पादन करने का प्रयास करें (http://stackoverflow.com/questions/10836832/show-an-animated-bg-in-swing)। ;) –

+1

लिंक के लिए धन्यवाद, मैंने कुछ नया सीखा। – LanguagesNamedAfterCofee

+0

@ लैन उस टिड्बिट ने मुझे आश्चर्यचकित कर दिया जब मैंने इसे ठोकर दिया! मैं नियमित रूप से गैर एनिमेटेड छवियों के लिए 'ImageIO' का उपयोग करता हूं, और जिन अवसरों के लिए मुझे एनिमेटेड जीआईएफ की आवश्यकता होती थी, वे आमतौर पर उन घटकों में थे जो इसे 'स्वचालित रूप से' (बटन, घटकों में HTML आदि) को संभाला करते थे। प्रलेखन के माध्यम से मेरी परेशानी के बावजूद, मुझे कोई स्पष्टीकरण नहीं मिल रहा है कि क्यों 'ImageIO' * एनिमेटेड जीआईएफ उत्पन्न नहीं करता है। –

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

एनिमेटेड gif छवि अदृश्य नहीं होगी जब माउस पॉइंटर बटन पर चलता है।