java - 获取光标坐标作为相对于 JPanel 的点

标签 java swing cursor location jpanel

如何获取JPanel上光标的坐标?我尝试过使用这个:

MouseInfo.getPointerInfo().getLocation();

但这会返回屏幕上的位置。我尝试使用 mouseMoved(MouseEvent m) 方法,然后从 m.getX() 和 m.getY() 获取坐标,但是该方法没有被调用。 (我正在使用MouseListener)。

这是我的面板类:

public class Panel extends JPanel implements Runnable, KeyListener, MouseListener {

// serial
private static final long serialVersionUID = -2066956445832373537L;

// dimensions
public static final int WIDTH = 800;
public static final int HEIGHT = 600;

// game loop
private Thread thread;
private boolean running;
private final int FPS = 30;
private final int TARGET_TIME = 1000 / FPS;

// drawing
private BufferedImage image;
private Graphics2D g;

// status handler
private StatusHandler statusHandler;

// constructor
public Panel() {
    setPreferredSize(new Dimension(WIDTH, HEIGHT));
    setFocusable(true);
    requestFocus();
}

public void addNotify() {
    super.addNotify();
    if(thread == null) {
        addKeyListener(this);
        addMouseListener(this);
        thread = new Thread(this);
        thread.start();
    }
}

public void run() {

    init();

    long start;
    long elapsed;
    long wait;

    // game loop
    while(running) {

        start = System.nanoTime();

        update();
        render();
        renderToScreen();

        elapsed = System.nanoTime() - start;

        wait = TARGET_TIME - elapsed / 1000000;
        if(wait < 0) wait = TARGET_TIME;

        try {
            Thread.sleep(wait);
        }
        catch(Exception e) {
            e.printStackTrace();
        }

    }

}

private void init() {
    running = true;
    image = new BufferedImage(WIDTH, HEIGHT, 1);
    g = (Graphics2D) image.getGraphics();
    statusHandler = new StatusHandler();
}

private void update() {
    statusHandler.update();
}

private void render() {
    statusHandler.render(g);
}

private void renderToScreen() {
    Graphics g2 = getGraphics();
    g2.drawImage(image, 0, 0, WIDTH, HEIGHT, null);
}

public void keyTyped(KeyEvent key) {}
public void keyPressed(KeyEvent key) {
    KeyInput.setKey(key.getKeyCode(), true);
}
public void keyReleased(KeyEvent key) {
    KeyInput.setKey(key.getKeyCode(), false);
}

public void mouseClicked(MouseEvent m) {}
public void mouseReleased(MouseEvent m) {
    MouseInput.setButton(m.getButton(), false);
    MouseInput.setMouseEvent(m);
}
public void mouseEntered(MouseEvent m) {}
public void mouseExited(MouseEvent m) {}
public void mousePressed(MouseEvent m) {
    MouseInput.setButton(m.getButton(), true);
    MouseInput.setMouseEvent(m);
}

}

最佳答案

mouseMoved 事件由 MouseMotionListener 处理。

关于java - 获取光标坐标作为相对于 JPanel 的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20309180/

相关文章:

java - 从游标返回错误值

java - 适应屏幕尺寸的Android按钮布局

java - 尝试使Java Swing应用程序可以远程显示(Linux)

java - 如何设置 JRadioButtons 的属性并将其应用于所有属性?

java - 如何将事件监听器与 "asking"结合起来进行事件?

oracle - Oracle Procedure error “declaration of cursor '“我们不完整或格式错误”?

由 c# zedgraph : how to use the cursor property?

java - 设置实例变量 public 并且不使用 setter 方法可能会破坏在 java 中使用我的类的协作者的代码?

java - MYSQL/JAVA - 如何对这样的数字进行排序?

java - 我的 KeyListener 无法读取按键输入