DefaultComboBoxModel überschreiben

weljo

Bekanntes Mitglied
hi leute brauch mein eigenes comboboxmodel um eine liste schön zu füllen zwar die lösung jedoch ist sie nicht wirklich schön und ich würd gern wissen wiso die schöne variante nicht funktioniert

wie ich mir das vorstelle:
Java:
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;


public class MyComboBoxModel extends DefaultComboBoxModel
{
	public MyComboBoxModel(Vector v)
	{
		super();
		for(int i=0; i<v.size(); i++)
		{
			addElement(v.elementAt(i));
		}
	}

	public void addElement(Engine engine) 
	{		
		super.addElement(engine.getName());
	}
	
	public void addElement(ListItem item) 
	{		
		super.addElement(item.getName());
	}
}

wies funktioniert:
Java:
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;

public class EngineComboBoxModel extends DefaultComboBoxModel
{
	public EngineComboBoxModel(Vector<Engine> v)
	{
		super();
		for(int i=0; i<v.size(); i++)
		{
			addElement(v.elementAt(i));
		}
	}

	public void addElement(Engine engine) 
	{		
		super.addElement(engine.getName());
	}
}
+
Java:
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;

public class ListItemComboBoxModel extends DefaultComboBoxModel
{
	public ListItemComboBoxModel(Vector<ListItem> v)
	{
		super();
		for(int i=0; i<v.size(); i++)
		{
			addElement(v.elementAt(i));
		}
	}
	
	public void addElement(ListItem item) 
	{		
		super.addElement(item.getName());
	}
}


mir ist zwar klar dass es sich um einen allgemeinen vector handelt, jedoch sollte doch bei addElement immer noch das richtige objekt übergeben werden.
 
bei addElement(v.elementAt(i)); in der schönen Variante sind die Elemente des Vektors vom Typ Object,
daher werden deine beiden Spezialmethoden ignoriert,

Java sucht sich nicht zur Laufzeit die passende aus, je nach Typ des Objektes, sowas gibts nicht,
außer bei Vererbung, eine Methode kann dieselbe Methode der Superklasse überdecken, das spielt hier aber keine Rolle,

denkbar wäre ein leerer Konstruktor + zwei Methoden

Java:
public void addEngines(Vector<Engine> v)
    {
        for(int i=0; i<v.size(); i++)
        {
            addElement(v.elementAt(i));
        }
    }

public void addListItems(Vector<ListItem> v)
    {
        for(int i=0; i<v.size(); i++)
        {
            addElement(v.elementAt(i));
        }
    }
und dann die richtige aufrufen,
diese beiden Methoden dürften nicht den gleichen Namen haben, weil zur Laufzeit der Parameter nur noch Vector ist,
nicht mehr unterscheidbar ist

-----

Java:
for(int i=0; i<v.size(); i++)
        {
            addElement(v.elementAt(i));
        }
kann man übrigens auch als
Java:
for(ListItem item : v)
        {
            addElement(item);
        }
schreiben, wenn es um ListItems geht,
 
Zuletzt bearbeitet von einem Moderator:
wens noch interessirt hab das ganze nochmal schöner gelöst indem ich in meinen Objekten einfach die methode toString überschrieben hab.
 

Neue Themen


Zurück
Oben