JComboBox中Enum的人类可读值

时间:2014-03-23 03:54:28

标签: java swing enums jcombobox

有没有办法从枚举字段中提取信息并将其显示在JComboBox而不是名称中?如果我的问题含糊不清或不清楚,我会提前道歉。

这是我使用的枚举版本的缩略版:

 public enum Country {

    AF("af", "Afghanistan"),

    ...

    ZW("zw", "Zimbabwe");

    private String nameCode;

    private String displayName;

    private Country(String code, String name) {
        this.nameCode = code;
        this.displayName = name;
    }

    public String getNameCode() {
        return this.nameCode;
    }

    public String getDisplayName() {
        return this.displayName;
    }

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

}

我在以下JComboBox中使用它:

JComboBox<Country> boxCountry = new JComboBox<>();
boxCountry.setModel(new DefaultComboBoxModel<>(Country.values()));
inputPanel.add(boxCountry);

但是,组合框显示枚举值的名称(AF,ZW等)。有没有办法让它显示displayName?我原以为可能覆盖toString方法会解决它,但它没有任何区别。虽然这看起来简单(和常见),但我还没有找到任何关于在Java中做这件事的事情(我确实找到了如何在C#中做到这一点的答案......太糟糕了我和#39;我没有使用C#)。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题与您的代码不匹配。 JComboBox应该显示国家/地区的displayName,因为这是您的枚举toString()覆盖返回的内容。

事实上,当我测试它时,这就是我所看到的:

import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;

public class TestCombo {
   public static void main(String[] args) {
      JComboBox<Country> countryBox = new JComboBox<Country>(Country.values());
      JOptionPane.showMessageDialog(null, new JScrollPane(countryBox));
   }
}

enum Country {

   AF("af", "Afghanistan"),

   US("us", "United States"),

   ZW("zw", "Zimbabwe");

   private String nameCode;

   private String displayName;

   private Country(String code, String name) {
       this.nameCode = code;
       this.displayName = name;
   }

   public String getNameCode() {
       return this.nameCode;
   }

   public String getDisplayName() {
       return this.displayName;
   }

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

}