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 "";
            }
        }
    

Anmelden zum Antworten