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

在JavaFX中切换菜单项

马星阑
2023-03-14

我已经创建了一个类,它扩展了JavaFX的MenuBar,为我的应用程序创建了菜单栏。

默认情况下,我不会禁用专门的操作,比如打开/保存文件和运行模拟(它们确实是禁用的)。当用户运行应用程序时,他们可以在菜单文件中选择一个项目

我计划通过让每个组件给出它切换到的项目的列表来做到这一点,然后在创建组件时激活适当的项目。

但是,我不能从函数内部访问菜单列表(我尝试用< code>this.getMenus()来访问,但是从函数内部只能识别< code>this.getClass())。

有人知道我为什么不能调用getMenus(),以及我如何访问它吗?或者,如果您对如何切换这些菜单项有更好的想法,我很想听听。我认为这不是一个好办法,但这是我们想出的最好的主意。

private void fileNew()
{
    Menu fileNew = new Menu("New");
    menuFile.getItems().add(fileNew);

    for(String k: CLHM.keySet())
    {
        CComponent comp = CLHM.get(k);
        if(comp.supportedFeatures().contains((new SupportsNew())))
        {
            MenuItem i = new MenuItem(comp.getName());
            fileNew.getItems().add(i);

            i.setOnAction(new EventHandler<ActionEvent>()
            {
                @Override
                public void handle(ActionEvent event)
                {
                    CComponent ctemp = CLHM.get(i.getText());

                    ArrayList<String> menuItems = (ArrayList) ctemp.getMenuItems();
                    for (String s : menuItems)
                    {
                        Scanner scanner = new Scanner(s).useDelimiter("\\s>\\s");
                        String menu = scanner.next();
                        //Menu temp = this.getMenus();
                        /*
                         Here the program will parse the string of the 
                         Menu path (e.g. File>Open) and activate the
                         relevant item, if it exists.
                         */


                    }

                    borderPane.setCenter((Node) ctemp);
                }
            });
        }
    }

}

共有1个答案

翟曦
2023-03-14

当您在匿名类中使用this时,它实际上是指匿名类实例。因此,在您的例子中,这个EventHandler的一个实例,这就是为什么可以调用的方法如此之少的原因(因为它是一种接口类型)。

你正在寻找的是你的扩展菜单吧.this.getMenus().这将告诉编译器您正在寻找封闭的实例。或者,您可以简单地删除关键字(即获取Menus())。这样做将允许您使用/调用匿名类及其封闭类的任何可访问成员。

顺便提一下,如果用lambda表达式替换该匿名类,那么this将意味着YourExtendedMenuBar。无法访问lambda表达式表示的类的任何成员,至少不能直接访问。

附言:我不知道你的切换是怎么回事,所以我不能回答,直到我明白你的意思。

 类似资料:
  • 我实现了这个Bootstrap 3 Navbar折叠来改变Navbar折叠,但我有一个问题,在nav上的切换。 我为最小宽度:992px放入这个,使我的菜单悬停打开,而不是切换桌面大小。 我遇到的问题是,当我在sm大小中切换一个菜单项时。下拉菜单不会直接切换到下面。它会在右手边爆炸。我似乎找不到什么是css选择器,它直接放在下面,而其他项目“移开的方式” 这就是正在发生的事情 我要这个是SM号的

  • 我有一个下拉菜单,使用jQuery在点击时切换类。所以当我单击时,它的父级 变为活动的,从而使用CSS显示它的子菜单。我的问题是,这里的的目的是要删除任何已经打开的子菜单中的类。 问题是当我再次单击时,它并没有关闭当前子菜单,即它似乎没有切换,只是在添加类。 这是CSS。

  • 本文向大家介绍vue实现菜单切换功能,包括了vue实现菜单切换功能的使用技巧和注意事项,需要的朋友参考一下 vue实现菜单切换,点击菜单导航切换不同的内容以及为当前点击的选项添加样式,或者组件。 method里:  css: html代码: js代码: methods: css代码: 总结 以上所述是小编给大家介绍的vue实现菜单切换功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及

  • 主要内容:创建菜单和菜单项,指定菜单项,菜单事件处理程序,关键助记符,键组合,上下文菜单菜单是桌面应用程序选择选项的标准方法。 菜单和菜单项可以与选择选项快捷键组合,称为键盘快捷键。 创建菜单和菜单项 必须创建一个菜单栏对象来保存对象。 菜单对象可以包含和对象。菜单可以包含其他菜单作为子菜单。是对象内的子选项。 以下代码显示如何创建菜单栏并添加菜单和菜单项。 类是的子类,它有一个方法,它能够添加诸如其他和实例的子元素。 上面的代码生成以下结果。 指定菜单项 要将选中的选项或单选按钮添

  • 我看了很多页,试图找出如何切换场景,但都没有成功。 我有一个计算器,我的目标是选择一个菜单选项来更改计算器(即:基础和科学)。现在我只是在测试,所以这里是我到目前为止与这个问题相关的代码(我使用的是场景生成器): 编辑我已经尝试了很多东西。不管怎样,我总是得到这个NullPointerException。我有一种感觉,这可能与在场景生成器中设置某些内容有关,但我就是找不到答案 工作代码: 我使用下