JavaFX中如何获取鼠标位置?

2024-05-08

我是java(fx)的初学者。
如何在 JavaFX 中获取鼠标在 x 和 y 中的位置?我尝试使用 AWTMouseInfo(也导入了它),但它不起作用。我还在 Ensembles 中看到了它的代码(在“高级阶段”拖动球窗口,这就是我需要做的,拖动我未装饰的 JavaFX 阶段),但它也不起作用。我正在将 FXML 与控制器一起使用,我想这是主要问题。我应该切换回单文件简单 JavaFX 吗?我知道 FXML 更适合布局 UI,但我无法让许多此类代码正常工作。或者我的控制器是否需要其他类型的代码?请尽可能提供正确的代码和注释。
如果您需要检查我的一些代码,请随时询问。


你的问题中有几个问题——我会一次解决一个问题。

如何在 JavaFX 中获取鼠标在 x 和 y 中的位置?

将鼠标事件处理程序添加到要跟踪鼠标位置的相应 JavaFX 组件。JavaFX 鼠标事件将报告多种不同类型的坐标。 x 和 y 坐标相对于正在监视其位置的节点的左上角。 sceneX 和 sceneY 坐标相对于场景的左上角 0,0 坐标。 screenX 和 screenY 坐标相对于当前屏幕的左上角 0,0 坐标。

这些坐标记录在鼠标事件 http://docs.oracle.com/javafx/2/api/javafx/scene/input/MouseEvent.html文档。在理解坐标系方面有额外的信息Node http://docs.oracle.com/javafx/2/api/javafx/scene/Node.html and Scene http://docs.oracle.com/javafx/2/api/javafx/scene/package-summary.html文档。

import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.stage.*;

public class MouseLocationReporter extends Application {
  private static final String OUTSIDE_TEXT = "Outside Label";

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

  @Override public void start(final Stage stage) {
    final Label reporter = new Label(OUTSIDE_TEXT);
    Label monitored = createMonitoredLabel(reporter);

    VBox layout = new VBox(10);
    layout.setStyle("-fx-background-color: cornsilk; -fx-padding: 10px;");
    layout.getChildren().setAll(
      monitored,
      reporter
    );
    layout.setPrefWidth(500);

    stage.setScene(
      new Scene(layout)
    );

    stage.show();
  }

  private Label createMonitoredLabel(final Label reporter) {
    final Label monitored = new Label("Mouse Location Monitor");

    monitored.setStyle("-fx-background-color: forestgreen; -fx-text-fill: white; -fx-font-size: 20px;");

    monitored.setOnMouseMoved(new EventHandler<MouseEvent>() {
      @Override public void handle(MouseEvent event) {
        String msg =
          "(x: "       + event.getX()      + ", y: "       + event.getY()       + ") -- " +
          "(sceneX: "  + event.getSceneX() + ", sceneY: "  + event.getSceneY()  + ") -- " +
          "(screenX: " + event.getScreenX()+ ", screenY: " + event.getScreenY() + ")";

        reporter.setText(msg);
      }
    });

    monitored.setOnMouseExited(new EventHandler<MouseEvent>() {
      @Override public void handle(MouseEvent event) {
        reporter.setText(OUTSIDE_TEXT);
      }
    });

    return monitored;
  }
}

我尝试使用AWT的MouseInfo(也导入了它),但它不起作用。

不要这样做。混合不同的图形工具包(例如 Swing/AWT 和 JavaFX)是一个高级主题。一般来说,如果您正在编写 JavaFX 应用程序,请避免从java.awt命名空间和javax.swing命名空间。仅当您有一个大型的现有基于 Swing 的应用程序或框架且需要与 JavaFX 应用程序进行互操作时,您才真正需要使用它们。在这种情况下,你就不存在这种情况。

我还在 Ensembles 中看到了它的代码(在“高级阶段”拖动球窗口,这就是我需要做的,拖动我未装饰的 JavaFX 阶段),但它也不起作用。

我尝试了 Ensemble Advanced Stage 示例,拖动该舞台对我来说很有效。

在 JavaFX 中拖动未装饰舞台的另一个示例是在答案中如何使用 JavaFX 2 绘制时钟? https://stackoverflow.com/questions/10541738/how-to-draw-a-clock-with-javafx-2其中有相关示例代码 https://gist.github.com/jewelsea/3388637。用于使时钟样本的未装饰阶段可拖动的方法是:

/** makes a stage draggable using a given node */
public static void makeDraggable(final Stage stage, final Node byNode) {
  final Delta dragDelta = new Delta();
  byNode.setOnMousePressed(new EventHandler<MouseEvent>() {
    @Override public void handle(MouseEvent mouseEvent) {
      // record a delta distance for the drag and drop operation.
      dragDelta.x = stage.getX() - mouseEvent.getScreenX();
      dragDelta.y = stage.getY() - mouseEvent.getScreenY();
      byNode.setCursor(Cursor.MOVE);
    }
  });
  byNode.setOnMouseReleased(new EventHandler<MouseEvent>() {
    @Override public void handle(MouseEvent mouseEvent) {
      byNode.setCursor(Cursor.HAND);
    }
  });
  byNode.setOnMouseDragged(new EventHandler<MouseEvent>() {
    @Override public void handle(MouseEvent mouseEvent) {
      stage.setX(mouseEvent.getScreenX() + dragDelta.x);
      stage.setY(mouseEvent.getScreenY() + dragDelta.y);
    }
  });
  byNode.setOnMouseEntered(new EventHandler<MouseEvent>() {
    @Override public void handle(MouseEvent mouseEvent) {
      if (!mouseEvent.isPrimaryButtonDown()) {
        byNode.setCursor(Cursor.HAND);
      }
    }
  });
  byNode.setOnMouseExited(new EventHandler<MouseEvent>() {
    @Override public void handle(MouseEvent mouseEvent) {
      if (!mouseEvent.isPrimaryButtonDown()) {
        byNode.setCursor(Cursor.DEFAULT);
      }
    }
  });
}

我正在将 FXML 与控制器一起使用,我想这是主要问题。我应该切换回单文件简单 JavaFX 吗?我知道 FXML 更适合布局 UI,但我无法让许多此类代码正常工作。

您的主要问题可能是缺乏对底层 JavaFX API 的理解和熟悉,而不是使用 FXML。然而,fxml 带来的额外复杂性以及网络上较轻的文档和示例可能会给您带来困难。如果使用 FXML 使您难以理解如何使某些 JavaFX 函数发挥作用,我建议暂时停止使用 FXML。使用 Java API 手动编写逻辑并参考Oracle JavaFX 教程 http://docs.oracle.com/javafx/集成示例代码 http://www.oracle.com/technetwork/java/javafx/samples/index.html当你遇到对你来说困难的事情时。

一旦您习惯了直接使用 JavaFX API 进行编码,就可以切换回使用 FXML 来处理包含许多 GUI 元素的大型项目。 FXML 元素和属性本身几乎完全基于标准 JavaFX API 的反映而构建。因此,如果您了解核心 JavaFX API,您也就了解了有关 FXML 的几乎所有内容。

请不要对此答案发表后续评论(因为这个答案已经足够长了)。如果您有新问题,请创建一个新问题(每个问题一个问题)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX中如何获取鼠标位置? 的相关文章

  • 如何创建自定义 Powershell 运算符?

    是否可以在 Powershell 中创建自定义运算符 而且 我该怎么做呢 我搜索过谷歌 但没有任何结果 我特指一个中缀运算符 示例列表 包含 元素 我已经创建了 cmdlet 使用 Powershell 和 C 模块等 所以我只需要大概的内
  • 开始拖动另一个元素

    是否可以用另一个元素开始拖动 例如 http jsbin com igohod edit preview http jsbin com igohod edit preview 我想开始拖动 ct当我点击 icon 尤其 icon不是后裔 c
  • 绘制自定义 Windows 控件时出现问题

    我正在尝试使用 Windows 中的 uxTheme 库绘制自己的自定义控件 但我无法弄清楚为什么我的控件看起来不像常规 Windows 控件 据说 使用我正在使用的相同主题 上图显示了标准的 Windows ComboBox 顶部 和使用
  • 除了在 Unity3D 中使用“Assets/Gizmos”之外,如何拥有自定义脚本图标

    我知道这个问题可能被问过很多次了 但它经常被回答错误 我想要的是 Use a custom icon for specific components scripts in the Inspector e g Figure 2 and Fig
  • 按日期对图表中的 X 轴进行排序 - JavaFX

    如何按日期对折线图 X 轴进行排序 现在我的折线图看起来像这样 我试图剪切日期并将其转换为 int 但现在我不知道该怎么办 datesToCompare addAll LastHoursAndDates keySet dates in St
  • 如何测试包含自定义表单控件的组件?

    我有一个这样的组件 Component selector app custom form control templateUrl
  • JavaFX使节点覆盖父节点边框颜色

    我有一个如下所示的节点 仅使用 css 我希望标签覆盖其父边框颜色 因此标签下方的边框颜色部分变得不可见 我用来制作这个边框的CSS代码 fx border color black fx border width 3 fx border r
  • 删除 JFX 中选项卡后面的灰色背景

    So is there any way to remove the gray area behind the tab s 我尝试过用 CSS 来做到这一点 但没有找到方法 要设置 tabpane 标题的背景颜色 请在 CSS 文件中写入 t
  • JavaFX ReadOnlyListProperty 不是只读的?

    这段代码抛出 UnsupportedOperationException 正如我所期望的那样 因为它是只读的 ListProperty
  • JavaFX - 为什么多次将节点添加到窗格或不同的窗格会导致错误?

    我现在正在学习基本的 JavaFX 我不明白我正在阅读的书中的这一说法 不 诸如文本字段之类的节点只能添加到一个窗格中一次 将节点添加到多次窗格或不同的窗格将导致运行时错误 我可以从书中提供的UML图看出它是一个组合 但我不明白为什么 库类
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • ASP.NET C# 中的自定义控件

    我创建了一个简单的自定义控件 它仅继承自Literal控件 并且还没有任何扩展 代码为空 命名空间 CustomControls 类名 文字 System Web UI WebControls Literal 接下来我要做的就是在aspx页
  • 我可以定义自定义字符类简写吗?

    Java 提供了一些有用的字符类 例如 d and w 我可以定义自己的角色类别吗 例如 能够为字符类定义简写 例如 A Za z 我可以定义自己的角色类别吗 不 你不能 就个人而言 当我有一个 稍微 复杂的正则表达式时 我将正则表达式分解
  • 如何从具有重复条目的过滤列表中删除特定索引?

    我有一个TableView由一个支持SortedList包裹一个FilteredList包裹一个ObservableList 过滤列表中的项目可以重复 也就是说 有可能是这样的情况list get 5 list get 10 用户可以选择行
  • Hibernate + SQLite 不创建数据库

    这是我的问题 我有一个使用 JavaFX Hibernate SQLite 的桌面应用程序 这是我的模型 Entity Table name usuario public class Usuario implements AbstractM
  • javafx组合框下拉菜单从屏幕边缘跳出

    我有最新版本的 java 8 40 和 javaFX 我有一个包含 10 个项目的复选框 我编译并运行该程序 如果我将程序窗口移至监视器屏幕的底部 下拉列表将从监视器屏幕中消失 无法将项目点击出屏幕 相反 如果我尝试使用场景生成器 2 0
  • 在 JavaFX 中拖动未装饰的舞台

    我希望将舞台设置为 未装饰 使其可拖动且可最小化 问题是我找不到这样做的方法 因为我遇到的示例是通过插入到主方法中的方法来实现的 我想通过控制器类中声明的方法来完成此操作 就像我如何使用下面的 WindowClose 方法来完成此操作 这是
  • PhpStorm IDE:Ubuntu 18 LTS 中光标卡在文本选择(突出显示)模式

    我正在使用 PhpStorm 来处理 Laravel 项目 但是 鼠标卡在文本突出显示模式下并且右键单击在 IDE 上不起作用 关闭IDE并重新启动并不能解决问题 我试图在网上寻找答案但没有成功 对于那些像我一样苦苦挣扎的人 我有一个解决方
  • 如何更改 UIActivityIndi​​catorView 以设置自定义图像?

    好吧 我正在寻找一种方法来更改我的微调器图像并使用自定义图像 有什么建议吗 我创建了一个UIActivityIndi catorView 的子类 https github com cncool CDActivityIndicatorView
  • 从 IntelliJ 运行 JavaFX 应用程序

    Versions openjdk版本 11 0 11 2021 04 20 OpenJDK 运行时环境 build 11 0 11 9 Ubuntu 0ubuntu2 20 10 OpenJDK 64 位服务器虚拟机 内部版本 11 0 1

随机推荐

  • 在 IOS9 中的 Cordova 应用程序上使用 JQuery/Javascript 的 window.history 问题

    我在 IOS9 测试版 下使用 Cordova 应用程序时遇到问题 我正在使用最新的 Cordova 和 JQuery 移动版本 window history 未更新 导致以下故障 window history go 1 无法返回页面 即使
  • 在 javascript/jquery 中获取图像的完整尺寸

    我在页面上有一个图像 该图像已调整大小以适合 div 例如 400x300 如何在 jQuery 中获取图像的完整尺寸 4000x3000 width 和 height 似乎只返回图像的当前大小 图像有naturalWidth and na
  • ViewStart 和 Layout - 有什么区别?

    我刚刚开始阅读 ASP NET MVC 4 这本书并遇到一个问题 在 Razor 部分作者说 如果我不在 View cshtml 文件中设置布局变量 它将默认搜索 ViewStart cshtml 但在另一部分中 他在 Views Shar
  • 如何显示 matplotlib 饼图中的实际值

    我有一个饼图 绘制从 CSV 文件中提取的值 当前显示值的比例 百分比显示为 autopct 1 1f 有没有办法显示每个切片的数据集中表示的实际值 Pie for Life Expectancy in Boroughs import pa
  • 覆盖 Rails ActiveRecord 销毁行为的最佳方法是什么?

    我有一个应用程序 我想在其中覆盖许多模型的销毁行为 用例是用户可能有删除特定记录的合法需要 但实际上从数据库中删除该行会破坏引用完整性 从而影响其他相关模型 例如 系统的用户可能想要删除不再与其有业务往来的客户 但需要维护与该客户的交易 看
  • 对 Parquet 批量格式使用压缩

    从 Apache Flink 1 15 版本开始 您可以使用压缩功能将多个文件合并为一个 https nightlies apache org flink flink docs master docs connectors datastre
  • 如何让 selenium 等待页面在 Selenium - Excel VBA 包装器中完全加载?

    Selenium Excel VBA 的包装器使用什么代码或函数 以便程序将等待页面完全加载然后执行其他命令 最新版本在执行所需操作之前隐式等待目标元素存在 例如 driver FindElementById Click 默认情况下会在抛出
  • 使用 R 中绘制的标准误差创建条形图

    我试图找到在 R 中创建条形图并显示标准错误的最佳方法 我看过其他文章 但我无法弄清楚与我自己的数据一起使用的代码 之前没有使用过 ggplot 这似乎是最常用的方法 而 barplot 不与数据框合作 我需要在两种情况下使用它 我为此创建
  • 如何舍入 Ballerina 中的浮点值?

    在 BallerinaLang 中 如何将浮点值四舍五入到指定的小数位数 Ballerina尚未提供浮动收尾的具体方法 但使用数学 圆 https ballerina io learn api docs ballerina math htm
  • Flutter中的pushReplacementNamed和popAndPushNamed有什么区别?

    The NavigatorState班级在Flutter navigator dart有 2 种具有类似行为的方法 有什么区别pushReplacementNamed and popAndPushNamed在颤振中 pushReplacem
  • HAProxy - 如果第一台机器返回 404,则从第二台机器提供 URL

    我遇到过这样的情况 网站的一部分 某些 URL 路径 由一台后端服务器提供服务 而所有其他 URL 则由 HAProxy 中的不同默认后端提供服务 现在 由于应用程序逻辑的编写方式 可以在两台物理服务器计算机中的任意一台上的同一路径上创建要
  • Javascript RegEx 替换所有不在 HTML 标签内的字符

    寻求一些帮助 我的正则表达式有点生锈 我试图用一个字符替换 javascript 中 HTML 标签之外的所有字符 例如 用破折号 替换这些字符 div class test Lorem Ipsum br Dolor Sit Amet di
  • 我如何将值从基本适配器传递到活动

    我正在一个应用程序中工作 我需要将值从基本适配器类传递到活动 这是片段代码 public View getView int position View convertView ViewGroup parent vi convertView
  • 如何查找 SQL Server 数据库中所有空间的使用情况

    我们有一个 SQL Server 数据库 根据 Microsoft SQL Server Management Studio 的数据 该数据库只有 6436Mb 中的 119Mb 可用 然而命令 EXEC sp msforeachtable
  • 在 Robot 框架中的测试套件中设置会话 cookie

    我的应用程序是一个 RESTful API 仅当会话 cookie 存在时才有效 不幸的是 我总是需要在一个网页登录获取 cookie 并传递会话cookie到 API 来建立会话 我能够找出解决方案来验证会话 cookie 并将其传递给
  • 如何从命令行运行scala文件?

    scala是否支持scala run xxx scala go语言支持这样运行 go my go 并且Python支持 python my py 但看来 scala xxx scala 仅进行语法检查 未观察到任何输出或运行行为 那么有没有
  • 使用 NaN 计算 numpy 数组中的移动平均值

    我正在尝试计算包含 NaN 的大型 numpy 数组中的移动平均值 目前我正在使用 import numpy as np def moving average a n 5 ret np cumsum a dtype float ret n
  • 创建shell可执行全局节点模块

    我尝试创建节点模块 我成功了 我用了npm install g在代码目录中 它创建了这个模块文件夹 AppData Roaming npm node modules myfirstmodule 现在我想让一个文件作为命令可执行 例如 pm2
  • 您推荐使用哪些工具来分析 Rails 应用程序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找 Rails 的分析工具 我目前正在玩和测试 ruby prof 和 Railsbench 但我对使其工作所需的大量调整和修改
  • JavaFX中如何获取鼠标位置?

    我是java fx 的初学者 如何在 JavaFX 中获取鼠标在 x 和 y 中的位置 我尝试使用 AWTMouseInfo 也导入了它 但它不起作用 我还在 Ensembles 中看到了它的代码 在 高级阶段 拖动球窗口 这就是我需要做的