6

我有 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 触发错误“需要常量字符串表达式”,这是什么问题?

谢谢!

4

1 回答 1

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");
}

…</p>

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

…</p>

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

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

于 2013-09-05T10:08:29.743 回答