我想获得Java程序的解决方案。我想在鼠标光标悬停在盒子上时立即在矩形框中更改图像。框中的图像必须不断变化(至少5个不同的图像),直到鼠标在图像上,并在光标开箱时停止变化。我想仅使用g.drawImage()
设置图像,其中 g 是Graphics2D对象。
请帮我解决这个问题,因为我被卡住了。
答案 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");
}
}
}
}