Combobox MModell remove all items
-
Hallo ich habe eine Combobox und dazu eine DatenModell abgeleitet von MutableComboBoxModel. Alles schick. nun möchte ich aber in dem Modell alle Daten auf einmal löschen. dazu habe ich eine Funktion im Modell geschrieben :
private class TestCaseComboBoxModel implements MutableComboBoxModel { private Vector<TestCaseResultContainer> comboBoxValues = new Vector<TestCaseResultContainer>(); private int comboBoxIndex = -1; @Override public int getSize() { // get the size of the vector return comboBoxValues.size(); } @Override public void setSelectedItem(Object anItem) { for (int index = 0; index < comboBoxValues.size(); index++) { if (((TestCaseResultContainer)comboBoxValues.elementAt(index)).getTestCaseDescription().getTestCaseIDString().equals(anItem)) { comboBoxIndex = index; break; } } } @Override public Object getSelectedItem() { if (comboBoxIndex >= 0) { return ((TestCaseResultContainer)comboBoxValues.elementAt(comboBoxIndex)).getTestCaseDescription().getTestCaseIDString(); } else { return ""; } } @Override public Object getElementAt(int index) { return ((TestCaseResultContainer)comboBoxValues.elementAt(index)).getTestCaseDescription().getTestCaseIDString(); } @Override public void addElement(Object obj) { if (comboBoxValues.contains(obj) == false) { // check if the radio button failedResults is selected if (PanelTestCaseList.getInstance().failedResults.isSelected() == true) { // add the result container only if it contains one failed result if (comboBoxIndex == -1) { comboBoxIndex = 0; } } else { // add the result container comboBoxValues.add((TestCaseResultContainer) obj); if (comboBoxIndex == -1) { comboBoxIndex = 0; } } } } public void removeAllElements() { comboBoxIndex = -1; for (int index = comboBoxValues.size(); index >= 0; index--) { removeElementAt(index); } } @Override public void removeElement(Object obj) { if (comboBoxValues.contains(obj) == true) { comboBoxValues.remove(obj); } } @Override public void insertElementAt(Object obj, int index) { comboBoxValues.add(index, (TestCaseResultContainer) obj); } @Override public void removeElementAt(int index) { if (comboBoxValues.size() > index) { comboBoxValues.removeElementAt(index); } }
Wenn ich nun die Funktion zum Löschen aufrufe :
((TestCaseComboBoxModel)testCaseBox.getModel()).removeAllElements();
bekomme ich eine Exception :
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 at java.util.Vector.elementAt(Vector.java:427) at gui.PanelTestCaseList$TestCaseComboBoxModel.getSelectedItem(PanelTestCaseList.java:269)
Hat jemand eine Ahnung.
Vielen Dank
-
for (int index = comboBoxValues.size(); index >= 0; index--) { removeElementAt(index); }
Size ist nie eine Index.
Index = 0 bis 9 <-> Size = 10.
-
Danke für die schnelle Antwort, habe das jetzt geändert :
for (int index = comboBoxValues.size() - 1; index >= 0; index--) { removeElementAt(index); }
Leider mit dem gleichen resultat
-
Dein eigentlich Fehler ist hier:
@Override public Object getSelectedItem() { if (comboBoxIndex >= 0) { // comboBoxValues.size == 0 ? return ((TestCaseResultContainer)comboBoxValues.elementAt(comboBoxIndex)).getTestCaseDescription().getTestCaseIDString(); } else { return ""; } }