2013-09-05 16 views
6

gerekli:Java Hata: Sabit dize ifadesi i 2 Java sınıfları

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

ve

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

EditorPanelActionListener yangın "sabit dize ifadesi gerekli" hatası naber sorunu?

Teşekkürler!

+8

Kısa yanıt: 'switch' ifadesi durumları derleme zamanı sabitleri olmalıdır. Değişkeniniz sadece çalışma zamanında değerlendirilebilir. – jlordo

+0

, e.getActionCommand() bir String yerine enum döndürüyor mu? – rajesh

cevap

2

Program mantığı ve kullanıcı arabirimi metinlerini karıştırmamalısınız. Eylem komutu, gösterilen metinden farklı bir özelliktir ve açıkça belirtilmemişse, yalnızca gösterilen metne varsayılan değerdir.

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

... Bu durum menü öğeleri içerir AbstractButton sınıfının alt çalışır

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

. Doğrudan Eylem uygulamalarıyla ilgileniyorsanız (anahtar ifadenizi görmekten şüphe duyduğum), Action.NAME ve Action.ACTION_COMMAND_KEY mülkleri arasında ayrım yapmanız gerekir.