Designfrage: Dateninhalte in Komponenten variabel halten

Status
Nicht offen für weitere Antworten.

sliwalker

Top Contributor
Hi,

ich arbeite gerade an einem privaten Projekt mit grafischer Oberfläche.
Dafür habe ich fast alle Komponenten von Java erweiitert unter anderem die JComboBox.
Ich möchte diese Komponente so nutzen, dass ich verschiedene Typen als Werte für die ComboBox verwenden kann.
Meine Implementierung von JComboBox implementiert ein eigenes Interface, welches Methoden vorgibt, mit welchen man den gerade aktiven Wert der ComboBox zurückgeben oder auslesen kann. Dieser Wert hat einen Typ. Der kann je nach Verwendung der ComboBox verschieden sein.

Derzeit gebe ich innerhalb dieser Komponente je nach Anwendungsfall per if gesteuert einen bestimmten Typ zurück.
Mein Problem ist, dass ich die Komponente ziemlich stark an Typen binde, die da eigentlich nicht rein gehören. Oder?

Ohne Metadaten zu den Objekten bereitzustellen und der ComboBox mitzugeben und dann per Reflection entsprechende Aktionen durchzuführen, sehe ich keine andere Chance, die ComboBox so "generich" wie möglich zu halten.

Habt ihr da eine Idee?
 

sliwalker

Top Contributor
Vielen Dank für Deine Antwort.
Vielleicht habe ich ein falsches Bild von Generics.

Ich dachte, dass man damit nur erreichen kann, dass zum Beispiel Listen oder dergleichen typisiert werden, dass casten wegfällt und Einfügeoperationen kontrolliert werden. Auf Grund Deines Beitrags habe ich nochmal nachgelesen, dass es ja auch Wildcards gibt.

Leider sehe ich immer noch nicht die Hilfe in meinem Fall.
Hier mal ein wenig Code:
Java:
    public Object getComponentValue() {

	Object selectedItem = model.getSelectedItem();
	if (selectedItem != null) {
	    if (selectedItem instanceof BasisTypus) {
		BasisTypus typ = (BasisTypus)selectedItem;
		return (typ);
	    }
	}
	return ("");
    }

Anstatt "BasisTypus" werden aber noch andere Typen zurückgegeben werden müssen. Nochmal zur Erinnerung, die Methode gibt das selecteditem einer JComboBox zurück. Genauer gesagt meiner Implementierung davon. Da alle Komponenten auf der Oberfläche in einer Map gehalten werden und die Werte quasi in einer Schleife ausgelesen werden, implementieren alle Komponenten ein Interface mit der Methode getComponentValue().

Ich werde es mal ausprobieren, aber wenn jemand Lust hat mal in zwei Sätzen zusammenzuschreiben, wie mir das mit den Generics helfen kann, wäre das super nett. So ganz klar ist mir das noch nicht.
 
B

bygones

Gast
zb (keine ahnung ob das dann wirklich auf deinen anwendungsfall passt)
Java:
public class MyComboBox<T> {
    public T getSelectedItem() {
       return (T)model.getSelectedItem(); // kA - annahme dass das model selbst nicht generisch ist
    }
}
aufruf ueber
Java:
MyComboBox<String> stringBox = ...;
String value = stringBox.getSelectedItem();
MyComboBox<Double> doubleBox = ...;
Double value = doubleBox.getSelectedItem();

wenn die Klasse selber nicht generisch sein kann / soll / darf geht (ungetestet) auch
Java:
public <T> T getSelectedItem() {
    return (T)model.getSelectedItem();
}
aufruf
Java:
MyComboBox stringBox = ...;
String value = stringBox.getSelectedItem();
 
Zuletzt bearbeitet von einem Moderator:

sliwalker

Top Contributor
Aha.

Danke für Deine ausführliche Antwort und die guten Beispiele ;)
Ich sehe gerade, dass ich damit unbedingt mehr machen muss. Das scheint wirklich gut zu passen.

Danke nochmal.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
L Designfrage: Dispatcher-Programmierung - redundante Auslegung Allgemeine Java-Themen 1
F.S.WhiTeY Designfrage bzw. Meinung zur Umsetzung Allgemeine Java-Themen 39
G Designfrage Vererbung ja oder nein Allgemeine Java-Themen 9
G Designfrage: Exceptions in Konstruktoren Allgemeine Java-Themen 7
E Wie anfangen? Konzept / Designfrage Allgemeine Java-Themen 17
heart_disease Designfrage: Statische Konfigurationsklasse Allgemeine Java-Themen 10
N DesignFrage FactoryPattern Allgemeine Java-Themen 7
N verschiedene Klasse laden (Designfrage) Allgemeine Java-Themen 2
A Designfrage zu Dateimanager Allgemeine Java-Themen 4
O Designfrage Allgemeine Java-Themen 6
T Designfrage: Viele, kleine Objekte Allgemeine Java-Themen 13
T Designfrage: Audiochat Allgemeine Java-Themen 3
S Designfrage Allgemeine Java-Themen 3
perlenfischer1984 Mehrere Komponenten erstellen Allgemeine Java-Themen 3
M Monitoring JMX-Komponenten Allgemeine Java-Themen 0
Fab1 Komponenten eines zweiten Java Programms auslesen Allgemeine Java-Themen 8
P Komponenten kommunikation Allgemeine Java-Themen 7
S Applet nicht signierte Komponenten feststellen Allgemeine Java-Themen 6
J Java Komponenten / Framework Allgemeine Java-Themen 5
N Gridbaglayout - Abstände zwischen Komponenten einstellen Allgemeine Java-Themen 2
C Komponenten einer WebSeite Allgemeine Java-Themen 4
B Eingabemaske Komponenten aktivieren, funktionert nicht (sehr kurios) Allgemeine Java-Themen 2
T JXPanel mit seinen Komponenten auf PDF mit iText ausgeben Allgemeine Java-Themen 15
J Modul/Komponenten/Addon-Programmierung Allgemeine Java-Themen 3
G SWT Komponenten ausdrucken ? Allgemeine Java-Themen 3
MQue Komponenten einem JPanel hinzufügen Allgemeine Java-Themen 9
MQue Fokus von Komponenten/JFrame Allgemeine Java-Themen 3
Z variabel Komponenten erstellen oder Compie Allgemeine Java-Themen 4
A Komponenten binär in Datei schreiben Allgemeine Java-Themen 11
G Panel mit vielen Komponenten verbraucht viel Speicher Allgemeine Java-Themen 3
R Umstieg von Delphi (Komponenten) Allgemeine Java-Themen 4
S Swing - Problem mit Fenster-/Komponenten-Größe Allgemeine Java-Themen 3
B Grafische Oberfläche - Welche Komponenten? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben