求救Java 鼠标移动获取坐标问题.
我想实现,一边移动鼠标,一面显示坐标.实时更新.我试了好多次都不行.开始我先试在标签显示坐标,然后用addMouseMotionListener监听.不行后,我分别用JT...
我想实现,一边移动鼠标,一面显示坐标.实时更新.
我试了好多次都不行.
开始我先试在标签显示坐标,然后用addMouseMotionListener监听.
不行后,我分别用JTextField和JTextArea,都不能显示移动中的鼠标的坐标.
全部都只能显示初始0,0坐标.
能解释一下InputStatus 和synchronized这两处地方么 展开
我试了好多次都不行.
开始我先试在标签显示坐标,然后用addMouseMotionListener监听.
不行后,我分别用JTextField和JTextArea,都不能显示移动中的鼠标的坐标.
全部都只能显示初始0,0坐标.
能解释一下InputStatus 和synchronized这两处地方么 展开
1个回答
展开全部
class InputStatus{
int mouseX;
int mouseY;
}
InputStatus inputStatus=new InputStatus();
private final MouseMotionListener mouseMotionListener = new MouseMotionListener() {
public void mouseMoved(MouseEvent e) {
synchronized (inputStatus) {
inputStatus.mouseX = e.getX();
inputStatus.mouseY = e.getY();
}
}
public void mouseDragged(MouseEvent e) {
synchronized (inputStatus) {
inputStatus.mouseX = e.getX();
inputStatus.mouseY = e.getY();
}
}
};
然后把mouseMotionListener给add到你的窗口或者控件上就行。
InputStatus是自己写的内部类,用于存放鼠标的位置,这样在其他地方就可以用inputStatus.mouseX和inputStatus.mouseY来取了。synchronized是为了万一你取坐标的代码在其他线程里(你那个线程也要synchronized (inputStatus)),可以确保每次mouseX和mouseY是成对写入和成对读出的。
当然如果你是单线程的应用的话,可以不要synchronize,然后去掉inputStatus相关的代码,类的成员变量这么写
int mouseX,mouseY;
然后处理函数这么写
public void mouseDragged(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
}
这样比较简单
int mouseX;
int mouseY;
}
InputStatus inputStatus=new InputStatus();
private final MouseMotionListener mouseMotionListener = new MouseMotionListener() {
public void mouseMoved(MouseEvent e) {
synchronized (inputStatus) {
inputStatus.mouseX = e.getX();
inputStatus.mouseY = e.getY();
}
}
public void mouseDragged(MouseEvent e) {
synchronized (inputStatus) {
inputStatus.mouseX = e.getX();
inputStatus.mouseY = e.getY();
}
}
};
然后把mouseMotionListener给add到你的窗口或者控件上就行。
InputStatus是自己写的内部类,用于存放鼠标的位置,这样在其他地方就可以用inputStatus.mouseX和inputStatus.mouseY来取了。synchronized是为了万一你取坐标的代码在其他线程里(你那个线程也要synchronized (inputStatus)),可以确保每次mouseX和mouseY是成对写入和成对读出的。
当然如果你是单线程的应用的话,可以不要synchronize,然后去掉inputStatus相关的代码,类的成员变量这么写
int mouseX,mouseY;
然后处理函数这么写
public void mouseDragged(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
}
这样比较简单
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询