Как получить координаты курсора на 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);
}
}
Вы добавили MouseListener на панель? Опубликуйте свой 'SSCCE', демонстрирующий проблему, когда вы это пробовали. – camickr
Да, я сделал. Я добавил код Panel к вопросу. – sparklyllama
Это не SSCCE. Поиск в Интернете или в Интернете, если вы не знаете, что такое SSCCE. – camickr