当前位置: 首页 > 知识库问答 >
问题:

将鼠标事件处理程序添加到 javafx 中的菜单

谭光辉
2023-03-14

我是javafx新手,目前正在做菜单,menuitems。我希望覆盖显示上下文菜单的默认事件,即使菜单没有被按下,但鼠标悬停在它上面,而相邻菜单的上下文菜单显示时,当前仍会显示。这发生在每个应用程序中,因为它非常方便。但由于某种原因,我不需要它。我试图捕获菜单上的鼠标事件,这样我就可以相应地工作,但什么也没发生。

menu.addEventHandler(MouseEvent.ANY, event -> {
            System.out.println("Mouse event occured");
            });

这里菜单是我想要添加此行为的菜单。

共有1个答案

经福
2023-03-14

确实,人们无法直接将鼠标事件添加到javafx中的菜单中,但是我设法找到了一个解决方法。现在,解决方法涉及菜单栏(位于其上),它可以捕获鼠标事件。因此,在鼠标事件的菜单栏上添加事件过滤器,

    // variable to store the mouse-event-type 
       private MouseEvent mouseEventType

    // for registering mouse pressed event;
    // addEventFilter since it is called during the capturing phase
      mainMenu.addEventFilter(MouseEvent.ANY, mouseEvent -> {
      mouseEventType = mouseEvent;
    });

然后处理菜单中的事件。setOnShown做到了。

   // handle the mouse-event like this
      menu.setOnShown( event -> {
             if(mouseEventType.getEventType().equals(MouseEvent.MOUSE_PRESSED)){
                 //TODO something
             }else{
                 //TODO something 
             }
            });

这里发生的是,mouseEventType被初始化为<code>mouseeven。单击菜单时,鼠标按下,立即调用setOnShown,默认操作为显示包含菜单项的上下文菜单。现在相应地可以给出不同的逻辑。

 类似资料:
  • 问题内容: 我想使用获取ID为参数的处理程序来处理事件。 我可以通过JavaScript如下添加事件处理程序,并且可以正常运行: 但是在这种情况下,我无法将参数传递给。我试图打印的,但没有结果。 HTML属性根本不起作用,不调用处理程序。 问题答案: 您可以使用闭包来传递参数: 但是,我建议您使用更好的方法来访问框架(我只能假设您使用的是DOM0方式,即按其名称访问框架窗口-只是为了向后兼容而保留

  • 所以我有这个anchorpane,我希望为第二个鼠标键添加一个鼠标listner。我尝试了以下方法,但我一直得到一个错误,有人知道问题是什么吗? 为了记录在案,我也尝试过这样做: 绑定不匹配:MouseButton类型不能有效替代EventHandler类型的有界参数

  • 我正在开发一个小应用程序,在创建菜单栏时遇到了一个问题。这是我的开始方法: 我遇到的问题在代码的这一部分: 我试图从数组列表中创建子菜单的条目。这些数据从数据库中获取,并以数组列表的形式返回。除了pairNameMenu.getItems()之外,我没有找到其他方法来做菜单项。add(new MenuItem(item));在for循环中。 现在我想处理项目中的点击,但我不知道如何操作。我试过使用

  • 在Delphi 10.4.2 32位VCL应用程序中,我使用了来自GetIt PackageManager的SVGIconImageList库的组件。 虽然组件支持事件处理程序,但它不支持事件处理程序!例如,我可以通过双击对象检查器中的事件来添加事件处理程序,但是在运行时从未调用该事件处理程序: 组件在中声明为: 那么组件难道不应该从继承它的事件吗? 无论如何,如何在应用程序的代码中为添加工作的事

  • 我正在JavaFX 2.2中动态创建一个StocckedBarChart(见下面的代码片段)我想让每个条形图充当一个超链接,这样当悬停在它上面时它会发光,当单击它时它会打开一个详细信息屏幕,其中包含有关用于绘制图表中相关条形图的源数据的更多信息。 我想做这样的事情:

  • 问题内容: 我想将一个事件处理程序添加到一个段落中,以供任何用户单击它时使用。例如,我有一个段落,当用户单击它时会显示一个警报,但是在HTML上不使用“ onclick”。 问题答案: 您可以添加事件侦听器。 嗯 像这样: 完整代码(已在Chrome&IE7中测试):