Java - 相对于 JFrame 的光标位置
Java - Cursor position relative to JFrame
尝试使用以下方法让对象跟随光标:
int mx =(int) MouseInfo.getPointerInfo().getLocation().getX()-50;
Player.setX(mx);
在我的打勾方法中。但是,这个 returns 光标在屏幕上的位置,我怎样才能使它相对于 JFrame 本身呢?有没有办法读取 canvas 中左上角的位置,这样我就可以添加一个偏移量?
创建一个鼠标侦听器,并从那里获取坐标:
public class SimpleFrame extends JFrame {
public static void main(String[] args) {
SimpleFrame frame = new SimpleFrame();
frame.setSize(new Dimension(200, 300));
frame.setLocation(new Point(500, 600));
frame.setVisible(true);
frame.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
System.out.println(e.getX() + " / " + e.getY());
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
});
}
}
当您对此进行测试时,您可能会意识到您想要相对于其他对象(例如应用程序的主面板)的坐标。然后为该组件创建鼠标侦听器:
SimpleFrame frame = new SimpleFrame();
JPanel mainPanel = new JPanel();
frame.add(mainPanel, ...);
mainPanel.addMouseListener(...
这样做比从 JFrame 的 mouseListener 获得的坐标开始减去常量要好得多,因为那些 "constants" 会根据 OS 等而有所不同
并且如果您希望在用户移动鼠标时触发事件,而不仅仅是 he/she 单击它时,请使用此:
frame.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {
System.out.println(e.getX() + " / " + e.getY());
}
@Override
public void mouseDragged(MouseEvent e) {
});
尝试使用以下方法让对象跟随光标:
int mx =(int) MouseInfo.getPointerInfo().getLocation().getX()-50;
Player.setX(mx);
在我的打勾方法中。但是,这个 returns 光标在屏幕上的位置,我怎样才能使它相对于 JFrame 本身呢?有没有办法读取 canvas 中左上角的位置,这样我就可以添加一个偏移量?
创建一个鼠标侦听器,并从那里获取坐标:
public class SimpleFrame extends JFrame {
public static void main(String[] args) {
SimpleFrame frame = new SimpleFrame();
frame.setSize(new Dimension(200, 300));
frame.setLocation(new Point(500, 600));
frame.setVisible(true);
frame.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
System.out.println(e.getX() + " / " + e.getY());
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
});
}
}
当您对此进行测试时,您可能会意识到您想要相对于其他对象(例如应用程序的主面板)的坐标。然后为该组件创建鼠标侦听器:
SimpleFrame frame = new SimpleFrame();
JPanel mainPanel = new JPanel();
frame.add(mainPanel, ...);
mainPanel.addMouseListener(...
这样做比从 JFrame 的 mouseListener 获得的坐标开始减去常量要好得多,因为那些 "constants" 会根据 OS 等而有所不同
并且如果您希望在用户移动鼠标时触发事件,而不仅仅是 he/she 单击它时,请使用此:
frame.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {
System.out.println(e.getX() + " / " + e.getY());
}
@Override
public void mouseDragged(MouseEvent e) {
});