Panelinhalt im Programm verändern

Status
Nicht offen für weitere Antworten.

maxth

Aktives Mitglied
Hallo Leute,

ich hab mal wieder ein Problem. In meinem Programm habe ich ein ein BorderLayout.

Das Center Panel bekommt in meinem Programm per Klick immer einen neuen Inhalt. Ich habe mir extra Panel Klassen gemacht die den Center Panel immer füllen sollen.

Könnt ihr mir helfen das ich per Klick immer das Center Panel füllen kann?

In meiner Klasse GUI_ Main habe ich es ausprobiert.

Vielen Dank im vorraus.

GUI_Main

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Label;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;

public class GUI_Main extends JFrame implements ActionListener{
	

	Container cp = this.getContentPane();
	String iconsDirectory = "icons/";
	protected ShowViewer viewer = null;
	protected GUI_MieterlisteAnz mieter = null;

	
	String text;

	
	
	public GUI_Main(){
		
		super("EasyMKB");
		
		this.setLayout(new BorderLayout());
		this.setSize(800,600);		
		
		
		//ToolBar
		JToolBar toolBar = new JToolBar("Toolbar");
        
        
        addButtons(toolBar);
		toolBar.setFloatable(false);
		toolBar.setRollover(true);
		this.add(toolBar, BorderLayout.NORTH);
		
		//CenterPanel
		
		
		viewer = new ShowViewer();
		
		// Wohnung Panel
       JPanel PanelCenter = new JPanel();
       PanelCenter.add(new ShowViewer());
        this.add(viewer, BorderLayout.CENTER);
        viewer.setVisible(false);
        
        //Mieter Panel
        /*PanelCenter.add(new GUI_MieterlisteAnz());
        this.add(mieter, BorderLayout.CENTER);
        mieter.setVisible(false);*/
        
      // this.add(PanelCenter, BorderLayout.CENTER);
        
        JPanel PanelWest = new JPanel();
        PanelWest.setBackground(Color.WHITE);
        PanelWest.add(new Label("Wohnungen Anzeigen"));
        //PanelWest.add(new Label ("Verwaltung von Mietwohnungen"));
		this.add(PanelWest, BorderLayout.WEST);

		
		//SouthPanel
		JPanel PanelSouth = new JPanel();
		
		PanelSouth.add(new Label("Easy MKB 2009"));
		
		this.add(PanelSouth, BorderLayout.SOUTH);
		
		this.setContentPane(cp);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
		//this.add(image);
		this.setVisible(true);
		
		
		
		
	}	
	
	
	
	



	public void addButtons(JToolBar toolBar) {
		JButton button;
		button = createButton("neu", "Neue Wohnung anlegen" );
		toolBar.add(button);
		button = createButton( "wohnung", "Wohnungen Anzeigen" );
		toolBar.add(button);
		button = createButton("rechnung", "Rechnungen Anzeigen");
		toolBar.add(button);
		button = createButton("mieter", "Mieter Anzeigen");
		toolBar.add(button);
		button = createButton("benutzer", "Benutzer Anzeigen" );
		toolBar.add(button);
		button = createButton( "statistik", "Statistiken" );
		toolBar.add(button);
		button = createButton("hilfe", "Online Hilfe");
		toolBar.add(button);
		button = createButton("info", "MKB Info");
		toolBar.add(button);
		

	}

	public JButton createButton(String actionCommand, String toolTipText) {
		String imgLocation = iconsDirectory + actionCommand + ".jpg";
		JButton button = new JButton();
		button.setActionCommand(actionCommand);
		button.setToolTipText(toolTipText);
		button.addActionListener(this);
		button.setIcon(new ImageIcon(imgLocation, actionCommand));
		
		return button;
			
	}
	

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

	@Override
	public void actionPerformed(ActionEvent evt) {
		if (evt.getActionCommand().compareTo("info") == 0)
			try {
				new Info();
			} catch (IOException e) {
				
			}
			
			if (evt.getActionCommand().compareTo("hilfe") == 0)
				try {
					new Hilfe();
				} catch (IOException e) {
					
				}
				
				
				if (evt.getActionCommand().compareTo("wohnung") == 0)
					//mieter.setVisible(false);
					
					
					viewer.setVisible(true);
			    
					//this.remove(viewer);
					//viewer = new ShowViewer();
		            //this.add(viewer, BorderLayout.CENTER);
		            //repaint();
		        
					if (evt.getActionCommand().compareTo("mieter") == 0)
						
						viewer.setVisible(false);
						
						this.add(mieter, BorderLayout.CENTER);
		
	}}
 

hdi

Top Contributor
Ich hab mir den Code nicht angesehen, aber für dein Vorhaben gibt es ein spezielles Layout namens CardLayout. D.h. das Panel, das du im Center addest, kriegt das CardLayout:

Java:
centerPanel.setLayout(new CardLayout());

Dort kannst du dann erstmal alle möglichen Inhalte adden:

Java:
centerPanel.add(inhaltPanel1, "inhalt 1");
centerPanel.add(inhaltPanel2, "inhalt 2");
centerPanel.add(inhaltPanel3, "inhalt 3");
// usw

Per show() auf dem Layout kannst du auswählen welche dieser Inhalte er anzeigen soll. Das wäre dann das, was in deinen MouseListener muss:

Java:
CardLayout cl = (CardLayout) centerPanel.getLayout();
cl.show(centerPanel, "inhalt 2");
 

maxth

Aktives Mitglied
Vielen Dank für deine Antwort, ich hab versucht umzusetzen wie du es mir gesagt hast.

Es sieht ungefähr so aus

Konstruktor

Java:
public GUI_Main()

ShowViewer viewer = new ShowViewer();
GUI_MieterlisteAnz mieter = new GUI_MieterlisteAnz();

 JPanel PanelCenter = new JPanel();
       PanelCenter.setLayout(new CardLayout());
       PanelCenter.add(viewer, "Wohnungen");
       PanelCenter.add(mieter, "Mieter");

this.add(PanelCenter, BorderLayout.CENTER);

Probleme habe ich jetzt beim ActionListener

Java:
if (evt.getActionCommand().compareTo("mieter") == 0)

Wie nehme ich den Teil jetzt rein?

Java:
CardLayout cl = (CardLayout) centerPanel.getLayout();
cl.show(centerPanel, "inhalt 2");

Dieser Teil muss noch teil des Konstruktors sein?

Um meine Frage eindeutlicher zu gestalten. Wie sieht das wechseln des Layouts mit dem ActionListener aus?
 

hdi

Top Contributor
Das muss nicht unbedingt in den Konstruktor. Es ist halt nur so dass du auf dein "PanelCenter" zugreifen musst. D.h. wo auch immer du den Mouse-Listener addest, muss das also bekannt sein.

Der Code in der actionPerformed() sieht dann genau so aus wie ich ihn geschrieben habe. Natürlich musst du die Namen anpassen.

btw: Variablen-Namen schreibt man in camelCase, also panelCenter. Und Klassen schreibt man in CamelCase, also GuiMain oder GUIMain statt Gui_Main. Solche Zeichen sollten vermieden werden.
 

maxth

Aktives Mitglied
Problem dabei ist jetzt.
Java:
if (evt.getActionCommand().compareTo("wohnung") == 0)
					
				CardLayout cl = (CardLayout) PanelCenter.getLayout();
				cl.show(CenterPanel, "wohnung");


Wie mache ich das CardLayout in meinem Actioncommand bekannt?
So wie es da ist, funktioniert es leider nicht.
 

maxth

Aktives Mitglied
das Import für das CardLayout habe ich drin.

Ich scheint mit dem PanelCenter Probleme zu haben, aber wieso?
muss ich den nochmal in meinem Action command bekannt machen?
 

hdi

Top Contributor
Ich glaube eher er meint nicht das CardLayout sondern das Panel. Wie ich schon sagte, entweder du baust das alles direkt im Konstruktor zusammen (kennst du anonyme Klassen?), oder du musst das Panel deinem ActionListener übergeben, damit er es kennt.

Es ist auch grad schwer zu helfen weil ich nicht den blassesten Schimmer habe, wo genau dieser ActionCommand dranhängt. An welcher Komponente? Wo addest du ihn? Wo genau steht dann die actionPerformed() Methode?
 

maxth

Aktives Mitglied
Also

hier Adde ich den Action Command

Java:
public JButton createButton(String actionCommand, String toolTipText) {
		String imgLocation = iconsDirectory + actionCommand + ".jpg";
		JButton button = new JButton();
		button.setActionCommand(actionCommand);
		button.setToolTipText(toolTipText);
		button.addActionListener(this);
		button.setIcon(new ImageIcon(imgLocation, actionCommand));
		
		return button;

Ich arbeite mit einer Toolbar und da hängt alles dran.
 

hdi

Top Contributor
math falls du meinen letzten Post nicht gelesen hast: Du solltest dich erstmal schlau machen über den Unterschied zwischen lokalen und "globalen" Variablen.

In der FAQ finde ich dazu gar nix, deswegen hier kurze Erklärung:
Jede Variable die "frei" in der Klasse deklariert wird, ist global:

Java:
class MyClass{

   // hier stehen vllt Methoden oder der Konstruktor

   int globaleVariable;

   // hier stehen vllt weitere Methoden

}

Das bedeutet dass diese Variable überall in der Klasse sichtbar ist.
Lokale Variablen sind diejenigen, die nicht frei in der Klasse deklariert werden, sondern in einem Block. Ein Block heisst zwischen { und }.

zB eben im Konstruktor

Java:
class MyClass{

   int globaleVariable;

   public MyClass(){
      int lokaleVariable = 2;
   }
}

"loakleVariable" ist in dem Moment, wo der Block des Konstruktors aufhört, nicht mehr sichtbar. D.h. an anderen Stellen in der Klasse exisitert diese Variable nicht.
Deshalb findet dein ActionCommand auch dein Panel nicht, weil du es lokal im Konstruktor definierst.

Darum

- entweder das Panel global deklarieren, und im Konstruktor nur instantiieren
- oder im Konstruktor deklarieren, wie du es jetzt schon hast, und dann aber dem ActionListener mitgeben. Dafür musst du dir dann nen eigene ActionListener bauen der das Teil annimmt.
 

maxth

Aktives Mitglied
Also, ich habe jetzt

Java:
JPanel CenterPanel = new JPanel();
		CardLayout cl = (CardLayout) CenterPanel.getLayout();

diese zwei Teile global deklariert.

im Konstruktor habe ich

Java:
			viewer = new ShowViewer();
			mieter = new GUI_MieterlisteAnz();
			
			// Center Panel
		//	CenterPanel.setLayout(new CardLayout());
			
	      // JPanel PanelCenter = new JPanel();
	       
	      //CardLayout cl = (new CardLayout());
	       
	       CenterPanel.add(viewer, "Wohnungen");
	       CenterPanel.add(mieter, "Mieter");

this.add(CenterPanel, BorderLayout.CENTER);

Und ich in meiner ActionCommand

Java:
if (evt.getActionCommand().compareTo("wohnung") == 0)
						
						//CardLayout cl = (CardLayout) CenterPanel.getLayout();
					
						cl.show(CenterPanel, "Wohnungen");

Wenn ich das ausführen möchte bekomme ich dies hier
Java:
Exception in thread "main" java.lang.ClassCastException: java.awt.FlowLayout cannot be cast to java.awt.CardLayout
	at GUIMain.<init>(GUIMain.java:31)
	at GUIMain.main(GUIMain.java:150)
 

Michael...

Top Contributor
Java:
JPanel CenterPanel = new JPanel();
CardLayout cl = (CardLayout) CenterPanel.getLayout();
Hilfe!! Wie kommt man auf sowas?? Eigentlich macht man das anders herum:
Java:
CardLayout cl = new CardLayout();
JPanel centerPanel = new JPanel(cl);
 

maxth

Aktives Mitglied
Vielen Dank für eure Hilfe, es funktioniert jetzt so wie ich es möchte.

Ich wünsche euch noch ein schönes Wochenende. Ausser ihr stoßt noch öfters auf meiner Beiträge :oops:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Panelinhalt erscheint erst nach Mouseklick auf den Framerand AWT, Swing, JavaFX & SWT 6
R Swing-Applet: Panelinhalt ändern AWT, Swing, JavaFX & SWT 3
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
G CAD Programm AWT, Swing, JavaFX & SWT 4
thor_norsk E - Mail Programm AWT, Swing, JavaFX & SWT 2
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
J Programm findet Resource nicht. AWT, Swing, JavaFX & SWT 6
N Programm Läuft nicht auf anderen Pcs AWT, Swing, JavaFX & SWT 9
imawake Java Paket-Tracking Programm 📦 AWT, Swing, JavaFX & SWT 7
S Lustiges programm schnell coden? AWT, Swing, JavaFX & SWT 2
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
M DragAndDrop - aus Browser ins Programm AWT, Swing, JavaFX & SWT 6
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
L JavaFX IntelliJ Standalone Programm exportieren AWT, Swing, JavaFX & SWT 9
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
M AWT Programm in den Tray minimieren AWT, Swing, JavaFX & SWT 2
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
P Swing Warum startet das Programm nicht? AWT, Swing, JavaFX & SWT 3
J JavaFX Kamera im Programm öffnen AWT, Swing, JavaFX & SWT 6
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
J Verbesserungsvorschläge?! Kleines AWT Programm AWT, Swing, JavaFX & SWT 4
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
Arif Swing Programm friert ein... AWT, Swing, JavaFX & SWT 2
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
X JMenu Menu-Bar ausrichtung ändern im Programm AWT, Swing, JavaFX & SWT 0
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
P Programm durch Dateiaufruf starten und Datei öffnen AWT, Swing, JavaFX & SWT 2
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
G Programm GUI erstellen AWT, Swing, JavaFX & SWT 5
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
T Programm im METRO Design? AWT, Swing, JavaFX & SWT 1
J Programm hängt sich bei Log In auf AWT, Swing, JavaFX & SWT 1
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
N Programm läuft perfekt in Eclipse aber nicht in .JAR AWT, Swing, JavaFX & SWT 3
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
J Programm im GUI ausführen AWT, Swing, JavaFX & SWT 4
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
G JTextArea on the fly aus anderem Programm befüllen AWT, Swing, JavaFX & SWT 4
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
W Windows Fenster in einem Programm AWT, Swing, JavaFX & SWT 2
F Mal Programm AWT, Swing, JavaFX & SWT 13
C In Hauptfenster Programm-Klassen implementieren AWT, Swing, JavaFX & SWT 9
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J SWING - Programm ohne Eclipse etc. starten AWT, Swing, JavaFX & SWT 7
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
M Programm hängt sich auf nachdem repaint() benutzt wurde AWT, Swing, JavaFX & SWT 2
M Programm in Jframe "einbinden" AWT, Swing, JavaFX & SWT 7
S Programm auf aktuellen Stand bringen AWT, Swing, JavaFX & SWT 2
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
P Programm aktuallisiert sich nur beim Rüberzeigen AWT, Swing, JavaFX & SWT 6
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
C Programm für 5 sekunden anhalten und actionevent abfangen AWT, Swing, JavaFX & SWT 18
J Programm schließen AWT, Swing, JavaFX & SWT 4
J Programm nur einmal öffnen AWT, Swing, JavaFX & SWT 3
E Windows Kontext Menü - Laufendes Programm AWT, Swing, JavaFX & SWT 3
T Programm vom Desktop starten! AWT, Swing, JavaFX & SWT 2
S Programm pausieren während JDialog offen ist AWT, Swing, JavaFX & SWT 2
M Browser in Programm einbinden AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
H Userinput in GUI an externes Programm AWT, Swing, JavaFX & SWT 8
D Firefox aus Programm starten AWT, Swing, JavaFX & SWT 4
S LayoutManager Einfaches Programm mit VE und Eclipse3.6 realisieren AWT, Swing, JavaFX & SWT 2
J SWT 32 bit Programm für 64 bit Jave AWT, Swing, JavaFX & SWT 10
R GUI hängt während Programm läuft AWT, Swing, JavaFX & SWT 7
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
H Infofenster vor dem eigentlichen Java Programm AWT, Swing, JavaFX & SWT 3
B Uberschrift in Swing-Programm zur Laufzeit aendern... AWT, Swing, JavaFX & SWT 4
C Swing Kleines Programm mit SWING unter Verwendung von MVC AWT, Swing, JavaFX & SWT 5
capgeti Wie Programm in JPanel (o.ä.) starten? AWT, Swing, JavaFX & SWT 3
B Externes Programm mit Robot Steuern AWT, Swing, JavaFX & SWT 3
G Programm läuft nur auf manchen Rechnern AWT, Swing, JavaFX & SWT 10
M SWT Programm pausiert ungewollt AWT, Swing, JavaFX & SWT 5
K Website in Java Programm einbinden AWT, Swing, JavaFX & SWT 3
B komplettes programm in einem fenster AWT, Swing, JavaFX & SWT 5
L Frage bei Programm mit Zufallskreisen AWT, Swing, JavaFX & SWT 9
L Programm terminated (zu frueh) AWT, Swing, JavaFX & SWT 3
T SplashScreen im laufenden Programm AWT, Swing, JavaFX & SWT 2
R Programm nicht mehr in der Taskleiste AWT, Swing, JavaFX & SWT 2
3TageBart Ebenen in Zeichen-Programm implementieren AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben