Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Von einem JinternalFrame auf ein anderes zugreifen!
Hallo Zusammen,
ich hab ein dickes Problem!
Ich habe eine Klasse die von JFrame erbt und somit dass Fenster bereitstellt, diese Klasse instanziert 2 andere Klassen die jeweils ein JinternalFrame erzeugen. Jetzt hab ich in dem einen JInternalFrame einen Button, der einen Text in dem anderen JInternalFrame ändern soll! Wie kann ich jetzt von dem einen instanzierten JInternalFrame auf das zugreifen? Ich hab das versucht mittels: JFramename.JInternalFramename.JLabelname.setText("Text") aber das funktioniert nicht!
Gruß Michi
Der eine JInternalFrame braucht in irgendeiner Weise eine Referenz auf den anderen.
Dazu kannst du bspw. eine Referenz in einem eigenen Konstruktor übergeben, oder in einer anderen Klasse einen getter bereitstellen.
Hi Wildcard,
danke für die schnelle Antwort!
Wie meinst du das mit Referenz? Kannst du bitte ein Beispiel (muss ja nicht lang sein!) posten? Wäre echt nett!
Gruß Michi
Na du musst doch irgendwie auf das Objekt zugreifen können.
Dafür brauchst du eine Referenz auf dieses Objekt.
Wie du diese erhälst ist dabei nebensächlich.
Das ist nur eine Möglichkeit.
So kann man das 'theoretisch' zwar auch machen, aber als generellen Hinweis für zukünftiges Klassendesign:
Alle Variablen private machen.
Wann das nicht sinnvoll ist wirst du später selbst lernen
Hi,
ich will aber auf ein Label zugreifen und nicht auf eine Variable! Ich hab das Label aber nicht als public deklariert! Vielleicht war das der Fehler! Aber deine Lösung find ich besser, da muss man nicht die ganze Adresse zusammenbasteln sondern übergibt sie praktisch gleich mit!
Wegen des Klassendesign, ja ich denk auch dass es oft besser ist zu kapseln!
Gruß Michi
Auch die Referenz auf ein Label wird in einer Variablen gespeichert.
Wie gesagt: bis man weiß was man tut am besten mal alles private machen sonst gewöhnt man sich einig üble Dinge an :wink:
Hi,
was ich mich auch frag ist:
Ich hab eine Klasse die Variablen enthält. Diese Klasse instanziert ein JInternalFrame. Wie kann ich jetzt aus dem instanzierten JInternalFrame auf die Variablen der Klasse zugreifen?
Danke für die Antworten!
Gruß Michi
Z.B. indem du JInternalFrame erweiterst und die darin vorsiehst, dass die entsprechenden Daten übergeben oder gesetzt werden können. Auch solltest du dir mal MVC anschauen und über ein eigenes Daten-Modell nachdenken. Des weiteren lies nochmal nach, was es mit Variabeln und Klassen und so in Java auf sich hat.
Es ist immer etwas kompliziert, wenn man Fachbegriffe nicht korrekt benutzt. Das führt zu Verwirrung. Sind halt so die Einstiegshürden...
Was ist an "Datenmodell" unverständlich? Fällt in diesem Fall (Zugriff auf ein inezlenes Label) wohl flach, aber wir können ja schwer ahnen, was du da noch so treibst
Wenn du schreibst "Hi, ich will aber auf ein Label zugreifen und nicht auf eine Variable!", dann ist klar, dass bei dir einige Begriffe noch nicht ganz sitzen. Mach dir nichts draus, am Anfang ist alles einfach nur ein riesiges undurchdringliches Chaos. Wenn man das mal durchdrungen hat, gilt das vor allem für zuvor geschriebenen Code.
Wenn ich Zeilen sehe, wo jemand mit zig Punkten auf eine Instanz zugreift, rollen sich schon die Fußnägel hoch. Aber da mussten wir mehr oder weniger alle mal durch.
Ein JInternalFrame hat (im Gegensatz zu deiner Console-Klasse) keine setLabel Methode.
Du übergibst der 'Steuerung' zwar eingentlich eine 'Console', deklarierst sie jedoch als JInternalFrame.
Code:
public class Steuerung extends JInternalFrame implements ActionListener {
private Console zugriff;
private JButton vor;
public Steuerung(Console übergabe) {
super();
setSize(200,200);
setLocation(0,0);
this.zugriff = übergabe;
vor = new JButton("Vor");
vor.addActionListener(this);
this.getContentPane().add(vor);
}
public void actionPerformed(ActionEvent ae) {
Object source = ae.getSource();
if(source == vor) {
this.zugriff.setJLabel("vor");
}
}
}