所以我有这个代码,但是我不知道如何在每次鼠标移动时将鼠标坐标设置为标签......
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中获取鼠标坐标。
此代码只在程序启动时显示一次...
答案 0 :(得分:3)
您需要implements 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
}
}
答案 1 :(得分:0)
看看这个例子。您首先需要实施mousePresseded
然后 mouseDragged
。第一个得到初始印刷的点,然后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);
}
});
完整的运行示例。它使用一个undecorate框架并创建一个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);
}
});
}
}