我有一个这样做的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值.
但是,我希望只在JComboBox中显示JComboBox值,而不是每次使用StudyGrade枚举时。
我将如何更改代码,因此每当我使用以下内容时:
System.out.println(StudyGrade.HIGH);我得到的是HIGH而不是Universidad,但不是JComboBox
发布于 2017-03-04 23:31:22
我正在重写toString()方法,因此我可以显示研究值,而不是枚举值。
我以前从未使用过枚举,但我假设您可以像添加到组合框中的任何自定义对象一样使用它,因此您应该能够使用自定义呈现器,从而可以控制组合框显示哪些数据。
有关更多信息和帮助类,请查看组合框与自定义渲染器。
发布于 2017-03-05 00:42:43
你想要延长一个枚举,但那是不可能的。这意味着你的要求出了问题。
呈现是在UI组件中完成的,处理数据表示不是enum的职责。您应该让UI组件按照您想要的方式呈现enum,而不是试图让enum了解它的使用位置。既然你是个挥棒狂,你应该知道怎么做,就像这样:
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;
}
});那样就行了。
发布于 2017-03-04 23:48:40
您可以将toString覆盖移除为枚举的默认toString是返回enum元素的名称。。
您可以使用一个简单的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上做的一个例子
https://stackoverflow.com/questions/42602405
复制相似问题