Java 为什么不是';我的程序不能处理鼠标运动吗?(爪哇)
我试着做一些很酷的“鼠标跟踪器”。。它会记录您的鼠标位置,直到您按下“轨迹”按钮,当您单击它时,它会“恢复”鼠标位置 它似乎无法处理mouseMove方法。为什么?Java 为什么不是';我的程序不能处理鼠标运动吗?(爪哇),java,events,mouseevent,Java,Events,Mouseevent,我试着做一些很酷的“鼠标跟踪器”。。它会记录您的鼠标位置,直到您按下“轨迹”按钮,当您单击它时,它会“恢复”鼠标位置 它似乎无法处理mouseMove方法。为什么? import java.awt.AWTException; import java.awt.Dimension; import java.awt.Point; import java.awt.Robot; import java.awt.event.ActionEvent; import java.awt.event.ActionL
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Mouse implements MouseMotionListener {
JFrame frame = new JFrame();
JButton move = new JButton("Track");
Point[] points = new Point[100000];
int i = 0;
public Mouse() {
// restore on track
move.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
Mouse.this.restore();
} catch (InterruptedException | AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
// initialize component
frame.setPreferredSize(new Dimension(300, 300));
frame.getContentPane().add(move);
frame.addMouseMotionListener(this);
frame.pack();
frame.setVisible(true);
}
@Override
public void mouseDragged(MouseEvent e) {}
@Override
public void mouseMoved(MouseEvent e) {
System.out.println("Mouve move");
if(i < 100000) {
points[i] = e.getLocationOnScreen();
i++;
}
}
public void restore() throws InterruptedException, AWTException {
System.out.println("Mouse restored");
for(int j = 0; j < i; j++) {
Robot r = new Robot();
r.mouseMove(points[j].x, points[j].y);
Thread.sleep(100);
}
}
public static void main(String[] args) {
Mouse s = new Mouse();
}
}
import java.awt.AWTException;
导入java.awt.Dimension;
导入java.awt.Point;
导入java.awt.Robot;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseMotionListener;
导入javax.swing.JButton;
导入javax.swing.JFrame;
公共类Mouse实现MouseMotionListener{
JFrame=新JFrame();
JButton move=新JButton(“轨道”);
点[]点=新点[100000];
int i=0;
公共鼠标(){
//恢复正常
move.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件arg0){
试一试{
Mouse.this.restore();
}捕获(中断异常| awtex异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
});
//初始化组件
frame.setPreferredSize(新尺寸(300300));
frame.getContentPane().add(移动);
frame.addMouseMotionListener(此);
frame.pack();
frame.setVisible(true);
}
@凌驾
公共无效mouseDragged(MouseEvent e){}
@凌驾
public void mouseMoved(MouseEvent e){
System.out.println(“move move move”);
如果(i<100000){
点[i]=e.getLocationOnScreen();
i++;
}
}
public void restore()引发InterruptedException,AWTException{
System.out.println(“鼠标恢复”);
对于(int j=0;j
MouseListener
添加到JFrame
或其ContentPane
,而不是JButton
-主要原因SwingUtilities.invokeLater()在EDT线程中运行Swing
restore
for(int j=0;j
到
Robot r=新机器人();
对于(int j=0;j
那么,按下按钮后实际会发生什么?i的值是多少,是不是>0?在for
循环的外部创建机器人
。@user1798362,frame.removeMouseMotionListener(此);
for(int j = 0; j < i; j++) {
Robot r = new Robot();
Robot r = new Robot();
for(int j = 0; j < i; j++) {