我创建了一个扩展JavaFX的MenuBar的类,该类为我的应用程序创建了一个菜单栏。
默认情况下,我不会禁用(例如,打开/保存文件并运行模拟)等专门操作。当用户运行该应用程序时,他们可以在菜单“文件”>“新建”>中选择一个项目,然后根据他们选择的组件来选择适当的菜单选项。
我打算通过使每个组件列出要打开的项的列表,然后在创建组件时激活适当的项来做到这一点。
但是,我无法从功能内访问菜单列表(试图用this.getMenus()
来访问菜单列表,但是从功能内唯一能识别它的功能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);
}
});
}
}
}
答案 0 :(得分:0)
当您在匿名类中使用this
时,它实际上是指匿名类实例。因此,在您的情况下,this
是EventHandler
的实例,这就是为什么您可以调用的方法这么少的原因(因为它是接口类型)。
您要寻找的是YourExtendedMenuBar.this.getMenus()
。这将告诉编译器您正在寻找封闭实例。或者,您可以简单地删除this
关键字(即getMenus()
)。这样做将允许您使用/调用匿名类及其封闭类的任何可访问成员。
在旁注中,如果您用lambda表达式替换该匿名类,那么this
的意思是YourExtendedMenuBar
。至少不能直接访问lambda表达式表示的类的任何成员。
P.S。我不知道您的切换到底是什么,所以直到我弄清您的意思我才能回答。