Frame Title nachträglich ändern

joergdeymann

Grünschnabel
Hallo !
Ich möchte gerne in einem Panel/Applet den Titel des Frames ändern.
Normalerweise geht es ja mit : JFrame.setTitle("Hallo");

Codeauszug:
Code:
public Test extends JApplet  {
   ...
   public void changeTitle(s)  {
        Wenn kein Applet dann:
            ?.setTitle(s);
   }

  public static void main(String [] a) {
      JFrame f=new JFrame();
      Test t=new Test();
      f.add(t);
      f.setVisible(true);
 }
ich habe jetzt hier auf getContentPane() verzichtet wg. der Übersichtlichkeit.

1. Übergabe des statischen JFrame geht nicht oder ?
2. Das Applet soll halt in einen Browser laufen und auch direkt startbar sein
deswegen die Klasse als Applet
3. Wie komme ich an das Frame dran ?
 
Original geschrieben von joergdeymann
Hallo !
Ich möchte gerne in einem Panel/Applet den Titel des Frames ändern.
Normalerweise geht es ja mit : JFrame.setTitle("Hallo");

Codeauszug:
Code:
public Test extends JApplet  {
   ...
   public void changeTitle(s)  {
        Wenn kein Applet dann:
            ?.setTitle(s);
   }

  public static void main(String [] a) {
      JFrame f=new JFrame();
      Test t=new Test();
      f.add(t);
      f.setVisible(true);
 }

ich habe jetzt hier auf getContentPane() verzichtet wg. der Übersichtlichkeit.

1. Übergabe des statischen JFrame geht nicht oder ?
2. Das Applet soll halt in einen Browser laufen und auch direkt startbar sein
deswegen die Klasse als Applet
3. Wie komme ich an das Frame dran ?

Warum packst Du eigentlich die Funktionalität in die statische (!) main-Methode? Leg das doch in den Konstruktor des Test-Applets z.B.
Code:
  public static void main(String [] a)
{
  Test t=new Test();
}

public Test()
{
      JFrame f=new JFrame();
      f.add(this);
      f.setVisible(true);
}

Dann hast Du doch alles zusammen, was Du brauchst - in der Test-Klasse.
 
Erstmal entschuldige ich mich für die späte Antwort!

Ich habe das jetzt so umgesetzt wie Du mir vorgeschlagen hast, weil es
mehrere Methoden waren habe ich auch eine neue Klasse geschrieben,
die von JPanel ableitet wird.

Da ein Applet mit der init() Methode aufgerufen wird, habe ich dann hier
die neue Klasse einfach angelegt.

Die main() ist etwas schwieriger:
Ich habe die Klasse in ein Frame gepackt. muss sie aber als final deklarieren,
weil ich aus dem Listener noch eine Funktion der Klasse aufrufen will.

Warum muss die Klasse final sein (chatPanel.stop())?

Wenn ich die innerhalb der main() aufrufe, muss ich sie doch auch nicht als final deklarieren.
Bessere Lösung wäre für mich wenn das JPanel selber merken würde, dass es beendet wird.

Gibt es da was in der Richtung wie beim Applet das stop() oder den WindowListener?
Oder muss ich einen eignen Listener schreiben ?

Der Code innerhalb der Main
<code>
JFrame f=new JFrame("Client") ;

final ChatPanel chatPanel=new ChatPanel(false,args);

f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {
chatPanel.stop(); // <------ hier die Funktion
System.exit(0);
}});
f.getContentPane().add(chatPanel);
</code>
 
Die Lösung um den Frame-Titel zu ändern!

Die Lösung, um das richtige Frame zu bekommen habe ich gefunden, und für
diejenigen die es ebenfalls interessiert habe ich hier den Code.

Code:
protected Frame getFrame() {
   for (Container p = getParent(); p != null; p = p.getParent()) {
      if (p instanceof Frame) {
         return (Frame) p;
      }
   }
   return null;
}

protected void setTitle(String title) {
	getFrame().setTitle(title);
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück