[英]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.