簡體   English   中英

Java:JComboBox將不接受enum.values()

[英]Java: JComboBox won't accept enum.values()

所以我正在一個練習程序中嘗試在jcombobox中使用枚舉。 我認為這對我的程序是個不錯的決定,因為組合框中的選項是常量,並且它們還具有為其分配的備用值(除了常量值外,還包含字符串名稱),因此我覺得枚舉是最好的方法去。

不幸的是,我無法使組合框接受我的枚舉常量的值的完整列表。 我在下面粘貼我的完整代碼。 我在這里做錯了什么?

public enum CurrencyTypes{

    USD ("US Dollars"),
    BPS ("British Pound Sterling"),
    E ("European Euros"),
    RR ("Russian Rubles"),
    JY ("Japanese Yen"),
    CY ("Chinese Yuan"),
    IR ("Indian Rupees"),
    NIS ("New Israeli Shekels");

    private String typeName;


    private CurrencyTypes(String typeName){
        this.typeName = typeName;
    }

    public String getTypeName(){
        return typeName;
    }

}

在下面的Driver類中,當我嘗試使用CurrencyTypes.values()中的值列表初始化currencyBox時,程序失敗。 它可以正常編譯,但是當我運行該程序時,我得到java.lang.ExceptionInInitializerError並崩潰。

public class AccountDriver{

    private String[] stringArray = new String[] { "", "test1", "test2", "test3" };
    private JComboBox<String> stringBox;
    private JComboBox<CurrencyTypes> currencyBox;
    private JLabel stringSelection;
    private String stringResult;
    private JLabel etSelection;
    private CurrencyTypes[] currencyArray;
    private ArrayList<CurrencyTypes> currencyArrayL;


    public AccountDriver(){


        JFrame testFrame = new JFrame();
        testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        stringBox = new JComboBox<String>(stringArray);
        stringBox.addItemListener(new StringBoxListener());


        stringSelection = new JLabel(stringResult);


        currencyBox = new JComboBox<CurrencyTypes>(CurrencyTypes.values());


        testFrame.setLayout(new GridLayout(2, 2));
        testFrame.add(stringBox);
        testFrame.add(stringSelection);
        testFrame.add(currencyBox);

        testFrame.setVisible(true);
        testFrame.pack();
    }

    public static void main(String[] args){
        new AccountDriver();
    }

    private class StringBoxListener implements ItemListener{
        public void itemStateChanged(ItemEvent e){
            stringResult = String.valueOf(stringBox.getSelectedItem());
            System.out.println(stringResult);
            stringSelection.setText(stringResult);
        }
    }

    private class CurrencyBoxListener implements ItemListener{
        public void itemStateChanged(ItemEvent e){

        }
    }

}

我對ENUM一無所知,但是...組合框渲染需要toString()實現才能在組合框中顯示值。 也許這需要在枚舉中實現?

並且還為它們分配了替代值(除了常量值外還有一個字符串名稱),

您還可以使用兩個值創建一個自定義POJO,以將其放置在組合框中。 有關簡單示例,請參見帶有自定義渲染器的組合框

嘗試:

new JComboBox(CurrencyTypes.values());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM