2013-09-05 32 views
6

tôi có các lớp học 2 Java:Java Lỗi: biểu hiện chuỗi liên tục đòi hỏi

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

Các EditorPanelActionListener lửa lỗi "biểu hiện chuỗi liên tục yêu cầu", whats vấn đề?

Cảm ơn!

+8

Câu trả lời ngắn: Các trường hợp câu lệnh 'switch' phải là hằng số thời gian biên dịch. Biến của bạn chỉ có thể được đánh giá khi chạy. – jlordo

+0

có thể e.getActionCommand() trả về enum thay vì một String không? – rajesh

Trả lời

2

Bạn không được trộn lẫn logic chương trình và văn bản giao diện người dùng. Lệnh hành động là thuộc tính khác với văn bản được hiển thị và chỉ mặc định cho văn bản được hiển thị nếu không được đặt rõ ràng.

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

này làm việc cho lớp con của AbstractButton trong đó bao gồm các mục menu là tốt. Nếu bạn đang xử lý trực tiếp với các triển khai Hành động (mà tôi nghi ngờ thấy câu lệnh chuyển đổi của bạn), bạn nên phân biệt giữa thuộc tính Action.NAMEAction.ACTION_COMMAND_KEY.

Các vấn đề liên quan