Verschiedene JFrames in einem JFrame anzeigen

nossek

Aktives Mitglied
Guten Abend,

ich habe ein Vokabeltrainer-Programm geschrieben. Die Steuerung läuft über zwei JFrames ("Edit" = neue Vokabeln eingeben und "Test" = Vokabeln testen).
Jetzt wäre es schön, wenn man EIN Hauptfenster mit Menü hätte, wobei man über das Menü u.a. auswählen kann, ob darin das "Edit-" ODER das "Test-frame" angezeigt werden soll.

Hier ist ein gut verständliches Beispiel, wie man ein JFrame mit Menü erzeugt. Aber wie bekommt man das hin, das andere JFrames darin angezeigt werden können?
"this.add(editframe)" Im code des Hauptfensters funktioniert nicht.

Eine Idee wäre, die einzubettenden JFrames zu JPanels umzuschreiben, und dann im Code des Hauptfensters this.add(editpanel) und this.remove(editpanel) zu schreiben...
(erscheint mir erstmal sinnvoll, weil: wieso soll etwas ein JFrame sein, wenn es nicht "standalone" angezeigt werden soll?!)

kann das funktonieren, ist das eine gute Lösung oder gibt es etwas besseres?
bin wie immer für jeden Hinweis dankbar!
 

jgh

Top Contributor
ein Programm sollte genau einen Frame haben.
Alles andere kannst du mit Panels machen...und imho ist das ne gute Lösung!
 

nossek

Aktives Mitglied
Hmm, wenn im Konstruktor des JFrames steht
add(editPanel);
wird das entsprechende JPanel im JFrame erwartungsgemäß angezeigt.
Ich möchte aber (wie gesagt) abhängig von Events mal das eine, mal das andere JPanel anzeigen.

Da habe ich erstmal festgestellt daß
Java:
editAction.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                add(editpanel);
            }
        });
nicht geht. (add ist keine Mehode von Actionlistener)
Selbst implementierte Methoden darf man aus der Methode actionPerformed() des ActionListeners heraus aber offenbar aufrufen. Kann mir das jemand erklären?

Zweite Frage:
Auch wenn ich eine eigene Methode
Java:
public void showEditPanel() {
        add(editPanel);
}
implementiere und die im ActonListener aufrufe, wird das Panel nicht angezeigt. Das verstehe ich auch nicht!
 
Zuletzt bearbeitet:

jgh

Top Contributor
du solltest im Frame über die Methode [c]frame.getContentPane()[/c] adden, bzw. removen.
evtl. auch auf dem Frame, oder dem Panel die [c]validate() & | repaint()[/c] Methode aufrufen.

hier mal ein kurzes Bsp, dass nach jedem Button-Event das Panel wechselt...schau dir aber nicht viel von diesem Code ab, da es spät ist und mit heißer Feder gestrickt^^
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class FrameBsp {

	JFrame f;
	JPanel p1, p2;
	JButton b;
	int panel;

	public static void main(String[] args) {
		new FrameBsp();

	}

	public FrameBsp() {

		intitFrame();
		initPanel();
		initButton();

	}

	private void initButton() {
		b = new JButton("Wechseln der JPanels");
		b.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (panel == 1) {
					f.getContentPane().remove(p1);
					f.getContentPane().add(p2, BorderLayout.CENTER);
					panel = 2;

				} else if (panel == 2) {
					f.getContentPane().remove(p2);
					f.getContentPane().add(p1, BorderLayout.CENTER);
					panel = 1;
				}
				f.validate();
				f.repaint();
			}
		});
		f.getContentPane().add(b, BorderLayout.SOUTH);
	}

	private void initPanel() {
		p1 = new JPanel();
		p2 = new JPanel();
		p1.setBackground(Color.RED);
		p2.setBackground(Color.yellow);

		f.getContentPane().add(p1);
		panel = 1;
	}

	private void intitFrame() {
		f = new JFrame();
		f.setSize(new Dimension(500, 500));
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);

	}
}
 
Zuletzt bearbeitet:

nossek

Aktives Mitglied
Vielen Dank für die wertvollen Hinweise und den Beispielcode, jgh. Jetzt funktoniert es.

Auffällig an Deinem Beispiel ist, daß Deine Beispielklasse nicht von JFrame erbt (so wie ich es erstmal probiert habe) sondern ein JFrame Objekt als Instanzvariable enthält. Das hat offenbar den Vorteil, daß man in der Methode actionPerformed im Listener direkt auf die Methode des Frames zugreifen kann.

Mir ist der Grund für diesen Unterschied weiterhin nicht klar. Könnte mir da freundlicherweise nochmal jemand auf die Sprünge helfen?
 

Dit_

Bekanntes Mitglied
Mir ist der Grund für diesen Unterschied weiterhin nicht klar. Könnte mir da freundlicherweise nochmal jemand auf die Sprünge helfen?

Ist eigentlich Geschmackssache ohne Vererbung ist dein JFrame zu 100% View, mit Vererbung kannst du deine MyJFrame Klasse auch ActionListener implementieren lassen. in dem Fall ist die Klasse MyJFrame View und Steuerung zugleich.

Ach ja noch was

Wenn du Eclipse zB als IDE benutzt und mir einem Objekt der Klasse MyJFrame das von JFrame erbt arbeitest
Java:
MyJFrame myFrame = new MyJFrame();

dann wirst du feststellen dass myFrame natürlich alle Methoden von JFrame übernimmt, so dass es manchmal dauern kann, bis man eine selbstgeschriebene Methode in der Liste gefunden hat :)


P.S. Also ich würde lieber statt remove(..)/add(..) und validate()/repaint() einfach mal
CardLayout verwenden

dann kannst du viele verschiedene JPanels wie Seiten hinzufügen jede davon hat eine ID
zb so

Java:
...
_pageHolder 		= new JPanel(new CardLayout());
_pageHolder.add(jPanel_1,	"meineLieblingsPanel");
_pageHolder.add(jPanel_2,	"diese ist nicht so geil");
_pageHolder.add(jPanel_3,	"diese kann ich gar nciht leiden");
... usw

später kannst du einfach so die Seiten "switchen"

Java:
CardLayout cardLayout = (CardLayout) _pageHolder.getLayout();
cardLayout .show(_pageHolder, "meineLieblingsPanel");
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
T for-each-Schleife, verschiedene Datentypen Java Basics - Anfänger-Themen 1
HoT verschiedene ArrayLists mit ähnlichem Namen in for-Schleife aufrufen Java Basics - Anfänger-Themen 3
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
N verschiedene Reihenfolgen ausgeben Java Basics - Anfänger-Themen 15
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
B String auseinander nehmen in verschiedene Teile Java Basics - Anfänger-Themen 9
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
W Verschiedene Bibliotheken in einer Anwendung? Java Basics - Anfänger-Themen 2
tuc Erste Schritte verschiedene objekte in einem feld speichern Java Basics - Anfänger-Themen 4
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
GoldenShadow Input/Output Verschiedene Versionen von Input/Output Java Basics - Anfänger-Themen 3
I Drucken in Java / verschiedene Papierformate Java Basics - Anfänger-Themen 0
P Verschiedene Java Versionen nutzen Java Basics - Anfänger-Themen 6
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
S write(), weshalb verschiedene Ausgaben? Java Basics - Anfänger-Themen 4
E Erste Schritte Verschiedene Anfängerfragen (Rekursion, Terminierung, Schleife, etc.) Java Basics - Anfänger-Themen 5
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
B Verschiedene Objekte in 2 dimensionalem Array speichern Java Basics - Anfänger-Themen 10
S Datei ausführen, verschiedene Ordner Java Basics - Anfänger-Themen 2
O Verschiedene Farben in einer GUI Java Basics - Anfänger-Themen 15
R Klassen Mehrere/Verschiedene Objekte umcasten Java Basics - Anfänger-Themen 8
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
S textPane verschiedene formatierungen Java Basics - Anfänger-Themen 8
K Verschiedene JDK´s paralell nutzen? Java Basics - Anfänger-Themen 3
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
H 2 verschiedene Objekte in Liste mit Compareable sortieren Java Basics - Anfänger-Themen 7
G Erste Schritte Über verschiedene Datentypen iterieren. Gibt es sowas? Java Basics - Anfänger-Themen 19
N Verschiedene Klassen als Parameter elegant übergeben? Java Basics - Anfänger-Themen 4
X Listen und verschiedene Methoden Java Basics - Anfänger-Themen 6
B Zwei verschiedene Daten vergleich Java Basics - Anfänger-Themen 2
K Input/Output Verschiedene Ordner für Java u.v.m. Projekte Java Basics - Anfänger-Themen 3
G Umwandlung in verschiedene Zahlensysteme Java Basics - Anfänger-Themen 4
R Verschiedene Jar Versionen nutzen Java Basics - Anfänger-Themen 14
D Umgebungsvariable verschiedene Werte von JAVA_HOME? Java Basics - Anfänger-Themen 4
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
F Info zwischen verschiedene Klassen austauschen Java Basics - Anfänger-Themen 4
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
Blindxantos Klassen in verschiedene Packages unterteilen Java Basics - Anfänger-Themen 2
F verschiedene Daten abspeichern Java Basics - Anfänger-Themen 13
A Datentypen Verschiedene Threads synchronisieren Java Basics - Anfänger-Themen 3
D Mehrere verschiedene Farben pro fillRect Java Basics - Anfänger-Themen 3
M Verschiedene Werte in methoden Java Basics - Anfänger-Themen 3
K Verschiedene (Thread) Objekt-Positionen (int) in einem Array zusammenfassen Java Basics - Anfänger-Themen 3
J Verschiedene Rückgabetypen(int int char) Java Basics - Anfänger-Themen 10
S Datentypen Die verschiedene Java Datentypen [Anfänger] Java Basics - Anfänger-Themen 8
J OOP verschiedene Objekttypen ablegen Java Basics - Anfänger-Themen 4
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
capgeti Verschiedene Rückgabetypen ohne Typecast möglich? Java Basics - Anfänger-Themen 7
S Verschiedene Arrays über Index aufrufen Java Basics - Anfänger-Themen 5
Developer_X in JEditorPane verschiedene Farben, verwenden Java Basics - Anfänger-Themen 7
C verschiedene Label auf Knopfdruck abrufen Java Basics - Anfänger-Themen 4
L Verschiedene Fonts für verschiedene Dialogelemente Java Basics - Anfänger-Themen 2
G Verschiedene Packages Java Basics - Anfänger-Themen 3
G Daten in verschiedene Listen schreiben Java Basics - Anfänger-Themen 5
C Zustandsanzeige durch verschiedene Klassen Java Basics - Anfänger-Themen 4
S verschiedene Versionen Java Basics - Anfänger-Themen 2
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
T verschiedene Anfängerfragen Java Basics - Anfänger-Themen 20
J Verschiedene Ausgaben bei gleichen Ausdrücken (Typecasting?) Java Basics - Anfänger-Themen 5
N Verschiedene Input/Output Klassen Java Basics - Anfänger-Themen 3
G verschiedene datentypen in arraylist Java Basics - Anfänger-Themen 14
L verschiedene JPanel-Instanzen erstellen Java Basics - Anfänger-Themen 8
L 2 verschiedene Typen in einer Tabelle ablegen Java Basics - Anfänger-Themen 18
N Problem mit Tastatureingaben für verschiedene Datentypen Java Basics - Anfänger-Themen 3
L verschiedene formuare in einem fenster öffnen Java Basics - Anfänger-Themen 8
I Array für verschiedene Datentypen? Java Basics - Anfänger-Themen 5
R verschiedene dateitypen öffnen Java Basics - Anfänger-Themen 5
L verschiedene zeichen einlesen Java Basics - Anfänger-Themen 5
C 2 verschiedene Tables = 2 verschiedene Renderer ? Java Basics - Anfänger-Themen 5
S mit Buttons verschiedene Bilder laden Java Basics - Anfänger-Themen 4
S klassen in verschiedene Dateien Java Basics - Anfänger-Themen 5
3 Verschiedene Fragen (bin neu hier) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben