鼠标悬停在图像上时多次图像更改

时间:2014-02-18 05:55:59

标签: java image swing hover mouse

我想获得Java程序的解决方案。我想在鼠标光标悬停在盒子上时立即在矩形框中更改图像。框中的图像必须不断变化(至少5个不同的图像),直到鼠标在图像上,并在光标开箱时停止变化。我想仅使用g.drawImage()设置图像,其中 g 是Graphics2D对象。

请帮我解决这个问题,因为我被卡住了。

3 个答案:

答案 0 :(得分:2)

How to Write a Mouse-Motion Listener开始。您需要确定鼠标何时进入指定区域,您可以使用java.awt.Rectangle来帮助解决此问题,因为它具有contains(Point)方法。

然后,看看How to Use Swing Timers,您可以使用它来触发图片中的更改。

基本上,当鼠标移动到Rectangle时,你会启动Swing Timer,这将触发一个动作事件,你可以在哪里更新要显示的图片并调用{{ 1}}。当鼠标移出repaint的一侧时,您只需停止计时器。

答案 1 :(得分:1)

当鼠标在标签上输入时,使用ImageIcon数组添加设置ImageIcon中的所有路径,图像会在1秒后发生变化。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class myImage extends JFrame implements  MouseMotionListener
{
    ImageIcon[] m=new ImageIcon[2]; 
    JLabel l;
    int i,l1;
    public myImage()
    {
        setLayout(null);
        setSize(1000,1000);
        setVisible(true);
        m[0]=new ImageIcon("m.jpg");
        m[1]=new ImageIcon("m1.jpg");
        l=new JLabel();
        l.setBounds(400,0,getWidth(),getHeight());
        add(l);
        l.addMouseMotionListener(this);
    }

    public void mouseMoved(MouseEvent e) 
    {
        if(i<2)
        {
            l.setIcon(m[i]);
            i++;
            try{
                Thread.sleep(1000);
            }
            catch(Exception e1)
            {
            }
        }
        else
        {
            i=0;
        }
    }

    public void mouseDragged(MouseEvent e) 
    {
        System.out.print("Mouse bye");
    }

    public static void main(String args[])
    {
        myImage i1=new myImage();
    }
}

答案 2 :(得分:-1)

此代码可能对您有所帮助!

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class answer {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public answer(){
        JFrame frame=new JFrame();
        frame.getContentPane().add(new rectangle());
        frame.pack();
        frame.setVisible(true);

    }
    public static void main(String args[]){
        new answer();
    }

    public class rectangle extends JPanel{
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        Image img;
        Timer timer;
        int count=0;
        public rectangle() {

            setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.black));
            setPreferredSize(new Dimension(100,100));
            timer=new Timer(800, new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent arg0) {
                    loadPic(count%5);
                    count++;
                    revalidate();
                    repaint();
                }
            });

            addMouseListener(new MouseAdapter() {

                @Override
                public void mouseEntered(MouseEvent arg0) {
                    count=0;
                    timer.start();
                }

                @Override
                public void mouseExited(MouseEvent arg0) {
                    timer.stop();
                }
            });
        }
        @Override
        protected void paintComponent(Graphics g){
            super.paintComponent(g);
            g.drawImage(img, 0, 0, 120, 100,this);
        }

        public void loadPic(int number){

            String address="";

            switch(number){
            case 0: address="img1.jpg";
            break;
            case 1: address="img2.jpg";
            break;
            case 2: address="img3.jpg";
            break;
            case 3: address="img4.jpg";
            break;
            default: address="img5.jpg";
            break;
            }

            try  
            {  
                img = ImageIO.read(getClass().getResourceAsStream(address));

            }  
            catch(Exception e){
                System.out.println("error in loading image");
            }

        }
    }

}