# Überschreiben einer JFrame



## hanspeter99 (11. Mai 2007)

So erst einmal zu meinem Problem. Hab ein Main Menü das wie folgt aussieht:
import javax.swing.*;

import java.awt.event.*;
import java.awt.*;

public class Main extends JFrame{

	public Main(){
	super();
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	//Hintergrund Bild laden
	ImageIcon icon = new ImageIcon(Main.class.getResource("../main_bild.jpg"));
	JLabel bild = new JLabel(icon);
	bild.setSize(icon.getIconWidth(),icon.getIconHeight());

	//Hintergrund setzen und ContentPane durchsichtig machen
	JLayeredPane lay = this.getLayeredPane();
	lay.add(bild,new Integer(-30001));
	lay.setLayer(bild,-31001);
	getRootPane().setOpaque(true);
	((JComponent) this.getContentPane()).setOpaque(false);

	//Exit Button einfügen
	ExitButton exitb = new ExitButton();
	add(exitb);

	Credits_Button cb = new Credits_Button();
	add(cb);

	//Ueberschrift einfügen
	Ueberschrift ueberschrift = new Ueberschrift();
	getContentPane().add(ueberschrift);


	setSize(1035, 684);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub


		Main m = new Main();
		m.show();

	}
}

So jetzt will ich über den Button Credits das aktuelle Frame überschreiben was bisher aber nur funktioniert indem Eclipse ein neues Frame darstellt.

import javax.swing.*;

import java.awt.*;

import Main.Ueberschrift;
import Main.Main;

public class Credits extends JFrame {

	public Credits(){
		super();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		//Hintergrund Bild laden
		ImageIcon icon = new ImageIcon(Main.class.getResource("../main_bild.jpg"));
		JLabel bild = new JLabel(icon);
		bild.setSize(icon.getIconWidth(),icon.getIconHeight());

		//Hintergrund setzen und ContentPane durchsichtig machen
		JLayeredPane lay = this.getLayeredPane();
		lay.add(bild,new Integer(-30001));
		lay.setLayer(bild,-31001);
		getRootPane().setOpaque(true);
		((JComponent) this.getContentPane()).setOpaque(false);

		//Ueberschrift
		Ueberschrift ueberschrift = new Ueberschrift();
		getContentPane().add(ueberschrift);


		setSize(1035, 684);
	}

	public static void main(String[] args){
		Credits c = new Credits();
		c.show();
	}
}

/*Credits Button Klasse noch:*/

public class Credits_Button extends JButton{

	public Credits_Button(){
		super("Credits");

			//Formatierung
			setFont(new Font("Arial", Font.BOLD, 18));
			setSize(400,50);
			setLocation(550,500);
			setOpaque(false);


			//Aktion
			ActionListener al = new ActionListener(){
				public void actionPerformed(ActionEvent e){
					Credits c = new Credits();
					c.show();

				}
			};
			addActionListener(al);


	}
}


Wie funktioniert das, dass ich z.B. das Frame der Main überschreibe mit dem Credits Frame oder das Frame der Main schließe.

Hoffe ihr könnt mir weiter helfen


----------



## Kulabac (14. Mai 2007)

Naja, das Frame der Main schließen geht einfach für .setVisible(false). 

Aber das ganze Frame einfach so "überschreiben"? Weiß nicht, was genau du damit meinst. Wäre doch im Prinzip einfacher statt von JFrame von JPanel zu erben und dann einfach das JPanel als einzigen Inhalt des (einzigen) Frames zu nehmen. Vorteil wäre halt, dass man das JPanel auf Knopfdruck aus dem Frame löschen und durch das andere ersetzen kann.


----------

