2013-12-01 3 views
0

Как получить координаты курсора на 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); 
} 

}

+0

Вы добавили MouseListener на панель? Опубликуйте свой 'SSCCE', демонстрирующий проблему, когда вы это пробовали. – camickr

+0

Да, я сделал. Я добавил код Panel к вопросу. – sparklyllama

+0

Это не SSCCE. Поиск в Интернете или в Интернете, если вы не знаете, что такое SSCCE. – camickr

ответ

3

mouseMoved событие обрабатывается MouseMotionListener.

+0

Да, я просто понял это. В любом случае, спасибо! – sparklyllama

Смежные вопросы