GUI mit Swing - Wie wechselt das JPanel

mmaxde

Grünschnabel
Halle tutorials.de
nachdem ich Eure Seite schon lange "passiv" nutze, nun mein erstes eigenes Thema.
Hoffe es ist nicht zu primitiv, habe schon tagelang im Internet gelesen, aber keine passende Lösung für mich gefunden.
Ich möchte bzw. habe mit Swing und dem VE eine Anwendung erstellt und habe nun ein Problem mit JMenu. Was muß ich in den ActionListener schreiben um den Inhalt des JPanels zu tauschen.
Der Inhalt, der getauscht werden soll, befindet sich in extra Klassen.
Wie gesagt, das Menü habe ich mit VE "zusammen" geklickt.

Hier meine Klasse Start:
Code:
package menu;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;

public class Start extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JMenuBar jJMenuBar = null;
	private JMenu jMenu = null;
	private JMenuItem jMenuItem_aus1 = null;
	private JMenuItem jMenuItem_aus2 = null;

	public Start() {
		super();
		initialize();
	}

	private void initialize() {
		this.setSize(300, 200);
		this.setJMenuBar(getJJMenuBar());
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
		}
		return jContentPane;
	}

	private JMenuBar getJJMenuBar() {
		if (jJMenuBar == null) {
			jJMenuBar = new JMenuBar();
			jJMenuBar.add(getJMenu());
		}
		return jJMenuBar;
	}

	private JMenu getJMenu() {
		if (jMenu == null) {
			jMenu = new JMenu();
			jMenu.setText("Auswahl");
			jMenu.add(getJMenuItem_aus1());
			jMenu.add(getJMenuItem_aus2());
		}
		return jMenu;
	}

	private JMenuItem getJMenuItem_aus1() {
		if (jMenuItem_aus1 == null) {
			jMenuItem_aus1 = new JMenuItem();
			jMenuItem_aus1.setText("Anw1");
			jMenuItem_aus1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Anw1 anw1 = new Anw1();
					anw1.repaint();
				}
			});
		}
		return jMenuItem_aus1;
	}

	private JMenuItem getJMenuItem_aus2() {
		if (jMenuItem_aus2 == null) {
			jMenuItem_aus2 = new JMenuItem();
			jMenuItem_aus2.setText("Anw2");
			jMenuItem_aus2.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					Anw2 anw2 = new Anw2();
					anw2.repaint();
				}
			});
		}
		return jMenuItem_aus2;
	}
}

und hier die Klasse Anw1:
Code:
package menu;

import java.awt.GridBagLayout;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;

public class Anw1 extends JPanel {

	private static final long serialVersionUID = 1L;
	private JLabel jLabel = null;

	public Anw1() {
		super();
		initialize();
	}

	private void initialize() {
		GridBagConstraints gridBagConstraints = new GridBagConstraints();
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 0;
		jLabel = new JLabel();
		jLabel.setText("Anwendung 1");
		this.setSize(300, 200);
		this.setLayout(new GridBagLayout());
		this.add(jLabel, gridBagConstraints);
	}
}

Die Klaase Anw2 ist identisch zur Klasse Anw1 (zumindest in diesem Beispiel ;)).

Beim Klick auf einen der Menüpunkte passiert nichts. Was ist falsch?

Ich befürchte, die Lösung ganz leicht.

Schon mal Danke.
 
Hallo,

Code:
public void actionPerformed(java.awt.event.ActionEvent e) {
Anw1 anw1 = new Anw1();
anw1.repaint();
this.getContentPane.add(anw1);
}

Das gleiche auch bei Anw2.

Ich würde weiß nicht, ob du es schon gemacht hast, aber für mich sieht es momentan so aus, als würdest du dich nicht so richtig mit Swing auskennen. Deshalb gebe ich dir mal den Rat, benutze keinen GUI-Builder, sondern bau mal ein paar GUIs selbst. So lernst du wie Swing funktioniert und findest solche Fehler auch leicht selbst.

Gruß

Sascha
 
Danke für die schnelle Antwort.
Du hast sicher recht, dass ich mich mit Swing noch nicht so richtig auskenne. Ich habe bis jetzt hauptsächlich mit C, C++,PHP gearbeitet und muß jetzt eine Anwendung in Java erstellen. Die einzelnen Klassen machen auch was sie sollen (DB-Zugriffe, Eingaben, Ausgaben, ...). Dachte mir, das ich die GUI am einfachsten mit Swing und VE hinbekomme.

Wenn ich Deine Lösung bei mir einbaue, bekomme ich von Eclipse einen Fehler angezeigt.
Es wird in der Zeile

this.getContentPane.add(anw1);

getContentPane bemängelt.

Was ist da noch nicht O.K.?
 
Moin,

aha ... und welcher Meldung?

Hast Du schon die Schnellkorrektur versucht?
(Cursor auf den Fehler und dann <Strg>+<1> oder über das Kontextmenü, wenn Du mit der rechten Maustaste auf die Fhlermarke links klickst) :p

Gruß
Klaus
 
Hallo Klaus,

die Meldung lautet: "getContentPane cannot be resolved or is not a field"

Klick mit der linken Maustaste auf die Fehlermarke macht mir den Vorschlag:

"getContentPane cannot be resolved or is not a field"

das bringt aber auch nicht die Lösung - denke ich :(

Gruß
Gernot
 
die Meldung lautet: "getContentPane cannot be resolved or is not a field"

Klick mit der linken Maustaste auf die Fehlermarke macht mir den Vorschlag:

Hallo Gernot,

ah, ok ... dann ist es nicht das kleine quadratische Fehler-Symbol, sondern wohl das etwas größere Runde, richtig?
Dabei klappt das leider auch nicht :-(

Hast Du es mal ohne den "this"-Zeiger versucht?

Gruß
Klaus
 
Hallo Gernot,

BTW: Du musst auch wirklich mit der linken Maustaste das rote Symbol anklicken ... nicht nur draufstellen und den ToolTip anschauen ! ;)

Gruß
Klaus
 
Hallo Klaus,

das geht ja flott, bin gerade vom Mittag zurück und schon 2 Antworten von Dir.

Auch ohne this bleib es bei der Meldung siehe oben.

Beim Klick auf das rote Quadrat macht mir Eclipse folgenden Voeschlag:
Create field 'getContenPane' in type 'new ActionListener() {...}'

Ob das zur richtigen Lösung führt? :confused:
 
tja ... versuch doch mal im Debugger zu ermitteln, worauf Dein this an der Stelle eigentlich zeigt!

Mahlzeit ;-]

Gruß
Klaus
 

Neue Beiträge

Zurück