Neuen JFrame öffnen und alten schließen

Oli_FFM

Mitglied
Hi Leute,

ich brauche dringend Hilfe, ich bin am Verzweifeln!

Ich bin dabei ein Programm zu schreiben. Ist ein Kochbuch mit Hauptmenü. Ich habe mir also eine GUI für das Menü erstellt und dort Buttons eingebaut. Die Buttons sollen eine anderes Fenster (also einen neuen Frame) öffnen. Und das tun sie auch, kein Thema. Nur dann kommt mein Problem:

Ich möchte also den neuen Frame öffnen (kein Problem), Dann habe ich im neuen Frame wieder einen Button und sobald ich diesen drücke soll das zweite Frame sich schließen und das 3 Frame öffnen, so dass nur der neue offen und mein Hauptfenster offen ist.

Bitte um Hilfe ???:L
 

Java20134

Bekanntes Mitglied
Naja das ist eigentlich auch nicht so schwer. Dein JFrame kannst du mit zwei Methoden schließen.
Java:
JFrame frame; 
frame.dispose(); //1.Methode: Das JFrame arbeitet noch ganz kurz und schließt sich selbst
frame.setVisible(false); //2.Methode: Das JFrame ist einfach nicht mehr sichtbar
Bei der ersten Methode bin ich mir nicht ganz sicher, ob man in der Methode setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); angeben muss. Das müsstest du dann einmal ausprobieren.
 
Zuletzt bearbeitet:

Oli_FFM

Mitglied
Java:
	public class Rezepte extends JFrame implements ActionListener{

	/*
	 * Instanzvariablen
	 */
		  private JPanel jpnlCenter = new JPanel();
		  private JPanel jpnlSouth = new JPanel();
		  private Container cp;
		  private JLabel jlblTitel;
		  private JLabel jlblWilkommen;
		  private JButton jbtFleisch = new JButton ("Fleisch");
		  private JButton jbtVegetarisch = new JButton ("Vegetarisch");
		  private JButton jbtHome = new JButton ("Home");
		  
	/**
	* Erzeugt ein Fenster mit dem spezifizierten Titel.
	* 
	*  
	* 
	* @param title Titel des Fensters
	* 
	*/
		  
		  
		  
		  
		  public Rezepte (String title) {
		    super(title);
		    setSize(450, 290);
		    

		    cp = getContentPane();
		    cp.add(BorderLayout.CENTER, jpnlCenter); 
		    // Standart ist das BorderLayout
		    jpnlCenter.setLayout(null);

		    // Panel im unteren Bereich
		    cp.add(BorderLayout.SOUTH, jpnlSouth);

		    // Panel im oberen Bereich
		    //cp.add(jPanelNorth, BorderLayout.NORTH);

		    erstellenWidgets();
		    setzenLayoutManager();
		    hinzufuegenWidgets();
		    actionlistener();

		    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		    setLocationRelativeTo(null);

		  }

		  private void erstellenWidgets() {

		    jlblTitel = new JLabel("Rezepte");
		    jlblTitel.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 30));
		    jlblTitel.setForeground(Color.BLACK);
		    jlblTitel.setOpaque(true);
		    jlblTitel.setBackground(Color.CYAN);
		    jlblTitel.setHorizontalAlignment(SwingConstants.CENTER);


		    jlblWilkommen = new JLabel("Treffen Sie bitte ihre Auswahl!");
		    jlblWilkommen.setHorizontalAlignment(SwingConstants.CENTER);
		    jlblWilkommen.setFont(new Font("Arial", Font.BOLD, 14));
		    jlblWilkommen.setPreferredSize(new Dimension(0, 150));
		    jlblWilkommen.setForeground(Color.BLACK);
		    jlblWilkommen.setOpaque(true);
		    jlblWilkommen.setBackground(Color.WHITE);
		    jlblWilkommen.setAlignmentX(LEFT_ALIGNMENT);
		    
		    
		    // Buttongröße ändern
		    jbtFleisch.setPreferredSize(new Dimension(140,50));
		    jbtFleisch.setFont(new Font("Arial", Font.BOLD, 14));
		    jbtVegetarisch.setPreferredSize(new Dimension(140,50));
		    jbtVegetarisch.setFont(new Font("Arial", Font.BOLD, 14));
		    jbtHome.setPreferredSize(new Dimension(75,50));
		    jbtHome.setFont(new Font("Arial", Font.BOLD, 14));
		    
		    
		    jpnlSouth.add(jbtFleisch);
		    jpnlSouth.add(jbtVegetarisch);
		    jpnlSouth.add(jbtHome);

		    		    
		  }
		  
		  private void actionlistener() {
				 

				    jbtFleisch.addActionListener(this);
				    jbtVegetarisch.addActionListener(this);
				    jbtHome.addActionListener(this);
				    

				    }
				    public void actionPerformed(ActionEvent e) {
						// TODO Auto-generated method stub
						Object obj = e.getSource();

						// Home Befehl wenn Home Button betätigt wird
						if (obj == jbtHome) {
							dispose();
								}
						
						}

		  private void setzenLayoutManager() {
		    cp.setLayout(new BorderLayout());

		  }

		  private void hinzufuegenWidgets() {
		    cp.add(BorderLayout.NORTH, jlblTitel);
		    cp.add(BorderLayout.SOUTH, jpnlSouth);
		    cp.add(BorderLayout.CENTER, jlblWilkommen);
		  }
		}

Hier ist die zweite Klasse.
Wollte das so machen das ich entweder beim öffnen eines weiteren Fensters das vorherige geschlossen wird oder das ich Über meinen Home Button auf das Hauptfenster zurück komme.

@Java20134 Ich bin leider anfänger daher fallen mir auch solche sachen leider schwer oder besser gesagt sind Kompliziert :(
 

Oli_FFM

Mitglied
@Java20134
Ich habe das jetzt mit deiner 2 Methode ausprobiert nur leider bekomme ich da einen Fehler :-/

JFrame Rezeptbuch;
Rezeptbuch.setVisible(false);

Was habe ich da falsch gemacht?
 

Oli_FFM

Mitglied
Java:
public class Rezeptbuch extends JFrame implements ActionListener{

	/*
	 * Instanzvariablen
	 */
		  private JPanel jpnlCenter = new JPanel();
		  private JPanel jpnlSouth = new JPanel();
		  private Container cp;
		  private JLabel jlblTitel;
		  private JLabel jlblWilkommen;
		  private JButton jbtRezepte = new JButton ("Rezepte");
		  private JButton jbtVorschläge = new JButton ("Vorschläge");
		  private JButton jbtHome = new JButton ("Home");
		  
	/**
	* Erzeugt ein Fenster mit dem spezifizierten Titel.
	* 
	*  
	* 
	* @param title Titel des Fensters
	* 
	*/
		  
		  
		  
		  
		  public Rezeptbuch (String title) {
		    super(title);
		    setSize(450, 290);
		    

		    cp = getContentPane();
		    cp.add(BorderLayout.CENTER, jpnlCenter); 
		    // Standart ist das BorderLayout
		    jpnlCenter.setLayout(null);

		    // Panel im unteren Bereich
		    cp.add(BorderLayout.SOUTH, jpnlSouth);

		    // Panel im oberen Bereich
		    //cp.add(jPanelNorth, BorderLayout.NORTH);

		    erstellenWidgets();
		    setzenLayoutManager();
		    hinzufuegenWidgets();
		    actionlistener();

		    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		    setLocationRelativeTo(null);

		  }

		  private void erstellenWidgets() {

		    jlblTitel = new JLabel("Rezeptbuch");
		    jlblTitel.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 30));
		    jlblTitel.setForeground(Color.BLACK);
		    jlblTitel.setOpaque(true);
		    jlblTitel.setBackground(Color.MAGENTA);
		    jlblTitel.setHorizontalAlignment(SwingConstants.CENTER);


		    jlblWilkommen = new JLabel("Treffen Sie bitte ihre Auswahl!");
		    jlblWilkommen.setHorizontalAlignment(SwingConstants.CENTER);
		    jlblWilkommen.setFont(new Font("Arial", Font.BOLD, 14));
		    jlblWilkommen.setPreferredSize(new Dimension(0, 150));
		    jlblWilkommen.setForeground(Color.BLACK);
		    jlblWilkommen.setOpaque(true);
		    jlblWilkommen.setBackground(Color.WHITE);
		    jlblWilkommen.setAlignmentX(LEFT_ALIGNMENT);
		    
		    
		    // Buttongröße ändern
		    jbtRezepte.setPreferredSize(new Dimension(140,50));
		    jbtRezepte.setFont(new Font("Arial", Font.BOLD, 14));
		    jbtVorschläge.setPreferredSize(new Dimension(140,50));
		    jbtVorschläge.setFont(new Font("Arial", Font.BOLD, 14));
		    jbtHome.setPreferredSize(new Dimension(75,50));
		    jbtHome.setFont(new Font("Arial", Font.BOLD, 14));
		    
		    
		    jpnlSouth.add(jbtRezepte);
		    jpnlSouth.add(jbtVorschläge);
		    jpnlSouth.add(jbtHome);

		    		    
		  }
		  
		  private void actionlistener() {
				 // Action fuer den Rezeptbuch Button

				    jbtRezepte.addActionListener(this);
				    jbtVorschläge.addActionListener(this);
				    jbtHome.addActionListener(this);

				    }
				    public void actionPerformed(ActionEvent e) {
						// TODO Auto-generated method stub
						Object obj = e.getSource();
						
						// Rezeptbuch Befehl wenn Rezeptbuch Button betätigt wird
						if (obj == jbtRezepte) {
							JFrame Rezepte = new Rezepte ("Hightech-Kühlschrank") ;
							Rezepte.setVisible(true);
						}

						// Home Befehl wenn Home Button betätigt wird
						if (obj == jbtHome) {
							this.dispose();
								}
						
					
						
						}

		  private void setzenLayoutManager() {
		    cp.setLayout(new BorderLayout());

		  }

		  private void hinzufuegenWidgets() {
		    cp.add(BorderLayout.NORTH, jlblTitel);
		    cp.add(BorderLayout.SOUTH, jpnlSouth);
		    cp.add(BorderLayout.CENTER, jlblWilkommen);
		  }
		}

Die Klassen sind weit gehend Identisch. Nur bekomme ich wie gesagt das Problem nicht gelöst das aktuelle fenster zu Schließen sobald ich über einen Button das neue Öffne. :bahnhof:
 

Java20134

Bekanntes Mitglied
Die Klasse Rezeptbuch ist die Main Klasse, soweit ich das mitbekommen habe. Dort kannst du immer wieder ein neues Rezept erstellen. dabei nimmst du ja bis hierhin immer dieselbe Klasse. Deshalb würde ich das erst einmal ganz einfach machen, indem du in deinem Konstruktor schon einmal ein Rezept erstellst ohne das Visible zu setzen. In der Methode des ActionListeners sagst du dann nur noch das das vorherige geschlossen werden soll und ein neues erstellt werden soll und visible sein soll.
Java:
//im Konstruktor
Rezepte rezept = new Rezepte("");

//in der Methode des ActionListener
rezept.dipose();
Rezepte rezept = new Rezepte("");
rezepte.setVisible(true);
Wenn du nun noch die Rezepte weiter kategorisierst, würde ich die weiteren Rezepte immer wieder von Rezepte erben lassen. Dadurch kannst du das oben genannte auch beibehalten und musst dir nicht noch irgendetwas ausdenken.

Beispiel:
Java:
class Roulade extends Rezept {
  weiterer Inhalt; 
}

In der Methode des ActionListener schreibst du dann bei dem Button:
Java:
rezept.dispose(); 
Rezepte rezept = new Roulade("");
rezept.setVisible(true);
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Nach klick auf Button neuen Inhalt im gleichen Fenster AWT, Swing, JavaFX & SWT 3
J Swing Neuen Command für "show"? AWT, Swing, JavaFX & SWT 2
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
F neuen Menüpunkt in jcombobox einfügen AWT, Swing, JavaFX & SWT 1
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
W Bei Button-klick neuen button in array hinzufügen AWT, Swing, JavaFX & SWT 7
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
F JTabbedPane mit Button zum Hinzufügen eines neuen Tabs AWT, Swing, JavaFX & SWT 6
R SWT TreeViewer neuen Input setzen AWT, Swing, JavaFX & SWT 3
T JTabbedPane - neuen Tab zwischen zwei anderen Tabs hinzufügen AWT, Swing, JavaFX & SWT 2
Ollek IndexOutOfBoundsException bei neuen Daten in JTable AWT, Swing, JavaFX & SWT 13
M PropertyChangeListener - JTable bei neuen Objekten updaten? AWT, Swing, JavaFX & SWT 3
D Swing FileChooser mit einem neuen Rootordner AWT, Swing, JavaFX & SWT 6
D Aufruf neuer Klasse ohne Erzeugung eines neuen Fensters AWT, Swing, JavaFX & SWT 3
E Applet Neuen Tab aus Applet öffnen AWT, Swing, JavaFX & SWT 3
Ollek Realisierung: JTable zur Laufzeit mit neuen Daten füllen AWT, Swing, JavaFX & SWT 3
T Neuen JInternalFrame von JLabel "herunterziehen" AWT, Swing, JavaFX & SWT 6
O Swing es können keine neuen Labels hinzufügt werden während der Timer läuft AWT, Swing, JavaFX & SWT 14
N Neuen Kunden anlegen AWT, Swing, JavaFX & SWT 26
R SWT Statusmeldung im neuen Fenster blockiert aufrufendes Fenster AWT, Swing, JavaFX & SWT 2
G JFile Chooser "Buttons" wie Neuen Ordner erstellen AWT, Swing, JavaFX & SWT 3
S BufferedImage & Scaling: Altes Problem im neuen Gewand AWT, Swing, JavaFX & SWT 2
G JList Neuen Eintrag sofort anzeigen AWT, Swing, JavaFX & SWT 10
M Focus beim öffnen eines neuen JFrames AWT, Swing, JavaFX & SWT 6
D JButton einen neuen ImageIcon setzen? AWT, Swing, JavaFX & SWT 2
S Problem, neuen JInternalFrame zur Laufzeit anzuzeigen AWT, Swing, JavaFX & SWT 8
G Screen nach Auswahl schließen und neuen öffnen?wie mach ichs AWT, Swing, JavaFX & SWT 8
O Brauche ich einen neuen Frame? AWT, Swing, JavaFX & SWT 2
H JTree nach setzen eines neuen TreeModels aufklappen AWT, Swing, JavaFX & SWT 2
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
Paty JFrame anfänger bräuchte hilfestellung AWT, Swing, JavaFX & SWT 7
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
Mausposition relativ zu JFrame bekommen AWT, Swing, JavaFX & SWT 6
sserio JFrame setIconImmage() funktioniert nicht AWT, Swing, JavaFX & SWT 3
N CPU Belastung bei offenem JFrame auf fast 100% AWT, Swing, JavaFX & SWT 15
N Knopf ganz oben (JFrame) AWT, Swing, JavaFX & SWT 9
N JFrame löscht alles, wenn groß gemacht AWT, Swing, JavaFX & SWT 9
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
E JFrame resizing AWT, Swing, JavaFX & SWT 2
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
L JFrame Gui in anderer Methode aufrufen AWT, Swing, JavaFX & SWT 0
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
R Swing Hat mein JFrame meinen Component? AWT, Swing, JavaFX & SWT 2
R Swing Design des oberen Balkens in JFrame AWT, Swing, JavaFX & SWT 2
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
R Swing Komponente im JFrame überschreinen sich AWT, Swing, JavaFX & SWT 7
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
L Verbindung von Code und JFrame AWT, Swing, JavaFX & SWT 4
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
T JavaFX JFrame verhalten wie JOptionPane (ErrorMessage) AWT, Swing, JavaFX & SWT 1
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
P JPanle, JFrame und Graphics AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
D Mit Jmenu neue JFrame öffnen AWT, Swing, JavaFX & SWT 2
J BackgroundJPanel passt sich dem JFrame nicht an AWT, Swing, JavaFX & SWT 7
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
K JFrame bei JUnit Tests AWT, Swing, JavaFX & SWT 2
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
JR2205 Swing JxMaps Einbindung Netbeans JFrame AWT, Swing, JavaFX & SWT 4
Zar von Domarus JFrame zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 3
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
Joker4632 JFrame in eine Runnable auslagern? AWT, Swing, JavaFX & SWT 4
M Limit für JFrame-Vergrößerung AWT, Swing, JavaFX & SWT 8
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
MaxG. JFrame Größe ändern AWT, Swing, JavaFX & SWT 16
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
Ghostman1711 JFrame closing AWT, Swing, JavaFX & SWT 3
R Engineklasse mit JFrame AWT, Swing, JavaFX & SWT 4
M Default-WindowListener JFrame entfernen (Stichwort: iconified) AWT, Swing, JavaFX & SWT 4
ms_cikar Jframe zurück zu frame1 AWT, Swing, JavaFX & SWT 14
C Jframe ohne Rahmen AWT, Swing, JavaFX & SWT 3
lumpigerAffe Swing Jframe aktualisieren AWT, Swing, JavaFX & SWT 27
A Swing JFrame neuzeichnen lassen, position neu berechnen lassen? AWT, Swing, JavaFX & SWT 9
R JFrame schließen AWT, Swing, JavaFX & SWT 9
P Swing JFrame minimiert sich bei Doppelklick auf die Titel-Leiste AWT, Swing, JavaFX & SWT 16
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
I JFrame an Bildschirm anpassen AWT, Swing, JavaFX & SWT 1
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
P JFrame schrumpft bei Doppelklick auf die Titelleiste AWT, Swing, JavaFX & SWT 0

Ähnliche Java Themen

Neue Themen


Oben