Постоянное обновление текста JFrame

Я новичок в разработке java и решил создать простой проект java, который выводит координаты X и Y, где мышь находится внутри jframe. Я не уверен, как бы я использовал слушателя.

package main;

import java.awt.BorderLayout;
import java.awt.MouseInfo;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class Main {
public static void main(String[] args) {
jFrame();
}

public static void jFrame() {
    JFrame myFrame = new JFrame("Screen Location");
    myFrame.setVisible(true);
    myFrame.setBounds(0, 0, 300, 100);
    JLabel myText = new JLabel(""+ getTotal(),
        SwingConstants.CENTER);
    myFrame.getContentPane().add(myText, BorderLayout.CENTER);
}

private static String getTotal() {
    for (int i = 0; i < 1;) {
    int publicScreenValueX = MouseInfo.getPointerInfo().getLocation().x;
    int publicScreenValueY = MouseInfo.getPointerInfo().getLocation().y;
    String total = new String(publicScreenValueX + ", " + publicScreenValueY);
    return total;
    }
return null;
  }
}

Как сделать так, чтобы проект постоянно обновлял координаты? Может ли кто-то предоставить справку о том, как это сделать?

Обратите внимание, это без использования кнопки или без какого-либо ввода от пользователя, кроме перемещения мыши.

Вот изображение того, как это будет выглядеть:

Изображение текущей программы

За исключением того, что координаты всегда будут обновляться.

2 ответа

  1. В основном все, что вам нужно сделать, чтобы создать JFrame, который обрабатывает события мыши:

    1-Создайте класс, который расширяет JFrame и реализует MouseListener

    2 — @ Override mouseClicked, mouseEntered, mouseExited, mouseppressed, mouseReleased для мониторинга событий coresponding. Теперь каждый раз, когда происходит одно из этих событий, срабатывает соответствующая функция.
    Используйте MouseEvent.getX (), MouseEvent.getY () для получения координат окна, в котором происходит событие mouse.

    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    import javax.swing.JFrame;
    
    public class CreateJFrameWindowWithMouseEventHandling extends JFrame implements MouseListener {
    
        private static final long serialVersionUID = 1L;
    
        public CreateJFrameWindowWithMouseEventHandling() {
            setTitle("Simple Frame");
            addMouseListener(this);
        }
    
        @Override
        public void mouseClicked(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            JOptionPane.showMessageDialog(null, "Mouse Clicked at X: " + String.valueOf(x) + " - Y: " + String.valueOf(y));
        }
    
        @Override
        public void mouseEntered(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            System.out.println("Mouse Entered frame at X: " + x + " - Y: " + y);
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            System.out.println("Mouse Exited frame at X: " + x + " - Y: " + y);
        }
    
        @Override
        public void mousePressed(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            System.out.println("Mouse Pressed at X: " + x + " - Y: " + y);
        }
    
        @Override
        public void mouseReleased(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            System.out.println("Mouse Released at X: " + x + " - Y: " + y);
        }
    
        private static void createAndShowGUI() {
    
      //Create and set up the window.
    
      JFrame frame = new CreateJFrameWindowWithMouseEventHandling();
    
      //Display the window.
    
      frame.setVisible(true);
    
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        }
    
        public static void main(String[] args) {
    
      //Schedule a job for the event-dispatching thread:
    
      //creating and showing this application's GUI.
    
      javax.swing.SwingUtilities.invokeLater(new Runnable() {
    
    public void run() {
    
        createAndShowGUI(); 
    
    }
    
      });
        }
    
    }
    
  2. Я бы посоветовал создать новый класс, который наследует от JFrame и все такое, потому что это более объектно-ориентированный дружественный.
    Однако с помощью кода необходимо добавить a MouseMotionListenerв JFrame, реализовать все абстрактные методы и в этом методе mouseMovedизменить текст myTextметки;
    Замените метод ниже на тот, который у вас есть в настоящее время, и он должен работать.
    Обратите внимание, что, java.awt.event.MouseMotionListenerтолько собирается дать вам информацию о движении мыши в окне приложения. Для событий, которые происходят за пределами этого окна, может потребоваться проверить этот другой вопрос:
    Движение мыши Java в любом месте экрана

    public static void jFrame() {
        JFrame myFrame = new JFrame("Screen Location");
        myFrame.setLocationRelativeTo(null);
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // makes the application close when you close the JFrame
        myFrame.setVisible(true);
        myFrame.setBounds(0, 0, 300, 100);
        JLabel myText = new JLabel(""+ getTotal(), SwingConstants.CENTER);
        myFrame.getContentPane().add(myText, BorderLayout.CENTER);
        myFrame.addMouseMotionListener(new MouseMotionListener(){
            @Override
            public void mouseDragged(MouseEvent e) {
                // don't delete this method
                // all abstract methods must be overridden 
            }
    
            @Override
            public void mouseMoved(MouseEvent e) {
                myText.setText(getTotal());
            }
        });
    
    }