私はユーザーが月を選択するオプションを持っています。月のリストを含むComboBoxのリスナーItemListener
を設定しました。私はユーザーが"2月"の日のリストは最大29、他の場合"4月"、 "6月"などは、私のコンボボックスで30日を持つことを選択条件を設定しています。しかし、「2月」を選択するとうまくいきますが、別の月を選択するとエラーになります。ArrayListを使用したIndexOutOfBoundsException
IndexOutOfBoundsException: Index: 30, Size: 29
私はこのエラーが発生知っている他の月は30のインデックスを持っているので、私は少し混乱してる私は、ArrayListのか、コンボボックスの内容を削除する必要がありますか?どのように私はこれを排除できますか?
private ItemHandler handler = new ItemHandler();
ArrayList<String> daysList = new ArrayList<String>();
String[] daysObj = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"};
DefaultComboBoxModel daysModel = new DefaultComboBoxModel(daysObj);
public AddEmployee()
{
setMonths();
setDays();
cbMonths.addItemListener(handler);
}
private void setDays()
{
for(int i = 0; i < daysObj.length; i++)
{
daysList.add(daysObj[i]);
}
cbDays.setModel((ComboBoxModel)daysModel);
}
private class ItemHandler implements ItemListener
{
int removeDays[] = {29,30};//array
int remove[] = {30};
@Override
public void itemStateChanged(ItemEvent e)
{
if(e.getSource() == cbMonths)//Check where combobox occured.
{
if(cbMonths.getSelectedItem().equals("February"))
{
for(int i = removeDays.length-1; i >= 0; i--)
{
daysList.remove(removeDays[i]);//Remove given array from ArrayList using removeDays[]
System.out.println("NEW ELEMENT: "+daysList);
}
for(String s : daysList)//Update ArrayList
{
cbDays.addItem(s);
System.out.println("NEW LIST OF ARRAY: "+s);
}
}
else if(cbMonths.getSelectedItem().equals("April") || cbMonths.getSelectedItem().equals("June") ||
cbMonths.getSelectedItem().equals("September") || cbMonths.getSelectedItem().equals("November"))
{
for(int i = remove.length-1; i >= 0; i--)
{
daysList.remove(remove[i]);
System.out.println(daysList);
}
for(String a : daysList)//Update ArrayList
{
cbDays.addItem(a);
System.out.println("NEW LIST OF ARRAY: "+a);
}
}
}
}
私は方法removeAllItems()
を試みたが、それは動作しません同類を見て。 cbDays.removeAllItems();
こんにちは! @ヘリ私はまだあなたのコードを分析して、それをすでに試しています。私はこのプロジェクトでGUI Builderを使用しました。私は 'private JComboBox cbMonths = new JComboBox <>();'をまだ呼びますか? cbMonthsとcbDaysは既に定義されているため、D。また、私はコンストラクタで 'initDays()'を呼び出すのを少し混乱させます。クラスのオブジェクトと連結する必要がありますか? 'myObject.initDays();'? –
私がcbMonthsとcbDaysを初期化する行は、コンパイルのために私のeclipseでのみ使用されていました(そして私はここに全体をコピーしました)。すでにインスタンスを初期化している場合は、これらのインスタンスを使用してください。 – Heri
initDaysはコンストラクタで呼び出されません。これは静的で、JVMのクラスローダーによってクラスがロードされるときに一度だけ呼び出されます。 – Heri