编辑-@Uri 正确指出这是注释的滥用;在注释中实际创建菜单数据是很愚蠢的。
它们对于绑定很好,但是我认为我会坚持使用它们将文本数据链接到方法(@Menu(“文件”)部分),因为它比反射到方法名更明确和灵活。另外,我在与它的搭配中学到了不少。我会在几天内将代码发布在答案中。
原帖
我还没用过这些新潮的注释,但它们看起来非常有趣。但我有些困扰,不知道语法该怎么用(或者更适当地说,该如何最好地使用它)。
在回答这个问题的代码中,我意识到我的方法已经相当过时了。
我过去经常解析字符串来定义我的方法结构,然后使用反射将其传递到类中,但我认为注释可以创建一个更好的菜单结构。
我想用类似下面这样的东西替换文件中的测试类:
@TopMenu("File,Edit")
@Menu(name="File","Save,Load,Print,Preview,Quit")
@Menu(name="Print","Preview,Print")
@Menu(name="Edit","Copy,Paste")
public class TestMenu {
@MenuItem ("Save")
public void save() {
System.out.println("saved");
}
@MenuItem ("Load")
public void load() {
System.out.println("loaded");
}
...
将整个类传递给一个方法,并通过该方法制造并返回绑定到类实例的JMenuBar,无需进一步输入。
第一个问题是我无法弄清如何传递字符串的“默认值”,它们都想要(属性=“值”)而不是只是(“值”),这可行吗?我可以不用它生活,但有点冗长。如果能够摆脱圆括号和/或引号,那就更好了,但我不抱有期望(我认为要这样做,我必须为每个菜单项定义一个单独的界面,这是不可接受的)。
其次,它不喜欢在单个类上使用多个@Menu标记。我可以通过解析单个字符串来解决这个问题,但我想知道是否有其他方法。
最重要的是,已经有一个这样做的库了吗?(如果没有人想出一个,我完成后会在这个帖子上发布代码,以防其他人有兴趣。)