[英]Multiple image change on mouse hover over an image
我想获得Java程序的解决方案。 我想在鼠标指针悬停在矩形框上时更改图像。 框中的图像必须不断变化(至少5个不同的图像),直到鼠标停留在图像上,并随着光标移出框而停止变化。我只想使用g.drawImage()
设置图像,其中g是Graphics2D对象。
请帮助我找出这个问题,因为我被困住了。
从如何编写鼠标运动监听器开始 。 您将需要确定鼠标何时进入您的指定区域,可以使用java.awt.Rectangle
进行帮助,因为它具有contains(Point)
方法。
然后,看看如何使用Swing计时器 ,您可以使用它来触发图片中的更改。
基本上,当鼠标移至Rectangle
,您将启动Swing Timer
,该Swing Timer
将触发一个动作事件,在此您可以更新要显示的图片并调用repaint
。 当鼠标移出Rectangle
一侧时,您只需停止计时器。
当鼠标进入标签时,使用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();
}
}
此代码可能对您有所帮助!
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");
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.