2013-02-05 143 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