2013-09-05 2 views
6

ich habe 2 Java-Klassen:Java Fehler: Konstante String-Ausdruck benötigt

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

und

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

Das EditorPanelActionListener Feuer den Fehler "konstante String-Ausdruck benötigt", was das Problem?

Danke!

+8

Kurze Antwort: Die Fälle einer 'switch' Anweisung müssen Kompilierzeitkonstanten sein. Ihre Variable kann nur zur Laufzeit ausgewertet werden. – jlordo

+0

kann e.getActionCommand() enum anstelle eines Strings zurückgeben? – rajesh

Antwort

2

Sie sollten Programmlogik und Texte der Benutzeroberfläche nicht verwechseln. Der Befehl action ist eine Eigenschaft, die sich von dem angezeigten Text unterscheidet und nur dann auf den angezeigten Text verweist, wenn sie nicht explizit festgelegt wird.

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

Diese für Subklassen von AbstractButton arbeitet, die auch Menüpunkte enthält. Wenn Sie direkt mit Aktionsimplementierungen zu tun haben (bei denen ich bezweifle, dass Sie Ihre switch-Anweisung sehen), sollten Sie zwischen den Eigenschaften Action.NAME und Action.ACTION_COMMAND_KEY unterscheiden.