Java 每次鼠标移动时获取鼠标坐标
所以我有这个代码,但我不明白如何设置鼠标坐标的标签,每次鼠标移动Java 每次鼠标移动时获取鼠标坐标,java,swing,mouselistener,Java,Swing,Mouselistener,所以我有这个代码,但我不明白如何设置鼠标坐标的标签,每次鼠标移动 timer.schedule(new TimerTask() { @Override public void run() { int mouseX = MouseInfo.getPointerInfo().getLocation().x; int mouseY = MouseInfo.getPointerInfo().getLocation().y; lblInfo
timer.schedule(new TimerTask() {
@Override
public void run() {
int mouseX = MouseInfo.getPointerInfo().getLocation().x;
int mouseY = MouseInfo.getPointerInfo().getLocation().y;
lblInfo.setText("Nada "+mouseX+mouseY);
}
}, 1);
我甚至不确定代码是否正确,但我想让它做的是每次鼠标移动时都在名为lblInfo的标签中获取鼠标坐标
这段代码只在程序启动时显示一次 您需要
实现MouseMotionListener
,然后在mouseMoved
方法中添加逻辑,如:
public class MyClass implements MouseMotionListener {
public void mouseMoved(MouseEvent e) {
System.out.println("X : " + e.getX());
System.out.println("Y : " + e.getY());
}
public void mouseDragged(MouseEvent e) {
//do something
}
}
阅读更多关于的信息,看看这个例子。首先需要实现
mousedpressed
,然后实现mouseDragged
。首先获取初始按下点,然后鼠标标记将使用这些坐标
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
// Get x,y and store them
pX = me.getX();
pY = me.getY();
}
});
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent me) {
frame.setLocation(frame.getLocation().x + me.getX() - pX,
frame.getLocation().y + me.getY() - pY);
}
});
完整的运行示例。它使用一个未装饰的框架并创建一个JPanel
作为标题,您可以拖动它来移动框架
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
public class UndecoratedExample {
static JFrame frame = new JFrame();
static class MainPanel extends JPanel {
public MainPanel() {
setBackground(Color.gray);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
}
static class BorderPanel extends JPanel {
JLabel stackLabel;
int pX, pY;
public BorderPanel() {
ImageIcon icon = new ImageIcon(getClass().getResource(
"/resources/stackoverflow1.png"));
stackLabel = new JLabel();
stackLabel.setIcon(icon);
setBackground(Color.black);
setLayout(new FlowLayout(FlowLayout.RIGHT));
add(stackLabel);
stackLabel.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
System.exit(0);
}
});
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
// Get x,y and store them
pX = me.getX();
pY = me.getY();
}
});
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent me) {
frame.setLocation(frame.getLocation().x + me.getX() - pX,
frame.getLocation().y + me.getY() - pY);
}
});
}
}
static class OutsidePanel extends JPanel {
public OutsidePanel() {
setLayout(new BorderLayout());
add(new MainPanel(), BorderLayout.CENTER);
add(new BorderPanel(), BorderLayout.PAGE_START);
setBorder(new LineBorder(Color.BLACK, 5));
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.setUndecorated(true);
frame.add(new OutsidePanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
查看run()方法的执行频率?添加一个println()来查看。这就是问题所在,我有一个继承MouseMotionListener的Extended MouseAdapter(如果我没记错的话),但是我如何告诉它在每次鼠标移动时设置坐标呢。例如,每次在JPanel内按下鼠标时,我都可以得到坐标,但不是屏幕上的所有位置。我用的是mouseClicked,效果很好。。。但无法找到正确的事件,使其在每次鼠标移动时更新坐标,并且移动的鼠标似乎不起作用omg…public void mouseMoved(MouseEvent e){int mouseX=e.getX();int mouseY=e.getY();System.out.println(“测试信息:+mouseX+”+mouseY);igu.lblInfo.setText(“测试信息:+mouseX+”+mouseY”)},mouseMoved不会执行此操作“当鼠标光标移动到组件上但未按下任何按钮时调用”。我不知道为什么…doh nvm im dumb xD而不是添加addMouseMotionListener();我用了addMouseListener();谢谢你的帮助:D