簡體   English   中英

根據語言創建jcombobox表單枚舉

[英]create jcombobox form enum depending on language

我想根據枚舉值創建一個jcombobox,該枚舉值具有不同的字符串,具體取決於語言環境。
現在我有:

     JComboBox roleBox = new JComboBox();
    roleBox.setModel(new DefaultComboBoxModel(UserEnum.values()));

當我使用UserEnum.values()時,我只是從枚舉中獲取String值。 那么如何從屬性文件中獲取字符串值?
我的枚舉:

public enum UserEnum {
    PATIENT("patientE"),
    DOCTOR("doctorE"),
    ADMIN("adminE");

    private String userEnum;

    UserEnum(String userEnum) {
        this.userEnum = userEnum;
    }

    @Override
    public String toString() {
        return this.userEnum;
    }

    public String getString(Locale locale) {
        ResourceBundle resourceBundle =ResourceBundle.getBundle("i18n.Enums", locale);
        return resourceBundle.getString(userEnum);}

}

不幸的是我不能使用UserEnum.values()。getString:/
非常感謝

您必須訪問枚舉的每個值並分別使用其getString方法以檢索字符串。 您不能在整個數組上調用方法。 但是,基於對另一個數組中的對象調用方法來創建對象數組是一項非常常見的任務。

首先,不要忘記您需要以某種方式檢索語言環境:

Locale locale = Locale.getDefault();

這樣做的傳統方式是:

UserEnum[] enumValues = UserEnum.values();
String[] localizedStrings = new String[enumValues.length];
for ( int i = 0; i < enumValues.length; i++ ) {
    localizedStrings[i] = enumValues[i].getString(locale);
}

現在,您可以將localizedStrings數組用於模型或其他任何模型。

Java 8的相同方法是:

String[] localizedStrings = Arrays.stream(UserEnum.values())
                                  .map(val->val.getString(locale))
                                  .toArray(String[]::new);
public enum UserEnum 
{
   PATIENT("patientE"),
   DOCTOR("doctorE"),
   ADMIN("adminE");

   private final String userEnum;

   private UserEnum (String userEnum) 
   {
       this.userEnum= userEnum;
   }

   public String getuserEnum() 
  {
       return userEnum;
  }

   public String getString(Locale locale) 
  {
      ResourceBundle resourceBundle =ResourceBundle.getBundle("i18n.Enums", locale);
      return resourceBundle.getString(UserEnum.PATIENT.getKey());
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM