bestimmten Frame anzeigen lassen?

leaRner

Mitglied
n'morgen,
ich suche die Möglichkeit, durch das Klicken auf einen Button ein bestimmtes Frame anzeigen zu lassen. Um es etwas expliziter zu sagen: Ich habe ein Programm, mit welchem man auf mehrere Seiten kommt und ich möchte einen "Startseite"-Knopf einfügen, allerdings weiß ich nicht, wie ich nur dieses Frame anzeigen lassen kann (in dem Falle auch alle anderen schließen bzw.
Code:
setVisible(false);
(da ich weiterhin auf die Seiten zugreifen möchte, ohne das Programm zu schließen)

Ich habe probiert, beim Öffnen eines neuen Frames einfach das vorherige auszublenden:

Java:
	private class Listener1 implements ActionListener
	{
		public void actionPerformed(ActionEvent arg0)
		{
			new Angebote2();
			setVisible(false);
		}
	}

Allerdings komme ich dann mit meinem "Zurück"-Button, welcher in dem Sinne funktioniert, dass das Fenster nicht mehr sichtbar ist, dafür das andere Fenster aber ja nicht mehr sichtbar ist und ich es nicht neu anzeigen lassen kann (weil ich dafür auch keine Methode gefunden habe).

Was wäre hier die beste Lösung bzw. wie kann ich einen bestimmten Frame (wieder) anzeigen lassen? Vielleicht ist es ja auch möglich, sozusagen wieder an den Start des Programms zu gehen oder alle Fenster außer das Startfenster eben anzeigen zu lassen.

Danke schonmal,
leaRner
 
Danke erstmal für die Antwort.

Meinst du etwa:

Java:
	private class Listener1 implements ActionListener
	{
		public void actionPerformed(ActionEvent arg0)
		{
			setVisible(false);
			setVisible(true);
		}
	}

Dann wird das Fenster ja erst ausgeblendet, dann wieder eingeblendet. Ist theoretisch ja auch möglich, allerdings weiß ich nicht, wie ich einen Frame "ansprechen" kann (
Code:
nameDesFrames.setVisible(true);
funktioniert nicht)

Das mit den Panels ist zwar schön und gut, da es aber viele Inhalte sind und ich nicht dauerhaft

Java:
panel1.setVisible(true);
panel2.setVisible(false);
panel3.setVisible(false);

(und so weiter halt, ich bräuchte locker 7-8 Panels und das ist mir zu unübersichtlich, da gefallen mir mehrere Frames besser) machen will, wie gesagt lieber Frames.

Lg,
leaRner
 
Du könntest die Panels in einem Array speichern aber da du lieber Frames benutzen möchtest, müsstest du den Frames eine Instanzvariable mitgeben. Der Konstrunktor sähe dann so aus:
Java:
public Frame2(Frame frame1){
this.frame1=frame1;
//+ den ganzen Rest, der in so einen Konstruktor gehört
}

Oben in der Klasse, bei den Klassenweiten Variablen müsstest du dann noch eine Variable Frame frame1; machen. Das ist eine sogenannte Instanzvariable aber noch ohne Wert. Im Konstruktor füllst du diese dann mit einem Wert. (nämlich dem ersten Frame)
Über diese Instanzvariable kannst du dann auf sämtliche, nicht als private oder protected deklarierten Methoden und Variablen zugreifen. So auch auf setVisible(boolean).

Diese Möglichkeit ist zwar schnell aber ein bisschen unschön, da man schnell üdurcheinanderkommt. Besser wäre es, wenn du eine Oberklasse machst, die erst alle Frames unsichtbar erstellt und dann allen Frames die Instanzvariablen der anderen übergibt.
Das darf dann aber nicht über den Konstruktor laufen sondern über die Instanzvariablen innerhalb der Oberklasse. Also in Pseudocode so:
Frame frame1= new Frame1();
Frame frame2 = new Frame2();
Frame usw.

frame1.frame2=frame2;
frame1.frame3=frame3;
usw.

Noch besser wäre es, wenn du jedem Frame aus der Oberklasse ein Array mit den Instanzvariablen übergibst.



Das war jetzt viel auf einmal. Such dir einfach eine Möglichkeit aus (mein Favourit ist die letzte. Das muss aber nicht deiner sein) und dann erkläre ich dir genau, was du da tun muss.


EDIT: Das mit dem Array klappt bei Panels auch.
 
Zuletzt bearbeitet:
Also momentan hab ich es eben so, dass ich in der Hauptklasse einen neuen Frame erstelle und über die jeweiligen Frames dann immer wieder einen neuen erstelle. Also in der Hauptklasse z.B. erstelle ich Frame1, in Frame1 erstelle ich Frame2, etc.

Ich weiß nicht, welche Methode mir gefällt, am Besten wäre die ressourcensparendste (falls es denn eine gibt) bzw. die am einfachsten anzuwendende. Aber Methode 2 mit "frame1.frame2 = frame2;" hört sich schonmal gut an, wenn die empfehlenswert ist. Solange es am Ende funktioniert, bin ich glücklich ;o)
 
Wieso benutzt du nicht Panels und verwendest das CardLayout ?
Das wäre immer eine einzige Linie Code zum wechseln der Ansicht.

Falls du das CardLayout nicht kennst, solltest du dir das aufjedenfall mal anschauen.
 
Ja, CardLayout wäre hier wirklich sinnvoller. Ansonsten solltest du praktisch jedem Fenster eine ID mitgeben, und diese dann in eine (Array)List schreiben.

Java:
ArrayList<JFrame> listeAllerFrames = new ArrayList<JFrame>();

// Wenn du ein neues Fenster erstellst

listeAllerFrames.add(this);
int id = listeAllerFrames.size() - 1;
// Diese ID musst du irgendwie im Frame abspeichern

// Wenn du jetzt ein Fenster sichtbar setzen willst und alle anderen unsichtbar:

public void setVisible(int id) {

    for(int i = 0; i < listeAllerFrames.size(); i++)
        listeAllerFrames.get(i).setVisible(i == id);
}

So nach dem Prinzip würde ich das lösen.
 

Zurück
Oben