Java JComboBox使用枚举变量值填充
我有一个Java JComboBox使用枚举变量值填充,java,swing,enums,jcombobox,Java,Swing,Enums,Jcombobox,我有一个JComboBox,我是这样做的,它的值使用enum: JComboBox<StudyGrade> maxLevelOfStudiesCombo = new JComboBox<StudyGrade>(StudyGrade.values()); 如您所见,我正在重写toString()方法,因此我可以显示研究值,而不是枚举值 但是,我希望仅在JComboBox中显示研究值,而不是每次使用StudyGradeenum时 我将如何更改代码,因此每当我使用以下内容时:
JComboBox
,我是这样做的,它的值使用enum
:
JComboBox<StudyGrade> maxLevelOfStudiesCombo = new JComboBox<StudyGrade>(StudyGrade.values());
如您所见,我正在重写toString()
方法,因此我可以显示研究
值,而不是枚举
值
但是,我希望仅在JComboBox
中显示研究
值,而不是每次使用StudyGrade
enum时
我将如何更改代码,因此每当我使用以下内容时:
System.out.println(StudyGrade.HIGH);
我得到打印的是HIGH
而不是Universidad
,但不是JComboBox
我正在重写toString()方法,以便可以显示研究值而不是枚举值
我以前从未使用过枚举,但我假设您可以像添加到组合框的任何自定义对象一样使用它,因此您应该能够使用自定义渲染器,以便控制组合框显示的数据
查看更多信息和帮助器类。您只需删除toString覆盖即可 您可以有一个简单的for循环,它将遍历枚举中的值并将其添加到字符串数组中。然后,您需要将该数组作为JComboBox的参数传递,它应该是gold 它的代码应该有点像:
//获取所有学习成绩
StudyGrade[]温度=StudyGrade.values();
//创建与数组长度相同的字符串数组
字符串[]str=新字符串[临时长度];
//将所有研究值附加到字符串数组
对于(int i=0;i
下面是我在repl.it上做的一个例子
您希望扩展枚举,但这是不可能的。这意味着你的要求有问题 呈现是在UI组件中完成的,处理数据的呈现不是enum的职责。您应该让UI组件以您喜欢的方式呈现enum,而不是试图让enum了解它的使用位置。既然你是一个挥杆爱好者,你应该知道如何做到这一点,比如:
public enum StudyGrade {
ELEMENTARY ("Primaria"),
MIDDLE ("Secundaria"),
MIDDLE_HIGH ("Preparatoria"),
HIGH ("Universidad"),
MASTERS ("Maestría / Posgrado"),
DOCTORATE ("Doctorado"),
POST_DOCTORATE ("Post Doctorado");
private String studies;
private StudyGrade(String studies) {
this.studies = studies;
}
public String getStudies() {
return studies;
}
public void setStudies(String studies) {
this.studies = studies;
}
@Override
public String toString() {
return studies;
}
}
maxLevelOfStudiesCombo.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList<?> jList, Object o, int i, boolean b, boolean b1) {
Component rendererComponent = super.getListCellRendererComponent(jList, o, i, b, b1);
setText(o instanceof StudyGrade ? ((StudyGrade) o).getStudies() : o.toString());
return rendererComponent;
}
});
maxLevelOfStudiesCombo.setRenderer(新的DefaultListCellRenderer()){
@凌驾
公共组件getListCellRenderComponent(JList JList、对象o、int i、布尔b、布尔b1){
Component RenderComponent=super.getListCellRenderComponent(jList、o、i、b、b1);
setText(o StudyGrade的实例)((StudyGrade)o).getStudies():o.toString());
返回渲染器组件;
}
});
这样就可以了。我现在有事要做,但我会稍后仔细检查。谢谢:)你能解释一下原因吗?