Hallo, ich möchte ein JLabel kopieren, diese allerdings nicht verknüpft sind d.H. wenn ich das eine ändere, wird nicht das andere geändert
Warum?ich möchte ein JLabel kopieren
Für meine selbst erstellte 2D EngineWarum?
class MasterLabel extends JLabel {
private JLabel childLabel
public MasterLabel (JLabel childLabel) {
this.childLabel = childLabel;
}
@Override
public void setText(String s) {
super.setText(s);
if (childLabel != null) {
childLabel.setText(s);
}
}
...
}
Kopiert man ein JLabel und ändert das Original, wird di9e kopie auch geändert, da die JLabels verknüpft sind"wenn ich das eine ändere, wird nicht das andere geändert"
So geht das nicht. Sofern beide Labels direkt in ein Formular eingebunden sind, sind beides einzigartige Objekte.
Beste Lösung: Sprich sie nicht direkt an, sondern über einen Wrapper, der die benötigten änderbaren Eigenschaften bereitstellt. Der ändert dann beide Labels.
Du kannst aber auch so arbeiten:
Java:class MasterLabel extends JLabel { private JLabel childLabel public MasterLabel (JLabel childLabel) { this.childLabel = childLabel; } @Override public void setText(String s) { super.setText(s); if (childLabel != null) { childLabel.setText(s); } } ... }
Ein weiterer Kunstgriff wäre - falls du mit Listen oder Tabellen usw. arbeitest - das Label als Komponente eines CellRenderers zu liefern. Auf diese Weise könnte das selbe Label an verschiedenen Stellen angezeigt werden.
Zu deinem ursprünglichen Ansatz: Was hast du von einer Kopie denn erwartet? Kopier mal eine Seite eines Buches, dann schreib (mit Bleistift bitte) etwas auf die Originalseite. Wird die Kopie geändert?
Dann war es keine Kopie. Du hast einfach die Referenz auf das JLabel einer weiteren Variablen zugewiesen und damit nun zwei (oder mehr) Variablen, die auf das selbe Objekt verweisen.Kopiert man ein JLabel und ändert das Original, wird di9e kopie auch geändert, da die JLabels verknüpft sind
Ich möchte dir nicht zu nahe treten, aber anhand deiner Beiträge, würde ich dir empfehlen, dich zuerst noch etwas mit Grundlagen zu beschäftigen, bevor du eine "2D Engine" programmierst. Nicht böse gemeint, nur ein gut gemeinter Vorschlag.Für meine selbst erstellte 2D Engine
und wie kopiert man nun das JLabel?
erstellst ein Label und übergibst dem Die werte die im anderen drin sind
Warum?
Hast du schon .clone() ausprobiert?und wie kopiert man nun das JLabel?
Dass das nicht der Fall ist, ist mittlerweile klarKopiert man ein JLabel und ändert das Original, wird di9e kopie auch geändert, da die JLabels verknüpft sind
JLabel a = new JLabel("Hallo");
JLabel b = a; //das ist keine Kopie, b verweist auf das selbe Label wie a.
JLabel c = (JLabel)a.clone(); //sollte klappen, um eine Kopie zu erzeugen. Ansonsten ein neues anlegen und die Eigenschaften manuell kopieren, so wie weiter oben gesagt.
a.setText("Dada"); //ändert das von a und b referenzierte Label, aber nicht das von c referenzierte.
c.setText"Dudu"); //ändert nur das von c referenzierte Label.
Die Methode Object.clone() ist protected und JLabel implementiert, meines Wissens, Cloneable nicht. Außerdem: clone() ist doof! Joshua Bloch beschreibt es mehr oder weniger als "Fehltritt" und "nicht zur Nachahmung empfohlen".Hast du schon .clone() ausprobiert?
Die Methode Object.clone() ist protected und JLabel implementiert, meines Wissens, Cloneable nicht. Außerdem: clone() ist doof! Joshua Bloch beschreibt es mehr oder weniger als "Fehltritt" und "nicht zur Nachahmung empfohlen".
Es stellt sich halt die Frage, warum man ein Label kopieren möchte, um dann etwas daran zu ändern?
Die Haupteigenschaft des Labels ist der Text. Ein Label soll in den meisten Fällen einen Text anzeigen. Warum sollte man also ein Label mit einem bestimmten Text kopieren, um anschließend den Text dann zu ändern. Man könnte ja gleich ein neues Label mit anderem Text erstellen. Das sind aber nur Vermutungen und Gedanken dazu. Deshalb auch die Frage nach dem "Warum".
Ich habe das anders verstanden. Er möchte zwei Texte, die voneinander unabhängig sein sollen.Ok, er will änderbaren Text an 2 Positionen, der sich zugleich ändern soll
Nein, ich benutze das JLabel, um mehrere Components zu verbindenIch habe das anders verstanden. Er möchte zwei Texte, die voneinander unabhängig sein sollen.
Da sie/er uns aber nicht sagt, was sie/er eigentlich möchte, werden wir hier ewig im Dunkeln tappen
Ich wiederhole mich: warum (bzgl. Kommentar #5: nicht wofür)? Was ist die Überlegung dahinter, ein JLabel kopieren zu wollen? Was willst Du "verbinden" und was soll das heißen?Nein, ich benutze das JLabel, um mehrere Components zu verbinden
Wie verbindet man mehrere Komponenten mit einem Label? Was verstehst du unter "verbinden"?Nein, ich benutze das JLabel, um mehrere Components zu verbinden
label.add(label1);
label.add(label2);
label.add(label3);
Der Code ist nicht sinnvoll.Java:label.add(label1); label.add(label2); label.add(label3);
?Der Code ist nicht sinnvoll.
Ein Label dient dazu Text und/oder Icons anzuzeigen - nicht andere Labels.
Entweder ist das kompletter Unfug oder deine Variable label ist ziemlich bescheiden benannt und nicht vom Typ JLabel, sondern was anderes.
Er sollte sich zunächst von GUIs und Game Engines komplett fern halten und erst mal die Grundlagen lernen.wenn du sehr auf verbindungen zwischen nodes aufbauen willst dann nimm javafx her, das hat properties die darauf ausgelegt sind und vllt besser passen
zusätzlich FXGL ist eine Game Engine die auf javafx drauf gebaut wurde solltest du dir vllt ansehen
Habe ich schon vor langer Zeit gemacht.Er sollte sich zunächst von GUIs und Game Engines komplett fern halten und erst mal die Grundlagen lernen.
Mir ist klar, dass Anfänger gerne was auf dem Bildschirm sehen möchten, aber dennoch sind die Grundlagen Vorbedingung, um das auch sinnvoll umsetzen zu können. Darum programmiere gerne ein einfaches Spiel, aber mach das am Anfang erst mal nur auf der Konsole. Alles andere (einschließlich vieler unsäglicher YT-Tutorials) ist nicht zielführend.
das heißt jetzt komma dass?Habe ich schon vor langer Zeit gemacht.
Dann aber nicht gründlich genug. Nach "langer Zeit" hat man normalerweise schon ein Gefühl dafür, wie sich Kopien von Objekten verhalten und wie Container zu verwenden sind.Habe ich schon vor langer Zeit gemacht.
?das heißt jetzt komma dass?