如何在javafx中通过事件传递参数?

2024-04-29

我有以下示例,我想将参数“文本”与事件一起传递(当单击按钮“bla”时)。我该怎么做?

  EventHandler<MouseEvent> handler = new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            System.out.println(text);
        }
    };

    public void test(){
    //...

    Text text = "123567";

    bla.setOnMousePressed(handler);

    //...
    }

小问题:

当我确实有以下情况时:

   object1.setOnMouseClicked( event -> {
        System.out.println("HELLO");
    });

   object2.setOnMouseClicked( event -> {
        System.out.println("HELLO");
    });

两个对象,在它们上“setOnMouseClicked”时执行相同的操作。有什么语法可以合并它们吗?


您可以采用多种方法。 如果您要传递的参数是事件源或目标的一部分,您可以:

  • 使用 getSource 或 getTarget
  • 检查源或目标的类别
  • 将源/目标强制转换为该类
  • 通过该类的 getter 和 setter 访问参数

但是,如果参数与事件无关,则必须编写自定义事件:

class CustomEvent extends Event {

    private String parameter;

    public static final EventType<CustomEvent> CUSTOM = new EventType(ANY, "CUSTOM");
    public CustomEvent(String parameter) {
        super(CustomEvent.CUSTOM);
        this.parameter = parameter;
    }

    public String getParameter() {
        return this.parameter;
    }

}

现在要使用该事件,您首先必须触发它。

你可以这样做

objectThatWillFireThisEvent.fireEvent(new CustomEvent("Get this parameter guys!"));

现在您使用参数触发了一个事件。现在要设置 EventHandler,只需将其添加到将触发事件的对象的类中:

public final void setOnCustomEvent(
        EventHandler<? super CustomEvent> value) {
    this.addEventHandler(CustomEvent.CUSTOM, value);
}

现在您可以设置事件处理程序:

objectThatWillFireTheEvent.setOnCustomEvent( event -> {
    System.out.println(event.getParameter());
});

或者,如果需要,您可以使用在问题中发布的编写事件处理程序的方法(如果您不想使用 lambda)。

或者您可以只调用您编写的函数,该函数应该处理该参数:

objectThatWillFireTheEvent.setOnCustomEvent( event -> myFunction(event.getParameter) );

我希望我没有犯任何错别字。但如果有些问题不起作用或者您还有其他问题,请随时询问! :)

除此之外,我建议您使用谷歌铸造(如果您还不知道)以及更多有关自定义事件的信息(因为我的答案只是一个起点,如果您想对自定义事件做更多疯狂的事情,最好阅读就这一点:D)

编辑: 这就是你在评论中的意思吗?

因为注释会破坏布局和可读性

String text = "This is text!";
Button button = new Button();
object.setOnMouseClicked( event -> {
    function1(text);
    function2(button);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在javafx中通过事件传递参数? 的相关文章

随机推荐

  • 我在 signalr javascript 客户端中收到未定义的连接 ID

    根据我遇到的所有文档 我应该能够在连接启动后调用 connection hub id 这是我的代码 var handshake connection handshakeHub connection hub start done functi
  • 未捕获的类型错误:$(...).lightGallery 不是函数

    当我尝试单击该链接时 它会在浏览器控制台中显示 Uncaught TypeError lightGallery is not a function anonymous function index html 250dispatch jque
  • 如何进行快速但不准确的 InnoDB 行计数?

    PHPMyAdmin常见问题解答有话要说 http www phpmyadmin net documentation faq3 11关于 InnoDB 的大概行数 phpMyAdmin 使用快速方法来获取行数 并且此方法仅在 InnoDB
  • 从文件执行db语句

    我在我的应用程序中使用嵌入式 Apache derby 我有一个名为的 SQL 脚本创建的数据库 sql创建数据库中的所有表并用初始数据填充它 例如 SET SCHEMA APP CREATE TABLE study study id bi
  • 我被击败了 我只是想开发自己的画廊 但一开始我就失败了 在 a 中显示图像作为背景 div 我已经把我的代码颠倒了 搜索了网络 搜索了 stackoverflow 尽管我无法解决问题 这是我的代码 HTML PHP div class im
  • 有没有办法在 MATLAB 中执行函数内联?

    我可以使用什么语言功能或开箱即用的技巧来完成 MATLAB 中的函数内联 令人烦恼的是 Google 搜索 matlab 内联函数 http www google com search q matlab inline function揭示了
  • MKS/ PTC Integrity 源相当于 svn:ignore

    我们在工作中使用 MKS PTC Integrity 进行源代码控制 是否有与 subversion 中的 svn ignore 标志等效的东西 本质上 我想要一种方法来告诉 MKS 忽略文件夹 文件的更改 即我们的编译器输出文件夹等 您可
  • git 在子模块中添加远程

    gitmodule 文件有子模块 url 和路径的列表 与此类似 submodule vim bundle subRepo path vim bundle subRepo url https git com sub repo 并且在核心存储
  • AngularJS 服务 http 成功函数使用错误的“this”范围

    a 的成功函数 http put无权访问this内部调用的服务的范围 我需要在 PUT 请求的回调中更新服务的属性 这是我在服务中尝试做的事情的简化示例 var myApp angular module myApp function rou
  • Vue Cli 3 禁用代码分割 - 无法删除哈希文件

    我有一个vue config js设置效果很好 并取消了默认的代码分割 但它仍然输出一个 CSS 文件 其哈希值与具有好名称的 CSS 文件相同 我可以编写一个脚本来删除它 但我想知道是否有一种方法可以将文件设置为不输出带有哈希的CSS文件
  • 全局注册vue组件

    我有一个使用 vue cli 创建的 vue 应用程序 我正在创建一些组件 我想像这样使用它们
  • 为什么我无法使用 git push origin :branchname 删除远程 git 分支?

    当我尝试推送到远程 git 分支以删除它时git push origin branchname我收到以下错误消息 错误 无法推送到不合格的目的地 remotes origin branchname 目标引用规范既不匹配远程上的现有引用 也不
  • 读取Excel文件时的Pandas数据框和字符编码

    我正在阅读一个包含多个数值和分类数据的 Excel 文件 name string 列包含外语字符 当我尝试查看 name string 列的内容时 我得到了我想要的结果 但外来字符 在 Excel 电子表格中正确显示 以错误的编码显示 这是
  • 检查变量/键是否存在

    我有一位价值不同的客户 如果客户 是 则分数 10 如果客户 否 则得分 5 如果客户为空 则分数 0 对于第一个和第二个条件 我的 json 结构如下 json fields customer 1 0 3 self aaa value y
  • 如何使用带有 IF EXISTS 子查询的 SQL Select 语句?

    如何使用 IF EXISTS 语句 SQL Server 从子查询中选择布尔值 它应该是这样的 SELECT TABLE1 Id NewFiled IF EXISTS SELECT Id FROM TABLE2 WHERE TABLE2 I
  • 如何在rails 6 webpacker中添加jquery第三方插件

    我知道它很简单 但是随着 Rails 6 的更新 rails 6 中有新的语法用于管理由 webpacker 维护的 javascript 资源 application js require rails ujs start require
  • Excel VBA 模块在运行时未更新

    我有 2 个模块 主模块在运行时更新另一个模块 并在每次更新时运行该模块 问题是另一个模块在运行时似乎没有更新 它运行第一个模块 因为输出全部根据第一个输入 但运行完成后 我检查了其他模块 它已更新 但输出不符合更新的模块 我已经问过这个问
  • 使用插入符包通过controls = cforest_unbiased()运行cforest

    我想使用插入符包运行一个公正的 cforest 这可能吗 tc lt trainControl method cv number f index indexList savePredictions T classProbs TRUE sum
  • 如何识别 Antlr 语法中的行首?

    在我使用的语言中 某些关键字必须位于行的开头 这主要是因为语言中的字符串值可以跨越多行 并且字符串可以轻松包含这些关键字 我可以轻松处理旧的 yacc lex 语法实现 因为词法分析器使用普通的正则表达式来匹配文本模式 例如 descrip
  • 如何在javafx中通过事件传递参数?

    我有以下示例 我想将参数 文本 与事件一起传递 当单击按钮 bla 时 我该怎么做 EventHandler