2013-09-05 6 views
6

у меня есть 2 Java-классы: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 огонь ошибка "константа строка требуемого", Что проблема?

Спасибо!

+8

Короткий ответ: Случаи оператора 'switch' должны быть константами времени компиляции. Ваша переменная может быть оценена только во время выполнения. – jlordo

+0

может e.getActionCommand() возвращать перечисление вместо строки? – rajesh

ответ

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.NAME и Action.ACTION_COMMAND_KEY.

Смежные вопросы