Über Liste verschiendene JComponents mit eigenem implementierten Interface ansprechen

markusk21

Mitglied
Guten Abend,
Ich möchte einen wiederverwendbaren Dialog programmieren, der abhängig von einer überlieferten Klasse passende JComponents enthält, mit der alle setter und getter der überlieferten Klasse über Reflection manipuliert werden können.

Das funktioniert auch ganz gut, ich stelle per Reflection fest, was der Typ der Eigenschaft ist und nehme dann eine passende JComponent in den Dialog auf.
Z.B. für ein Int einen JSpinner:
Java:
public static JComponent getComponent(Class c, Object value){
        
        if (c.isInstance(new Integer(3))){
            JSpinner sp = new JSpinner(new SpinnerNumberModel(Integer.parseInt(value.toString()), 0, Integer.MAX_VALUE, 1));
            
            return sp;
        }
}

Jetzt muss nur der Dialog natürlich, unabhängig davon ob es ein JSpinner, ein JTextField oder ein Button zum Setzen einer java.awt.Color, auf eine Änderung der Werte reagieren. Dummerweise haben JButton, JTextField und JSpinner keine gemeinsame Methode oder gar Listener um auf die Änderungen zu reagieren.

Also will ich die Klassen überschreiben, die alle das selbe Interface implementieren, ganz einfach:
Java:
public interface ValueComponent {
    Object getValue();
    void addValueChangeListener(ValueChangeListener l);
}

So weit so gut. Im Dialog kann ich nun eine Liste von JComponents halten, und die im Dialog darstellen.
JComponents implementieren natürlich nicht mein schönes Interface.
Ein Valuecomponent kann ich jedoch nicht dem Dialog hinzufügen.

Ich hoffe, ich hab das verständlich ausgedückt.
Mein Versuch sah so aus, ich mache eine JComponent-Klasse, die das Interface implementiert und kann dann button, Spinner oder was auch immer für beide Funktionen benutzen:

Java:
public class JValueComponent extends JComponent implements ValueComponent {

    @Override
    public Object getValue() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void addValueChangeListener(ValueChangeListener l) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
}

Ein eigener JSpinner, der das interface implementiert gilt aber scheinbar nicht als JValueComponent:
Java:
public static JValueComponent getComponent(Class c, Object value){
        
        if (c.isInstance(new Integer(3))){
            JValueSpinner sp = new JValueSpinner(new SpinnerNumberModel(Integer.parseInt(value.toString()), 0, Integer.MAX_VALUE, 1));
            
            return sp;
        }   
}
die Methode meckert sich entsprechend über "incompatible Types" in Zeile 6.

Bleibt die einzige Möglichkeit 2 Listen zu führen, eine mit JComponents und eine mit den ValueComponent?
Kann da jemand helfen? Wie kann ich sowas realisieren? Oder denke ich grad zu kompliziert?
 

diggaa1984

Top Contributor
Java:
public class JValueComponent extends JComponent implements ValueComponent {

    @Override
    public Object getValue() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void addValueChangeListener(ValueChangeListener l) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
}

Ein eigener JSpinner, der das interface implementiert gilt aber scheinbar nicht als JValueComponent:
Ist klar, denn das Interface alleine hat ja nichts mit JValueComponent zu tun, was du brauchst ist dann
Java:
public class JValueSpinner extends JValueComponent { ... }

das sollte doch dem entsprechen was du vorhast.
[EDIT]Ah zu schnell gedacht .. dann fehlt dir natürlich die Möglichkeit von JSpinner zu erben :/[/EDIT]
 

diggaa1984

Top Contributor
was spricht gegen:
Java:
public class JValueSpinner extends JSpinner implements ValueComponent { ... }

Dann musst zur Not eben casten. Oder ich versteh das Problem noch nicht ganz :D
 

markusk21

Mitglied
@diggaa1984: Stimmt, hab ich vergessen zu beschreiben, war aber auch eine meiner Ideen. Aber schön, dass ich mich scheinbar halbwegs verständlich machen konnte.

Mein momentaner Ansatz ist ValueComponents in der Liste zu halten und nur, beim Hinzufügen zum Dialog nach JComponent zu casten.

Funktioniert, aber ich wäre sehr sehr dankbar, wenn jemand eine elegante Lösung wüsste.
 

diggaa1984

Top Contributor
grob gesprochen hast du also soetwas??
Java:
public interface ValueComponents { .. }

public class JValueSpinner extends JSpinner implements ValueComponent { .. }
public class JValueTextField extends JTextField implements ValueComponent { .. }
public class JValueComboBox extends JComboBox implements ValueComponent { .. }

List<ValueComponents> l;

l.add(new JValueSpinner(..));
l.add(new JValueTextField(..));
l.add(new JValueComboBox(..));

//und spaeter willst du in etwa folgendes machen (erfordert JComponent als Parameter)
dialog.add(l.get(x));

//und auch
l.get(x).methodeAusInterface();
 

diggaa1984

Top Contributor
hm dann bin ich ma auf antworten gespannt :)

Was stört dich denn an dem cast? Oder wird der Code von anderen verwendet, sodass nicht zwingend JComponents in ihr abgelegt werden?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
H Druckeransteuerung Über GUI Allgemeine Java-Themen 4
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
X Über 100.000 fps? Allgemeine Java-Themen 2
F Über Java Google Suche nutzen Allgemeine Java-Themen 11
X Über ArrayList iterieren, während sich diese verändert Allgemeine Java-Themen 3
V Über Java in einem Forum einloggen/ suchen? Allgemeine Java-Themen 10
L crc16 Über bytearray Allgemeine Java-Themen 4
T Über Javadoc hinausgehende Doku? Allgemeine Java-Themen 4
D Über Arrays iterieren? Allgemeine Java-Themen 4
S Über ein String eine Webseite in eine Datei umleiten Howto? Allgemeine Java-Themen 8
C Über C/C++ (JNI) angeforderten Speicher wieder frei geben Allgemeine Java-Themen 3
R Über Proxy-Server URL laden Allgemeine Java-Themen 2
Fynn29 Liste sortieren ohne Array und ohne vorgegebene Sortierung Allgemeine Java-Themen 24
MiMa Filtern von TableView Liste Allgemeine Java-Themen 2
B Liste aller Kombintionen mit Einschränkungen Allgemeine Java-Themen 8
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
D Erste Schritte Liste erweitern Allgemeine Java-Themen 11
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
M einfach verkettete Liste verstehen Allgemeine Java-Themen 23
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
Gaudimagspam Skip Liste erstellen in Java Allgemeine Java-Themen 3
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
bueseb84 Spring Boot Entity mit Liste Allgemeine Java-Themen 4
MiMa Werte in liste speichern? Allgemeine Java-Themen 3
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
K verkettete Liste Allgemeine Java-Themen 3
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
T Google Links in einer Liste Allgemeine Java-Themen 4
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
L Liste überschreibt alte Elemte Allgemeine Java-Themen 10
H Länge einer verketteten Liste Allgemeine Java-Themen 4
E Erstellen einer Liste mit einer maximalen Menge an Elementen Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
perlenfischer1984 Liste mit generics zurück liefern Allgemeine Java-Themen 8
S Verkettete (Teil)Liste sortieren ( rekursiv bis n) Allgemeine Java-Themen 2
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
A Collections Inhalt einer Liste mit Inhalt anderer Liste vergleichen ? Allgemeine Java-Themen 7
I Abstrakte Datentypen - Liste Allgemeine Java-Themen 9
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
Z In die Liste kann ich nichts adden Allgemeine Java-Themen 16
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
M liste von listen anders ausgeben Allgemeine Java-Themen 1
B Per Buttonklicks einer Liste Wörter hinzufügen - Wie umsetzen? Allgemeine Java-Themen 11
H Liste sortieren anhand optionalem Property Allgemeine Java-Themen 3
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
A Auslesen einer Datei sowie ausgeben als Liste in App Allgemeine Java-Themen 5
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
H Liste von Objekten generisch sortieren Allgemeine Java-Themen 0
D Liste anhand Standardnormalverteilung befüllen Allgemeine Java-Themen 1
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
T Datentypen Eine Liste - verschiedenen Klassen - eine Abstracte Klasse Allgemeine Java-Themen 3
M Werte aus DB in Liste speichern ohne mehrfach speicherung Allgemeine Java-Themen 18
G Liste anzahl der gleichen Objekte Allgemeine Java-Themen 6
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
O aus Liste ein beliebiges Element auswählen Allgemeine Java-Themen 7
J Liste aller Com-Ports - zweistellige Ports? Allgemeine Java-Themen 15
O MVC - wo Liste der ComboBox-Items ermitteln Allgemeine Java-Themen 3
MiMa Liste von Pfaden in eine textArea schreiben Allgemeine Java-Themen 7
K kontinuierlich aktuelle Bestellsystem-Liste mit farbigem Status Allgemeine Java-Themen 2
A Auswählbare Liste Allgemeine Java-Themen 2
D Sortieren von Liste zu unperformant Allgemeine Java-Themen 6
N Liste gesucht Allgemeine Java-Themen 2
Z Sortiertes Einfügen in doppelt verkettete Liste Allgemeine Java-Themen 5
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
O JSON String bauen aus Liste Allgemeine Java-Themen 2
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
D Zugriff auf Array-Liste Allgemeine Java-Themen 19
S Threads Liste mit Objekten in Teillisten zerlegen und abarbeiten Allgemeine Java-Themen 3
R ThreadPool - vorhandene thread liste überprüfen bzw. aufräumen Allgemeine Java-Themen 3
pg1337 Liste füllen Allgemeine Java-Themen 2
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
B Properties File Liste Allgemeine Java-Themen 3
Gossi Collections Liste zusammenfassen für JSP Allgemeine Java-Themen 4
Gossi Collections (Unbekannte) Liste Sortieren Allgemeine Java-Themen 10
T Collections Liste schnell/nebenläufig durchgehen Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
Q "Doppelte" Einträge einer Liste entfernen Allgemeine Java-Themen 14
C Exponentielle Verteilung in einer Liste Allgemeine Java-Themen 7
Nic.o liste der installierten Zertifikate ?! Allgemeine Java-Themen 3
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
M Verständnisfragen bezüglich Liste Allgemeine Java-Themen 3
S AWT Wie bekomme ich eine Liste aller chars in einem Font? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben