Java错误:需要常量字符串表达式

rai*_*all 6 java constants switch-statement

我有2个Java类:

public abstract class IconNames {
/**
 *
 */
public static final String ButtonFett = java.util.ResourceBundle.getBundle("recources/buttonproperties").getString("fett");
}
Run Code Online (Sandbox Code Playgroud)

public class EditorPanelActionListener implements ActionListener{
.
.
.
String buttonText = e.getActionCommand();
switch(buttonText)
    {
        case IconNames.ButtonFett: //Error: constant string expression required
            replace(XmlTags.BOLD);
            break;
    }
 .
 .
 .
 }
Run Code Online (Sandbox Code Playgroud)

EditorPanelActionListener触发错误"需要常量字符串表达式",问题是什么?

谢谢!

Hol*_*ger 2

您不应混淆程序逻辑和用户界面文本。操作命令是一个与显示的文本不同的属性,如果未明确设置,则仅默认为显示的文本。

\n\n
public abstract class IconNames {\n  public static final String ButtonFett_CMD = "DO-BOLD";\n  public static final String ButtonFett_TXT = java.util.ResourceBundle.getBundle("recources/buttonproperties").getString("fett");\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6

\n\n
JButton b=new JButton(IconNames.ButtonFett_TXT);\nb.setActionCommand(IconNames.ButtonFett_CMD);\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6

\n\n
String buttonText = e.getActionCommand();\nswitch(buttonText)\n{\n    case IconNames.ButtonFett_CMD: // user language independent\n        replace(XmlTags.BOLD);\n        break;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

AbstractButton这也适用于包含菜单项的子类。如果您直接处理 Action 实现(我怀疑是否看到您的 switch 语句),您应该区分 和Action.NAME属性Action.ACTION_COMMAND_KEY

\n