我有JComboBox
我这样做,使用enum
作为其值:
JComboBox<StudyGrade> maxLevelOfStudiesCombo = new JComboBox<StudyGrade>(StudyGrade.values());
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;
}
}
正如您所看到的那样,我正在覆盖toString()
方法,因此我可以显示studies
个值而不是enum
个值...
但是,我希望仅在studies
中显示JComboBox
值,而不是每次使用StudyGrade
枚举时都显示。
我将如何更改代码,因此无论何时我使用类似的内容:
System.out.println(StudyGrade.HIGH);
我打印的是HIGH
而不是Universidad
,但不是JComboBox
?
答案 0 :(得分:1)
我正在覆盖toString()方法,因此我可以显示研究值而不是枚举值...
我之前从未使用过枚举,但我假设您可以像添加到组合框中的任何自定义对象一样使用它,因此您应该能够使用自定义渲染器,以便您可以控制组合框显示哪些数据。
查看Combo Box With Custom Renderer以获取更多信息和帮助类。
答案 1 :(得分:1)
你正在寻求扩展枚举,但这是不可能的。这意味着你的要求出了问题。
渲染是在UI组件中完成的,处理数据表示并不是enum的业务。您应该按照自己喜欢的方式使用UI组件渲染枚举,而不是尝试让枚举理解它的使用位置。既然你是一个摇摆狂热者,你应该知道如何做到这一点,如下:
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;
}
});
那将会那样做。
答案 2 :(得分:0)
您可以将toString覆盖删除为the default toString for an enum is to return the name of the enum element。
你可以只使用一个简单的for循环来遍历枚举中的值并将其添加到字符串数组中。然后,您需要将该数组作为JComboBox的参数传递,它应该是黄金。
它的代码看起来应该是这样的:
//get all study grades
StudyGrade[] temp = StudyGrade.values();
//create a string array of same length as the array
String[] str = new String[temp.length];
//append all the studies value to the string array
for(int i = 0; i< temp.length; i++){
str[i] = temp[i].getStudies();
System.out.println(temp[i]);//debug
}
System.out.println("---------------------");//debug
for(String s : str){//debug
System.out.println(s);//debug
}//debug
//pass it
JComboBox<StudyGrade> maxLevelOfStudiesCombo = new JComboBox<StudyGrade>(StudyGrade.values());
这是我在repl.it上做的一个例子