Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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:使用一组枚举值作为SpinnerListModel_Java_Netbeans_Enums_Jspinner - Fatal编程技术网

Java:使用一组枚举值作为SpinnerListModel

Java:使用一组枚举值作为SpinnerListModel,java,netbeans,enums,jspinner,Java,Netbeans,Enums,Jspinner,如果有人问我这个问题,我会提前向你道歉,但我环顾四周,似乎找不到适合我情况的答案 一些背景:我自己为野蛮世界的RPG系统编写了一种“RPG角色生成器”。我正在使用NetBeans IDE为此应用程序设计UI。到目前为止,事情进展得相当顺利,但我现在遇到了一个我似乎无法理解的错误 我有一套属性:敏捷、力量、智慧、精神和活力。这些属性的值是模具类型,即d4、d6…d12。我创建了一个枚举来表示这些模具类型: public enum DieType { D4(4), D6(6), D8(8)

如果有人问我这个问题,我会提前向你道歉,但我环顾四周,似乎找不到适合我情况的答案

一些背景:我自己为野蛮世界的RPG系统编写了一种“RPG角色生成器”。我正在使用NetBeans IDE为此应用程序设计UI。到目前为止,事情进展得相当顺利,但我现在遇到了一个我似乎无法理解的错误

我有一套属性:敏捷、力量、智慧、精神和活力。这些属性的值是模具类型,即d4、d6…d12。我创建了一个枚举来表示这些模具类型:

public enum DieType {

    D4(4), D6(6), D8(8), D10(10), D12(12);

    private int face;

    private DieType(int face) {
        this.face = face;
    }

    public int getValue() {
        return face;
    }

    @Override
    public String toString() {
        String dieType = "d" + face;
        return dieType;
    }

}
在我的UI中,我创建了一系列JSpinner,以便能够调整每个属性的值。我想在微调器中使用这些模具类型,因此我为它们初始化了一个新的微调器列表模型:

agiSpin.setModel(new SpinnerListModel(DieType.values()));
到目前为止,一切都很好,我可以运行应用程序,窗口显示为每个微调器填充的枚举列表。(计划将模型初始化移动到一个可以插入每个微调器的变量,但现在我正在使用NetBeans生成的代码,所以我将分别创建每个实例)

当我试图基于在绘制GUI之前实例化的
SWCharacter
类的实例初始化每个微调器的值时,就会出现问题。对于上面的
agiSpin
spinner,我这样做:
agiSpin.setValue(swchar.getAgiAttr())以分配适当的值。变量
agiAttr
DieType
Enum的一个实例。当我运行程序时,我得到:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: invalid sequence element
at javax.swing.SpinnerListModel.setValue(SpinnerListModel.java:185)
at javax.swing.JSpinner.setValue(JSpinner.java:356)
…源于设置该值的尝试


我做错了什么?我是否需要以不同的方式创建列表模型?我尝试赋值的方式是否存在语法错误?

微调器通常用于用户输入的整数值或双数值。在本例中,我将使用一个组合框,其中每个值都已初始化。创建JComboBox的代码如下:

    JComboBox die = new JComboBox<DieType>(DieType.values());
JComboBox die=newjcombobox(DieType.values());

这应该行得通。在NetBeans中,它会自动创建组合框,因此您需要右键单击并单击“自定义代码”,然后进行上述必要的更改。

我的问题的答案几乎是我的一个derp。我没有正确初始化我希望角色属性具有的默认值。一旦我解决了这个问题,错误就不再发生,微调器中的值被正确分配和显示

对于那些可能对Java和/或GUI设计较新的人

就在引发异常的微调器初始化之前,我添加了一个
System.out.println()

agiSpin.setModel(new SpinnerListModel(DieType.values()));
//Check to see what value was being passed from the swchar Object
System.out.println(swchar.getAgiAttr()); 

//I wanted to see what the actual value was that was assigned to the Spinner when I initialized it with DieType.values()
System.out.println(agiSpin.getValue()); 
agiSpin.setValue(swchar.getAgiAttr());
我原以为我将变量
agiAttr
初始化为
DieType.D4
,但
System.out.println()
告诉了我真相:
getAgiAttr()
返回值
null
,因此,
agiSpin.getValue()
返回“D4”,因为这是通过实例化微调器分配的值,而不是我尝试的分配


就我而言,这是一个noob错误,但希望我的错误能帮助其他可能在这个问题上发生的人。感谢所有花时间阅读/回答此问题的人。

我考虑过组合框的想法,但认为最好使用微调器递增/递减功能。API给我的印象是SpinnerListModel设计用于处理的不仅仅是整数值/双数值……正如我所说的,列表工作得很好——只是在出现问题时尝试为其指定特定值的问题。