ich hab da mal wieder ein Problem dem ich nicht auf die Spur komme. Folgende Situation:
Ich habe mir via Window Builder eine Oberfläche für meine RCP Anwendung zusammen gestellt. Soweit, so schön. Jetzt geht es ans Daten füllen.
Da ich aus meinen Komplexen Datentypen nur entweder Collections oder ArrayLists bekomme, ist es mit einem simplen combo.add(liste) ja nicht getan. Also muss eine Hilfsmethode her. Da ich aber nicht auf Combofelder beschränkt sein will, soll die Methode also nicht nur eine ArrayList aufnehmen, sondern auch das Object.
Leider funktioniert das nicht so einfach wie ich gedacht habe:
Ich bin auf SWT beschränkt, da es eine RCP Anwendung wird. Fast jedes Widget hat eine add-Methode, diese nehmen aber nur entweder direkte Arrays auf oder nur Strings. Im Fall der Combo Box könnte ich noch setItems(String[]) nehmen, aber da ich nur ArrayLists zur Verfügung habe, nützt es mir nichts und nicht jedes Widget hat eine solche Methode.
Gibt es da vielleicht eine möglichkeit wie ich das hinbekommen könnte?
Ich habe mir deine Frage noch mal genau angesehen. Eine generische Methode gibt es nicht, da die Controls kein gemeinsames Interface haben.
Wie wäre es denn hiermit: [code] private void setItems(ArrayList<String> list, Object o) throws NotHandledException{ if (o instanceof org.eclipse.swt.widgets.List){ ((org.eclipse.swt.widgets.List)o).setItems(list.toArray(new String[list.size()])); }else if (o instanceof org.eclipse.swt.widgets.Combo){ ((org.eclipse.swt.widgets.Combo)o).setItems(list.toArray(new String[list.size()])); }else{ throw new NotHandledException("Not supported"); } } [/code]
Ich hab gemerkt das der meine Antwort nicht gespeichtert hat. Kurzum: Ich habs versucht, finde das ganze aber nicht sauber. Darum werd ich mich einmal in SWIXML einarbeiten, danke aber für den Lösungsansatz :)
Eine generische Methode gibt es nicht, da die Controls kein gemeinsames Interface haben.
Wie wäre es denn hiermit:
[code]
private void setItems(ArrayList<String> list, Object o) throws NotHandledException{
if (o instanceof org.eclipse.swt.widgets.List){
((org.eclipse.swt.widgets.List)o).setItems(list.toArray(new String[list.size()]));
}else if (o instanceof org.eclipse.swt.widgets.Combo){
((org.eclipse.swt.widgets.Combo)o).setItems(list.toArray(new String[list.size()]));
}else{ throw new NotHandledException("Not supported");
}
}
[/code]