Fenster beibehalten

andreas2000

Mitglied
Hallo, habe ein einfaches (Standart)Problem, und zwar: Wie kann ich mein anfangs erstelltes Fenster beibehalten, und innerhalb dieses Fensters zwischen verschiedenen JFrames hin und herschalten? Habe nämlich bei jeden neuen Methodenaufruf das aktuelle Fenster geschlossen und ein neues Fenster geöffnet, was sehr umständlich ist.

Vielleicht kann mir jemand einen einfachen Beispielcode schicken bzw. eine Linkseite empfehlen, habe nämlich beim googeln irgendwie nichts passendes gefunden (mir fehlt wohl der daszugehörige Fachbegriff)

Danke,
Andreas.
 
Na mit setVisible(true/false) kannst du ein Fenster unsichtbar machen, das Objekt ist trotzdem noch da .. Reicht das schon?
 
Hallo, nochmals genauer:

Anstatt ein Fenster mit setVisible(false) unsichtbar zu machen und ein NEUES Fenster zu öffnen, mit einem Neuem Frame, möchte ich in meinem aktuellen Fenster bleiben, das alte Frame beenden und das neue Frame starten.
Wie ist das möglich?

Der Effekt soll u.A. der sein, das ich das einmal erstellte Fenster beliebig verschieben kann, und es dort bleibt, wenn ich aber immer wieder neue Fenster öffne, entstehen diese immer an der zugewiesenen Startposition (also meist links oben), was sehr nervig sein kann.

Bitte um Hilfe!

Zu JInternalFrame : Bin mir nicht sicher, ob das die Lösung ist, da der neue Frame im alten entsteht, also mehrere gleichzeitig geöffnet sind, ich möchte allerdings mein altes Frame beenden und anstelle davon das neue starten (im selben Fenster)
 
Hallo Andreas,

Schau mal hier:

Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class JFrameExample {

	JFrame f = new JFrame();

	JButton b = new JButton("Öffne neues Fenster");

	public JFrameExample() {

		b.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFrame g = new JFrame();
				g.setLocationByPlatform(true);
				g.setSize(300, 500);
				g.setVisible(true);
			}
		});

		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.add(b);
		f.pack();
		f.setVisible(true);
	}

	public static void main(String[] args) {
		JFrameExample test = new JFrameExample();
	}
}

Vg Erdal
 
Hallo Erdal,

du machst in deinem Beispiel ja genau das, was ich vermeiden möchte. Du hast das Frame mit dem OK Button und das Ergebnis Frame, also zwei (zudem noch gleichzeitig geöffnete) Frames, ich möchte in meiner ganzen Applikation mit nur einem einzigen Frame arbeiten, das immer das gleiche bleibt, nur der Inhalt ändert sich.
 
Hallo Andreas,

Schau mal hier:

Code:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

public class JFrameExample implements ActionListener{

	JFrame f = new JFrame();
	
	JPanel inhalt1 = new JPanel();

	JPanel inhalt2 = new JPanel();
	
	JButton b = new JButton("Change content");
	
	JTextField t1 = new JTextField("TextField 1");
	
	JTextField t2 = new JTextField("TextField 2");
	
	JLabel l1 = new JLabel("Label 1");
	
	JLabel l2 = new JLabel("Label 2");

	boolean bol = true;
	
	public JFrameExample() {
		inhalt1.add(t1);
		inhalt1.add(t2);
		inhalt2.add(l1);
		inhalt2.add(l2);
		
		inhalt1.setBorder(BorderFactory.createTitledBorder(new TitledBorder("JPanel 1")));
		inhalt2.setBorder(BorderFactory.createTitledBorder(new TitledBorder("JPanel 2")));
		
		b.addActionListener(this);

		f.setLayout(new FlowLayout());
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.add(b);
		f.add(inhalt1);
		f.pack();
		f.setVisible(true);
	}

	public static void main(String[] args) {
		JFrameExample test = new JFrameExample();
	}

	public void actionPerformed(ActionEvent e) {
		if (bol){
			f.remove(inhalt1);
			f.add(inhalt2);
			bol = false;
			}
		else {
			f.remove(inhalt2);
			f.add(inhalt1);
			bol = true;
		}
		f.pack();
		f.repaint();
	}
}

Vg Erdal
 
Das funktioniert prima, nur wie kann man es machen, wenn man sehr viele Fenster hat und nicht genau weiß, welches gerade offen ist (für das f.remove() - dort müsste man das JPanel ja angeben, das man removen möchte). Ich habe es mit removeAll() probiert, allerdings wird dann auch der neue Inhalt nicht angezeigt (obwohl das add(), pack() und repaint() nach dem removeAll() stehen) - komisch.

Hat da jemand ne Idee?
 
Zurück