JComponent in Vector - wie klonen?

Status
Nicht offen für weitere Antworten.

ghummelll

Mitglied
Hallo Leute,

ich habe ein Problem: Ich halte in einem Vector verschiedene JComponents. In einem späteren Programmabschnitt sollen in einem Schleifendurchlauf alle Elemente dieses Vektors gezeichnet werden. Es kann aber vorkommen, dass bestimmte Elemente zweimal gezeichnet werden müssen, zum Beispiel das Label, welches "Given name" trägt.

Wenn ich nun aber schreibe
Code:
this.hudGroundPanel.add(this.componentsFirstColumn.elementAt(i), gbc);
, wobei i der aktuelle Schleifendurchlauf ist, wird jeweils nur das letzte Element gezeichnet (siehe Anhang).

Auch folgendes ändert nichts an der Sache:
Code:
JComponent comp = this.componentsFirstColumn.elementAt(i);
this.hudGroundPanel.add(comp, gbc);

Ich vermute, dass nur eine Referenz auf dieses JComponent aufgerufen wird und eine Referenz jeweils nur einmal gezeichnet werden kann. Wenn ich dem Label einen anderen Namen gebe, wird der Name des Elements auch im Vector geändert. Also möchte ich mir diese JComponent nun kopieren, weiß aber nicht wie. clone() geht leider nicht, da das für JComponents nicht sichtbar ist.

Fällt jemandem etwas dazu ein? Oder hatte schon mal jemand ein ähnliches Problem?

Vielen Dank im Voraus und
Liebe Grüße aus Weimar,
ghummelll
 

Marco13

Top Contributor
Sowas wie [c]this.componentsFirstColumn.elementAt(i)[/c] deutet auf einige Punkte hin, die potentiell (!) kritisierenswert sein könnten. Gibt es auch [c]componentsSecondColumn[/c] und [c]componentsThirdColumn[/c]...? Vielleicht könnte man sich dazu eine geeignete Datenstruktur ausdenken. Wenn es (wie im Screenshot) nur im ein JLabel und ein JTextField geht, ist das vielleicht nich nötig. Aber wenn man noch die +/-Buttons mit reinbringen will, lohnt sich das vielleicht.

Ganz allgemein sollte man aber nicht (direkt) "Vector" verwenden, sondern das allgemeinste (kleinste) Interface, das die gewünschten Anforderungen erfüllt. In diesem Fall also nicht
private Vector<Component> componentsFirstColumn = new Vector<Component>();
schreiben, sondern
private List<Component> componentsFirstColumn = new Vector<Component>();
(einige würden Vector sogar gar nicht verwenden, sondern eine "Collections.synchronizedList(new ArrayList<Component>())", aber das ist dann effektiv das gleiche...)
Die Methode "getAlementAt" heißt dann nur noch "get".

Zum eigentlichen Problem :D Ja, eine Component hat einige bestimmte Eigenschaften - z.B. die bounds, die man mit "component.getBounds()" bekommt. Was sollte dort denn eine Component liefern, die zwei mal an verschiedenen Stellen auf dem Bildschrim zu sehen ist? Oder kurz und vereinfacht: Man kann jede Component nur einmal verwenden.

Vermutlich wäre es am günstigsten, zwei Methoden zu machen: Eine, die eine neue Zeile hinzufügt, und eine die die letzte Zeile entfernt (wobei das vermutlich davon abhängt, was mit diesen +/-Buttons genau gemacht werden soll)... Eine "Zeile" könnte dann evtl. auch eine eigene Klasse sein, aber das musst du dir überlegen.
 

ghummelll

Mitglied
Ok, danke erst mal für deine Antwort. Ob nun List oder Vector ist in diesem Zusammenhang völlig egal, da hast du recht, das habe ich mir nicht gründlich genug überlegt. Werde ich wohl noch ändern.

Im Übrigen: Ja, es gibt auch eine zweite und eine dritte Spalte. :)

Aber zu meinem eigentlichen Problem: Das zugrundeliegende Konzept ist ohnehin schon schwierig umzusetzen und wir möchten den Code leicht verständlich halten (wir haben bereits den kompletten Code aus einem vergangenen Projekt, aber kein Mensch ist in der Lage, durchzusteigen - und der Typ selbst wurde aus gutem Grund entlassen :)). Daher ist in unserem Falle leider kein anderes Klassendesign möglich. Gibt es denn tatsächlich keine Möglichkeit, sich eine Kopie einer JComponent anzulegen? Ich meine, ich komme ursprünglich aus der C++-Szene und da wäre es absolut kein Problem. Würde mich wundern, wenn das unter Java nicht möglich sein sollte. :)

Oder andersherum: Es wäre ja denkbar, dass ich mir eine Klasse "MyJComponent" schreibe, die JComponent erweitert und Cloneable implementiert. Was müsste ich dann weiter machen? Also welche Methoden überschreiben? Und vor allem wie? Es gibt ja keine Referenzen...

Ich würde mich über weitere Antworten sehr freuen.
Liebe Grüße
 

Marco13

Top Contributor
Eine Kopie einer JComponent zu erstellen ist .. fast ... nicht möglich. So eine JComponent ist schon eine komplexe Sache (siehe auch http://www.java-forum.org/java-basi...694-pingpong-selber-schreiben.html#post394005 ;) ). Spannend sind eben die Fragen: Wenn an dieser Component ein ActionListener hängt, und dieser ActionListener ist zufüllig eine Datenbank-Anbindung :autsch: ... wird dann die Datenbank mitgeklont? :joke:

Und ehrlich gesagt würde mich interessieren, wie man das in C++ machen sollte - außer einen void-Pointer draufzulegen und das ganze mit memcpy durchzunudeln - aber wenn das Objekt dann einen Pointer enthält, zeigen die auf die gleichen Daten, ob sie das nun sollen oder nicht (immer in der Hoffnung, dass dieser Pointer nicht als ein Ersatz für "this" verwendet wird oder so :autsch: )

Also: Am besten ist, sich (z.B. mit einer eigenen Methode) die Components zu erstellen, die man braucht. Alles andere wäre ziemlich krampfiges Gefrickel (und wenn dein Nachfolger das sehen würde, würde er vielleicht in irgendeinem Forum sagen, dass du zu Recht gefeuert worden bist :bae: ).

Aber wenn man um's verrecken eine Component clonen will, dann wäre die einzige Möglichkeit, die ich da sehen würde, über die Serialization zu gehen. Im Netz findet man dazu einiges, und da gab's schonmal einen Thread dazu: http://www.java-forum.org/java-basics-anfaenger-themen/72337-jcomponent-klonen.html ...
 

ghummelll

Mitglied
Am besten ist, sich (z.B. mit einer eigenen Methode) die Components zu erstellen, die man braucht.
Geht wirklich nicht. Zur Erklärung: Die Elemente sind vorgegeben, mit einem Klick auf den Button "+" soll die selbe Zeile darunter kopiert werden, natürlich mit anderen Namen für die Komponenten, aber das ist kein Problem. Bloß das weiß ich halt vorher nicht...

Liebe Grüße und einen schönen Abend noch
 

Marco13

Top Contributor
Bits sind nur Bits - du würdest dich wundern, was man damit alles machen kann :D
Irgendjemand muss doch irgendwo auch mal die ERSTE Zeile erstellen. Und vielleicht kann man, genau so, wie das gemacht wird, die weiteren erstellen....
 

Marco13

Top Contributor
Ja, ich gehe davon aus, dass es einen Grund gibt, warum man das nicht mehr ändern kann. Schon gut.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Von JComponent erben und Set implementieren Allgemeine Java-Themen 2
G die Methode JComponent#addNotify() Allgemeine Java-Themen 3
P Focus über einer JComponent Allgemeine Java-Themen 9
U einer JComponent ein look & feel zuordnen Allgemeine Java-Themen 6
A Vector Strings in Array splitten Allgemeine Java-Themen 6
G Fehler mit Vector Allgemeine Java-Themen 3
M String Array Vector komprimieren und verschicken Allgemeine Java-Themen 3
P Vectorelemente in einen anderen Vector kopieren Allgemeine Java-Themen 12
U Vector aus Oberklasse spezialisieren Allgemeine Java-Themen 2
R Vector in JList Allgemeine Java-Themen 11
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
H Index Out of Bounds bei Vector Allgemeine Java-Themen 4
H Java Vector Frage Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
C Vector/Point-Problem Allgemeine Java-Themen 3
M Buffer-Vector einzeln und zusammen synchronisieren Allgemeine Java-Themen 4
B Suchalgorithmus der Klasse Vector Allgemeine Java-Themen 5
X Vector Allgemeine Java-Themen 3
S 2D Vector speziell ausgeben. Allgemeine Java-Themen 2
S Vector in Vector gespeichert, wie greift man darauf zu? Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
R Vector.clear() oder neu initialisieren Allgemeine Java-Themen 3
S vector & strings Allgemeine Java-Themen 26
X Vector in Intervall-Menge umwandeln Allgemeine Java-Themen 4
D Array oder Vector in Enum Deklarieren Allgemeine Java-Themen 3
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
V Performancefrage int-Vector/Stack Allgemeine Java-Themen 10
N HashMap<String,Vector<String>> a = new HashMap<String,Vector<String>>(); Allgemeine Java-Themen 4
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
S JList in Vector Allgemeine Java-Themen 3
I Vector mit Objekten sortieren,Videos mit JMF wiedergeben Allgemeine Java-Themen 6
MQue Vector<..> nicht verwenden Allgemeine Java-Themen 4
H Vector<Character> zu char[] castern Allgemeine Java-Themen 2
T Element aus Vector entfernen Allgemeine Java-Themen 4
Spot84 Vector nach Ressourcetyp sortieren Allgemeine Java-Themen 4
M get Funktion von Vector Allgemeine Java-Themen 4
N wie greife ich auf hashmap in vector zu Allgemeine Java-Themen 9
V NullPointerException bei Vector Allgemeine Java-Themen 2
E einfache Frage zu Vector Allgemeine Java-Themen 8
K Serialisierung von Hashmap in Vector Allgemeine Java-Themen 3
G Vector beim Initialisieren befüllen Allgemeine Java-Themen 4
G Vector addAll Allgemeine Java-Themen 5
B sorteiren von Datein nach Zeitstempel in einem Vector Allgemeine Java-Themen 5
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
MQue Vector Allgemeine Java-Themen 7
F Vector in eine Datenbank speichern? Allgemeine Java-Themen 3
P Vector auf JTree Allgemeine Java-Themen 6
P dynamisches Array / Vector Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
T Vector und remove? Allgemeine Java-Themen 13
T Vector in JAVA ? Allgemeine Java-Themen 10
P Vector in vielen Klassen Allgemeine Java-Themen 21
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Vector<State> Allgemeine Java-Themen 2
O hilfe bei Vector frage Allgemeine Java-Themen 6
F Synchronisation + Vector/ArrayList/LinkedList Allgemeine Java-Themen 7
Z Elemente in Vector nach Häufigkeit sortieren. Allgemeine Java-Themen 13
H java.util.Vector langsam ? Allgemeine Java-Themen 5
H Vector<T>[] vecs = new Vector<T>[10]; geht nicht Allgemeine Java-Themen 2
N Java API java.util.vector Allgemeine Java-Themen 3
G Vector erweitern Allgemeine Java-Themen 4
S Vector sortieren nach Objekt-Info? Allgemeine Java-Themen 9
A Probleme mit Vector Allgemeine Java-Themen 6
M Vergleich im geordeten Vector und Methodenaufruf Allgemeine Java-Themen 2
J Vector - Wert ersetzen Allgemeine Java-Themen 14
J Vector - Boolean Allgemeine Java-Themen 24
M Vector zu einem byte[] Allgemeine Java-Themen 5
J Vector<Shape> Speichern [gelöst] Allgemeine Java-Themen 11
Y Array mit ID in Vector Allgemeine Java-Themen 6
T Vector <-> double Allgemeine Java-Themen 4
T ArrayList bzw. Vector per set-Methode? Allgemeine Java-Themen 3
T ArrayList oder Vector als Parameter? Allgemeine Java-Themen 7
M Vector add() unchecked? Allgemeine Java-Themen 5
M Probleme und Zeitdruck: Kunden-DB (Vector) Allgemeine Java-Themen 13
T Vector Array Allgemeine Java-Themen 5
M Kunden-DB mit Vector Allgemeine Java-Themen 9
J Vector sortieren Allgemeine Java-Themen 3
M Vector - contain Allgemeine Java-Themen 13
C String und char[] / String[] und Vector Allgemeine Java-Themen 21
N Vector -> 2Diminsonaler Array Allgemeine Java-Themen 10
N Alledateien in einem Ordner in ein Vector speichern Allgemeine Java-Themen 19
K Object nach Vector konvertieren Allgemeine Java-Themen 3
Z ResultSet in Array oder Vector schreiben! Allgemeine Java-Themen 2
C vector von vector sortieren Allgemeine Java-Themen 4
D Vector in String Allgemeine Java-Themen 5
J Von Collection zu vector Allgemeine Java-Themen 5
D Vector in Datei schreiben Allgemeine Java-Themen 18
I Vector serialisieren: StackOverflow Allgemeine Java-Themen 13
H Vector in ein File-Array umwandeln Allgemeine Java-Themen 2
J User Klasse in den Vector, Object Klasse wieder raus... Allgemeine Java-Themen 4
K vector, synchronized und mehrere methoden Allgemeine Java-Themen 3
C Klonen von Arrays/ Matrizenrechnung Allgemeine Java-Themen 2
T OOP Array Klonen Allgemeine Java-Themen 10
G java.util.List klonen Allgemeine Java-Themen 17
I arraycopy und tiefes Klonen Allgemeine Java-Themen 3
P JButton klonen Allgemeine Java-Themen 8
S Hashtabelle klonen frage Allgemeine Java-Themen 8
P org.w3c.dom.Dom Objekt klonen Allgemeine Java-Themen 5
E BufferedWriter irgendwie klonen! Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben