Fehler bei jFame.setTitle()

  • Themenstarter Themenstarter Gelöschtes Mitglied 82461
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 82461

Gast
Hi,
Ich habe zwei Fenster: Wnd2 und WndMain. Bei Wnd2 möchte ich immer den selben Titel wie bei WndMain haben.
Dafür schreibe ich bei Wnd2.setTitle folgendes rein:
Java:
WndMain.getTitle();
Darauf erhalte ich diese Fehlermeldung: "Cannot make a static..."!?

Screenshot 2024-01-11 213652.png

Mache ich irgendetwas grundlegend falsch?
Bin für jede Antwort offen 🙂

lg
Benjamin
 
Du musst die Methode getTitle auf der Instanz der Klasse aufrufen und nicht auf der Klasse selbst.

Da ist dann aus meiner Sicht auch wichtig, dass Du es richtig ausdrückst. Du hast die zwei Klassen Wnd2 und WndMain. Von diesen Klassen hast Du dann vermutlich Instanzen erstellt (Vermutlich von jeder Klasse genau eine).

Diese Instanzen musst Du Dir in einer Variable merken um dann darauf zugreifen zu können.
 
Evtl. macht es auch Sinn, dass Du uns evtl. etwas mehr Details zeigst. Generell macht es Sinn, die Fenster dann so zu verwalten, dass Du da eine Methode erstellst, mit der du den Titel änderst. Diese Methode würde dann den Titel bei beiden Fenstern ändern und dann bräuchtest Du den Aufruf von getTitle() gar nicht erst.

Prinzipiell ist es aber auch möglich, generell Änderungen an einer Property mit zu bekommen. Dazu gibt es den PropertyChangeListener. Da kannst Du für die Property title etwas einstellen, was dann passieren soll. Das kann dann z.B. so in der Art aussehen:

Java:
Wnd2 wnd2 = new Wnd2();
WndMain wndMain = new WndMain();

wndMain.addPropertyChangeListener("title", evt -> wnd2.setTitle(evt.getNewValue() );

Ich gehe hier davon aus, dass Wnd2 und WndMain jeweils von JFrame erben.

Dann würde bei jeder Änderung des Titels von wndMain auch der Titel vom wnd2 geändert.
 
Vielen Dank dir für deine Hilfe!!!
Ich habe es jetzt so "gelöst":
1705007911988.png

Ich weiß nicht, ob du das so gemeint hast, aber so funktioniert es 🙂!!
 
Ja, aus Sicht des Compilers ist der Code ok. Aber das wird vermutlich nicht machen, was Du erwartest.

Du erzeugst eine neue WndMain Instanz und von der holst Du den Titel. Wenn Du vorher schon ein WndMain Fenster hattest, dann hast Du jetzt zwei.

Vergleich:
Du hast einen BMW und Du hast da etwas in den Kofferraum gelegt.
Wenn Du das nun aus dem Kofferraum heraus nehmen willst, dann wird es nicht von Erfolg gekrönt sein, wenn Du Dir erneut einen BMW kaufst und da dann in den Kofferraum schaust.
 
Du musst Dir merken, wo Dein BMW steht - dann kannst du an Deinen BMW gehen und findest Deine Sachen.

Das bedeutet also in Java, dass Du die Referenz in einer Variable speichern musst. Wenn Du uns etwas Deinen Code zeigst, dann kann man das auch gerne einmal im Detail zeigen, wie man das in dem Code machen könnten.
 
Ich glaube dass ich einfach eine .ini-Datei in WndMain beschreibe und in Wnd2 auslese und zack hab ich schon alles oder nicht?
Das benutze ich nämlich schon an einer anderen Stelle im Programm (Einstellungen)
 
Das mag zwar technisch das Problem lösen, aber das ist vom Aufwand und der Fehleranfälligkeit kaum zu überbieten.

Wenn du ein Programm mit zwei Fenstern hast, dann ist der Zugriff auf die Insanzen problemlos möglich.

Zu der Ini Datei wäre ja noch eine bessere Lösung, einfach eine Klasse zu haben wie
Java:
public class WindowInstances {
    public static WndMain wndMain;
    public static Wnd2 wnd2
}

Und dann bei der Erstellung der Instanzen diese in WindowInstances.wndMain bzw. WindowInstances.wnd2 zuzuweisen. Dann kannst auf diese Instanzen überall zugreifen, also z.B. WindowInstances,wndMain.getTitle()

Aber das ist auch keine saubere Lösung. Das ist etwas, das man einfach nicht so machen sollte, wenn man objektorientiert programmiert. Daher die Bitte, doch etwas Einblick in Dein bisherigen Code zu bekommen. Du willst doch Deine Kenntnisse bestimmt verbessern, oder?
 

Zurück
Oben