JComboBox中Enum的人类可读值



是否有一种方法从枚举字段中提取信息并在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);

但是,组合框显示Enum值的名称(AF, ZW等)。有没有办法使它显示displayName代替?我曾认为重写toString方法可能会解决这个问题,但这并没有什么不同。虽然这看起来很简单(和常见),但我还没有找到任何关于在Java中这样做的东西(我确实找到了如何在c#中做到这一点的答案……可惜我没有用c#)。

提前感谢!

你的问题和你的代码不匹配。JComboBox应该显示国家的displayName,因为那是你的enum的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;
   }
}

相关内容

  • 没有找到相关文章

最新更新