Java如何模拟鼠标点击

时间:2022-12-22 18:10:47

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class TestFrame extends JFrame 
{
private JButton btn1 = new JButton("Button 1");
private JButton btn2 = new JButton("Button 2");

public TestFrame()
{
setLayout(new GridLayout(0, 1));
add(btn1);
add(btn2);

btn1.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent event)
{
if (event.getButton() == MouseEvent.BUTTON1)
System.out.println(btn1.getText() + "鼠标左键点击");
if (event.getButton() == MouseEvent.BUTTON3)
System.out.println(btn1.getText() + "鼠标右键点击");
}
});
btn2.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent event)
{
if (event.getButton() == MouseEvent.BUTTON1)
System.out.println(btn2.getText() + "鼠标左键点击");
if (event.getButton() == MouseEvent.BUTTON3)
System.out.println(btn2.getText() + "鼠标右键点击");
}
});
}

public void simulationClick()
{
//模拟鼠标点击代码
}

public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
TestFrame frame = new TestFrame();
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.simulationClick();
}
});
}
}

请高手帮忙补一下其中的模拟鼠标点击代码

7 个解决方案

#1


用 java.awt.Robot

mouseMove()
mousePress()

#2


最好只是模拟鼠标点击,但实际鼠标不动,用Robot类的话,实际鼠标必须先模拟移动才能模拟点击

#3


如果你只是想调用方法,那直接调用好啦


也可以不move只click嘛

#4


引用 3 楼 runer 的回复:
如果你只是想调用方法,那直接调用好啦


也可以不move只click嘛

不懂,Robot类中关于鼠标的函数不是只有这么三个吗
 void mouseMove(int x, int y) 
          将鼠标指针移动到给定屏幕坐标。 
 void mousePress(int buttons) 
          按下一个或多个鼠标按钮。 
 void mouseRelease(int buttons) 
          释放一个或多个鼠标按钮。 
不先mouseMove,如何使用mousePress和mouseRelease?

#5


呵呵,你用手移过去嘛

要是你想测试按钮的鼠标事件

如果鼠标不在按钮上,怎么能产生鼠标事件啊

#6


引用 5 楼 runer 的回复:
呵呵,你用手移过去嘛

要是你想测试按钮的鼠标事件

如果鼠标不在按钮上,怎么能产生鼠标事件啊

好吧,还是接着等高手吧

#7


算了,我已经想到了,先保存当前鼠标的位置,模拟完后再还原回去就行了

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class TestFrame extends JFrame 
{
private JButton btn1 = new JButton("Button 1");
private JButton btn2 = new JButton("Button 2");
private Robot robot;

public TestFrame()
{
setLayout(new GridLayout(0, 1));
add(btn1);
add(btn2);

btn1.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent event)
{
if (event.getButton() == MouseEvent.BUTTON1)
System.out.println(btn1.getText() + "鼠标左键点击");
if (event.getButton() == MouseEvent.BUTTON3)
System.out.println(btn1.getText() + "鼠标右键点击");
}
});
btn2.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent event)
{
if (event.getButton() == MouseEvent.BUTTON1)
System.out.println(btn2.getText() + "鼠标左键点击");
if (event.getButton() == MouseEvent.BUTTON3)
System.out.println(btn2.getText() + "鼠标右键点击");
}
});
addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseMoved(MouseEvent event)
{
}
});
}

public void simulationClick() throws AWTException
{
//模拟鼠标点击代码
Point p1 = btn1.getLocation();
Point p2 = btn2.getLocation();
System.out.println(p1.x + "," + p1.y);
System.out.println(p2.x + "," + p2.y);
Point p = MouseInfo.getPointerInfo().getLocation();
int x = p.x;
int y = p.y;
robot = new Robot();
System.out.println(x + "," + y);
robot.mouseMove(p1.x + 10, p2.y + 10);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.mouseMove(x, y);
}

public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
TestFrame frame = new TestFrame();
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try 
{
frame.simulationClick();
}
catch (AWTException e) 
{
e.printStackTrace();
}
}
});
}
}

#1


用 java.awt.Robot

mouseMove()
mousePress()

#2


最好只是模拟鼠标点击,但实际鼠标不动,用Robot类的话,实际鼠标必须先模拟移动才能模拟点击

#3


如果你只是想调用方法,那直接调用好啦


也可以不move只click嘛

#4


引用 3 楼 runer 的回复:
如果你只是想调用方法,那直接调用好啦


也可以不move只click嘛

不懂,Robot类中关于鼠标的函数不是只有这么三个吗
 void mouseMove(int x, int y) 
          将鼠标指针移动到给定屏幕坐标。 
 void mousePress(int buttons) 
          按下一个或多个鼠标按钮。 
 void mouseRelease(int buttons) 
          释放一个或多个鼠标按钮。 
不先mouseMove,如何使用mousePress和mouseRelease?

#5


呵呵,你用手移过去嘛

要是你想测试按钮的鼠标事件

如果鼠标不在按钮上,怎么能产生鼠标事件啊

#6


引用 5 楼 runer 的回复:
呵呵,你用手移过去嘛

要是你想测试按钮的鼠标事件

如果鼠标不在按钮上,怎么能产生鼠标事件啊

好吧,还是接着等高手吧

#7


算了,我已经想到了,先保存当前鼠标的位置,模拟完后再还原回去就行了

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class TestFrame extends JFrame 
{
private JButton btn1 = new JButton("Button 1");
private JButton btn2 = new JButton("Button 2");
private Robot robot;

public TestFrame()
{
setLayout(new GridLayout(0, 1));
add(btn1);
add(btn2);

btn1.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent event)
{
if (event.getButton() == MouseEvent.BUTTON1)
System.out.println(btn1.getText() + "鼠标左键点击");
if (event.getButton() == MouseEvent.BUTTON3)
System.out.println(btn1.getText() + "鼠标右键点击");
}
});
btn2.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent event)
{
if (event.getButton() == MouseEvent.BUTTON1)
System.out.println(btn2.getText() + "鼠标左键点击");
if (event.getButton() == MouseEvent.BUTTON3)
System.out.println(btn2.getText() + "鼠标右键点击");
}
});
addMouseMotionListener(new MouseMotionAdapter()
{
public void mouseMoved(MouseEvent event)
{
}
});
}

public void simulationClick() throws AWTException
{
//模拟鼠标点击代码
Point p1 = btn1.getLocation();
Point p2 = btn2.getLocation();
System.out.println(p1.x + "," + p1.y);
System.out.println(p2.x + "," + p2.y);
Point p = MouseInfo.getPointerInfo().getLocation();
int x = p.x;
int y = p.y;
robot = new Robot();
System.out.println(x + "," + y);
robot.mouseMove(p1.x + 10, p2.y + 10);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.mouseMove(x, y);
}

public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
TestFrame frame = new TestFrame();
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try 
{
frame.simulationClick();
}
catch (AWTException e) 
{
e.printStackTrace();
}
}
});
}
}