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

时间:2013-09-05 09:31:55

标签: java switch-statement constants

我有2个Java类:

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

...

JButton b=new JButton(IconNames.ButtonFett_TXT);
b.setActionCommand(IconNames.ButtonFett_CMD);

...

String buttonText = e.getActionCommand();
switch(buttonText)
{
    case IconNames.ButtonFett_CMD: // user language independent
        replace(XmlTags.BOLD);
        break;
}

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