package sample;
import javafx.application.Application;
import javafx.geometry.Point2D;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;???
import javafx.scene.robot.Robot;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import java.awt.*;
import java.util.LinkedList;
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
/**
* 内部类,将每次鼠标的行为以及坐标记录下来
*/
class MyMouseEvent{
//鼠标行为
MouseButton mb;
//坐标
public Point2D point2D;
public MyMouseEvent(MouseButton mb, Point2D point2D) {
this.mb = mb;
this.point2D = point2D;
}
}
//创建面板
VBox pane = new VBox();
//对齐方式
pane.setAlignment(Pos.TOP_LEFT);
//robot关键对象
Robot robot = new Robot();
//记录鼠标行为
LinkedList<MyMouseEvent> list = new LinkedList<>();
//开始
Button beginb = new Button("开始");
beginb.setStyle("-fx-text-fill: red");
//结束
Button endb = new Button("结束");
endb.setStyle("-fx-text-fill: red");
pane.getChildren().addAll(beginb, endb);
//点击“开始”按钮时,鼠标行为储存进列表
beginb.setOnAction(e->{
pane.setOnMouseDragged(m->{
list.add(new MyMouseEvent(m.getButton(), new Point2D(m.getSceneX(), m.getSceneY())));
});
pane.setOnMousePressed(m->{
list.add(new MyMouseEvent(m.getButton(), new Point2D(m.getSceneX(), m.getSceneY())));
});
pane.setOnMouseReleased(m->{
list.add(new MyMouseEvent(m.getButton(), new Point2D(m.getSceneX(), m.getSceneY())));
});
});
//点击“结束”按钮时,鼠标行为储存进列表
endb.setOnAction(e->{
这是一个能够记录和输出鼠标行为的代码,我想在里面加入鼠标中键的滚动和按动,怎么改?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- Kwan的解忧杂货铺@新空间代码工作室 2024-04-06 18:59关注
晚上好🌙🌙🌙
本答案参考ChatGPT-3.5问题:如何在记录鼠标行为的代码中加入鼠标中键的滚动和按动?
解决方案:
- 针对鼠标中键的滚动
- 使用MouseEvent的getDeltaY()方法来获取鼠标滚动的距离,大于0表示向上滚动,小于0表示向下滚动。
- 通过判断getButton()返回的MouseButton是否为中键来确定是否为滚轮事件。
- 针对鼠标中键的按动
- 使用MouseButton.MIDDLE代表鼠标中键。
- 在MyMouseEvent类中添加一个静态变量MIDDLE,用于标识鼠标中键。
- 在MouseEvent的回调函数中判断getButton()返回的MouseButton是否为中键来确定是否为鼠标中键按动事件。
修改后的代码如下:
package sample;
import java.awt.Point; import java.util.LinkedList;
import javafx.application.Application; import javafx.geometry.Point2D; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.robot.Robot; import javafx.stage.Stage;
public class Main extends Application {
/** * 内部类,将每次鼠标的行为以及坐标记录下来 */ class MyMouseEvent { // 鼠标行为 MouseButton mb; // 坐标 public Point2D point2D; // MIDDLE代表鼠标中键 public static final MouseButton MIDDLE = MouseButton.MIDDLE; public MyMouseEvent(MouseButton mb, Point2D point2D) { this.mb = mb; this.point2D = point2D; } } @Override public void start(Stage stage) throws Exception { // 创建面板 VBox pane = new VBox(); // 对齐方式 pane.setAlignment(Pos.TOP_LEFT); // robot关键对象 Robot robot = new Robot(); // 记录鼠标行为 LinkedList<MyMouseEvent> list = new LinkedList<>(); // 开始 Button beginb = new Button("开始"); beginb.setStyle("-fx-text-fill: red"); // 结束 Button endb = new Button("结束"); endb.setStyle("-fx-text-fill: red"); pane.getChildren().addAll(beginb, endb); // 点击“开始”按钮时,鼠标行为储存进列表 beginb.setOnAction(e -> { pane.setOnMouseDragged(m -> { list.add(new MyMouseEvent(m.getButton(), new Point2D(m.getSceneX(), m.getSceneY()))); }); pane.setOnMousePressed(m -> { list.add(new MyMouseEvent(m.getButton(), new Point2D(m.getSceneX(), m.getSceneY()))); }); pane.setOnMouseReleased(m -> { list.add(new MyMouseEvent(m.getButton(), new Point2D(m.getSceneX(), m.getSceneY()))); }); // 针对鼠标中键的滚轮事件 pane.setOnScroll(s -> { // 判断是否为鼠标中键滚轮事件 if (s.getButton() == MyMouseEvent.MIDDLE) { double deltaY = s.getDeltaY(); System.out.println("滚轮事件:deltaY = " + deltaY); } }); }); // 点击“结束”按钮时,鼠标行为储存进列表 endb.setOnAction(e -> { for (MyMouseEvent m : list) { // 判断是否为鼠标中键按动事件 if (m.mb == MyMouseEvent.MIDDLE) { System.out.println("中键按动事件:(" + m.point2D.getX() + ", " + m.point2D.getY() + ")"); } else { System.out.println("鼠标" + m.mb.toString() + ":" + "(" + m.point2D.getX() + ", " + m.point2D.getY() + ")"); } } }); Scene scene = new Scene(pane, 500, 500); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); }
}
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 如何让企业微信机器人实现消息汇总整合
- ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
- ¥15 如何用Python爬取各高校教师公开的教育和工作经历
- ¥15 TLE9879QXA40 电机驱动
- ¥20 对于工程问题的非线性数学模型进行线性化
- ¥15 Mirare PLUS 进行密钥认证?(详解)
- ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
- ¥20 想用ollama做一个自己的AI数据库
- ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
- ¥15 请问怎么才能复现这样的图呀