Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JComboBox使用枚举变量值填充_Java_Swing_Enums_Jcombobox - Fatal编程技术网

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());
返回渲染器组件;
}
});

这样就可以了。

我现在有事要做,但我会稍后仔细检查。谢谢:)你能解释一下原因吗?