Java - Положение курсора относительно JFrame - PullRequest
0 голосов
/ 29 марта 2020

Попытка заставить объект следовать за курсором, используя:

int mx =(int) MouseInfo.getPointerInfo().getLocation().getX()-50;
Player.setX(mx);

в моем методе тиков. Тем не менее, это возвращает позицию курсора на экране, как я могу сделать это относительно самого JFrame? Есть ли способ прочитать положение верхней левой точки на холсте, чтобы я мог добавить смещение?

1 Ответ

2 голосов
/ 29 марта 2020

Создайте слушателя мыши и получите координаты оттуда:

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(...

Гораздо лучше сделать это таким образом, чем начинать вычитать константы из координат, которые вы получаете из mouseListener JFrame, так как эти "константы" будут отличаться в зависимости от ОС et c.

И если вы хотите, чтобы событие происходило всякий раз, когда пользователь перемещает мышь, а не только когда он / она щелкает по ней, используйте это:

    frame.addMouseMotionListener(new MouseMotionListener() {
        @Override
        public void mouseMoved(MouseEvent e) {
            System.out.println(e.getX() + " / " + e.getY());
        }
        @Override
        public void mouseDragged(MouseEvent e) {
    });
...