📜  java 获取鼠标坐标 - Java (1)

📅  最后修改于: 2023-12-03 15:31:34.399000             🧑  作者: Mango

Java 获取鼠标坐标

在 Java 程序中,获取鼠标坐标是常见的需求。本文介绍下如何通过 Java 代码获取鼠标坐标。

AWT MouseEvent

在 Java 中,AWT 提供了 MouseEvent 类来处理鼠标事件。我们可以通过 MouseEvent 获取鼠标坐标。

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

public class MouseCoordinates implements MouseMotionListener {

   public static void main(String[] args) {
      Frame frame = new Frame("Mouse Coordinates");
      Label label = new Label();
      frame.add(label);
      frame.addMouseMotionListener(new MouseCoordinates(label));
      frame.setSize(300, 300);
      frame.setVisible(true);
   }

   private Label label;

   public MouseCoordinates(Label label) {
      this.label = label;
   }

   @Override
   public void mouseDragged(MouseEvent e) {
      printCoordinates(e);
   }

   @Override
   public void mouseMoved(MouseEvent e) {
      printCoordinates(e);
   }

   private void printCoordinates(MouseEvent e) {
      label.setText("X: " + e.getX() + " Y: " + e.getY());
   }
}

该示例代码创建了一个 Frame 窗口,并在窗口上添加一个 Label 组件,当鼠标移动或拖动时,就会更新 Label 的文本为当前鼠标坐标。

需要注意的是,为了获取鼠标坐标,我们需要添加鼠标移动监听器 MouseMotionListener,并实现 mouseMovedmouseDragged 方法,在方法中通过 MouseEvent 对象获取坐标信息。

Javafx MouseEvent

在 JavaFX 程序中,可以通过 MouseEventScene 对象获取鼠标坐标。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class MouseCoordinates extends Application {

   public static void main(String[] args) {
      launch(args);
   }

   @Override
   public void start(Stage primaryStage) {
      Label label = new Label();
      StackPane root = new StackPane(label);
      Scene scene = new Scene(root, 300, 300);
      scene.addEventFilter(MouseEvent.MOUSE_MOVED, e -> {
         double x = e.getX(); // 鼠标点击位置的 x 坐标
         double y = e.getY(); // 鼠标点击位置的 y 坐标
         label.setText("X: " + x + " Y: " + y);
      });
      primaryStage.setScene(scene);
      primaryStage.show();
   }
}

该示例代码创建了一个基本的 JavaFX 应用程序,并在场景 Scene 上添加 MouseEvent 监听器,通过 MouseEvent 对象获取鼠标坐标。

需要注意的是,这里的事件处理程序是使用匿名内部类实现的。在事件发生时,我们可以通过 MouseEvent 对象访问鼠标位置的 getX()getY() 方法,然后将坐标信息更新到 Label 组件上。

结论

通过以上示例,我们可以看到 Java 中获取鼠标坐标的两种方式:AWT 和 JavaFX。这两种方式都可以方便地访问鼠标坐标信息,并根据自己的需求更新 GUI 中的组件。