2013-02-05 147 views
2

我有一个JMenuItem绑定到一个Action,我可以使用item.getAction()。动作名称在构建动作时被设置,例如,使用匿名new AbstractAction(String text, ...)。文本字段根据ResourceBundle和本地化信息设置。现在,如果我想更改本地化,我想更改Action.NAME字段,以便显示正确的本地化名称。我只能得到这个名字,例如使用item.getAction().NAME但不能更改字段,因为它是最终的。更改AbstractAction名称

我该如何改变它的名字?

+0

请为什么'cbut改变不了场,因为它是final.'c name属性,无法创建本地变量 – mKorbel

+1

'行动#NAME'是由所用的关键'Action'来存储其他组件可以用作显示值的值(通过使用'Action#getValue(Action.NAME)')。您可以使用操作的“putValue”来更改名称,使用“Action.NAME”作为键,文本作为要使用的名称。仔细看看[使用操作](http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html) – MadProgrammer

回答

9

最终字段实际上是动作名称属性的关键。更改使用putValue()

action.putValue(Action.NAME, newName); 
+0

这一切起初可能会让人感到困惑!谢谢。 – remi

+0

action.getValue(Action.NAME)是否正常返回null,而名称不为null?实际名称由getActionCommand()给出。 – remi

+0

它取决于,如果子类使用指定名称的构造函数,则它不应该为null。但是一个子类也可能重写'getValue()'和'putValue()',所以不能保证。 – bowmore