MVC Modell mit JPanels?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo allerseits!

Versuche mich zurzeit in das MVC Modell einzuarbeiten und bin auf ein Problem gestoßen.
Und zwar möchte ich, falls ein Button gedrückt wurde, ein neues Panel erstellen und in ein "MainPanel" wieder einfügen.
Habe natürlich schon etwas recherchiert und eine Lösung soll die Implementierung eines Interface sein. Nur wie stelle ich das an?

Meine ersten Gehversuche:

View.java

Code:
package MVC;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Observable;
import java.util.Observer;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class View extends JDialog implements Observer {
			
		private static final long serialVersionUID = 1L;
		JLabel text1 = new JLabel();
		JPanel mainpanel = new JPanel();
		JPanel buttonpanel = new JPanel();
		JPanel centerpanel = new JPanel();
		JLabel text = new JLabel();
		String Anleitung;
		private JButton Weiter, Abbr, Zurück;
		public static String pfadname;
		
		public View(JPanel centerpanel) {
			
			setAlwaysOnTop(true);
			setTitle("Import Wizard");
			mainpanel.setLayout(new BorderLayout());
			
			
//	 Buttons
			buttonpanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
			
			Abbr = new JButton("Abbrechen");
			Abbr.setFont(new Font("Arial", Font.ROMAN_BASELINE, 12));
			Abbr.addActionListener(ACTLAssistant);
			
			Weiter = new JButton("Weiter");
			Weiter.setFont(new Font("Arial", Font.ROMAN_BASELINE, 12));
			Weiter.addActionListener(ACTLAssistant);
			
			Zurück = new JButton("Zurück");
			Zurück.setFont(new Font("Arial", Font.ROMAN_BASELINE, 12));
	
			buttonpanel.add(Abbr);
			buttonpanel.add(Zurück);
			buttonpanel.add(Weiter);
			
			mainpanel.add(buttonpanel, BorderLayout.SOUTH);

		                setSize( 700, 400 );
			
			Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
			
			setLocation(dim.width/2 - dim.width/4,  dim.height/2 - dim.height/4);
			
			setContentPane(mainpanel);
			
			setVisible( true ); 
			
			addWindowListener(new WindowAdapter(){
				public void windowClosing(WindowEvent event){
					dispose();
					System.gc();				
				}
			});
		}

			private ActionListener ACTLAssistant = new ActionListener(){
				public void actionPerformed(ActionEvent event){
					String ereignis = event.getActionCommand();
					
					if(ereignis.equals(Abbr.getText())){			
						System.gc();
						dispose();
							
					} else if(ereignis.equals(Weiter.getText())){
						Controller.ChangePanel(2);
					}
				}
			};
			
	public void update(Observable o, Object arg) {
		mainpanel.removeAll();
		mainpanel.repaint();
		mainpanel.setLayout(new BorderLayout());
		mainpanel.add(buttonpanel, BorderLayout.SOUTH);
		mainpanel.add(centerpanel, BorderLayout.CENTER);
	}
}

Model.java

Code:
package MVC;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Observable;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Model extends Observable {

	JPanel NewPanel = new JPanel();
	static JLabel analyse = new JLabel();
	static JLabel pfad = new JLabel();
	public static String EndungsErgebnis;
	static JPanel centerpanel = new JPanel();
	static JButton Datauswählen = new JButton();
	static JFileChooser fc = new JFileChooser();
	static JDialog dialogfc = new JDialog();
	
	public void setPanel(int id){
		
		setChanged();
		
		if(id==1){	
			Datauswählen = new JButton("Datei auswählen");
			Datauswählen.setFont(new Font("Arial", Font.ROMAN_BASELINE, 12));
			Datauswählen.addActionListener(ACTLDialog2);

			JPanel ImCenterPanel = new JPanel();
			JPanel öffnenPanel = new JPanel();
			
			öffnenPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
			öffnenPanel.add(Datauswählen);
			
			ImCenterPanel.setLayout(new BorderLayout());
			ImCenterPanel.add(öffnenPanel, BorderLayout.WEST);
			ImCenterPanel.add(pfad, BorderLayout.SOUTH);
			
			JLabel text = new JLabel("<html><style type=\"text/css\"> h1 { font-size: 13pt; font-style: italic; font-family: 'Verdana'} h2 { font-size: 13pt; font-style: bold;  } h3 { font-size: 12pt; font-style: italic}" + 
					"#d1 { padding-left: 10px; background-color:#FFFEDA; border-width: 1px; border-style: solid; border-color: #FFDDAA; padding-top: 1em; width: 531px}" + 
					"#d2 { padding-left: 10px; background-color:#DDDDDD; height:215px}" +
					"#d3 { padding-left: 30px; background-color:#DDDDFF; border-width: 1px; border-style: solid; border-color: #AAAAFF; padding-top: 1em }" +
					"#d4 { padding-left: 30px; background-color:#FFDDDD; border-width: 1px; border-style: solid; border-color: #FFAAAA; padding-top: 1em }" +
					"#d5 { padding-left: 30px; background-color:#DDFFDD; border-width: 1px; border-style: solid; border-color: #AAFFAA; padding-top: 1em }" +
					"</style></head><div id=\"d1\"><h1 align=\"center\">Schritt 1:   Bitte wählen Sie jetzt die Datei aus!</h1></div> "+
					"<div id=\"d3\">Bitte Datei auswählen: 
" +
					"</div>
" +
					"</html>");
			
			centerpanel.setLayout(new BorderLayout());
			centerpanel.setBorder(BorderFactory.createLineBorder(new Color(170,170,170)));
			
			centerpanel.add(text, BorderLayout.NORTH);
			centerpanel.add(ImCenterPanel, BorderLayout.CENTER);
			
			notifyObservers(centerpanel);
			
		} else if(id==2){
				JLabel text = new JLabel("<html><style type=\"text/css\"> h1 { font-size: 13pt; font-style: italic; font-family: 'Verdana'} h2 { font-size: 13pt; font-style: bold;  } h3 { font-size: 12pt; font-style: italic}" + 
						"#d1 { padding-left: 10px; background-color:#FFFEDA; border-width: 1px; border-style: solid; border-color: #FFDDAA; padding-top: 1em; width: 531px}" + 
						"#d2 { padding-left: 10px; background-color:#DDDDDD; height:215px}" +
						"#d3 { padding-left: 30px; background-color:#DDDDFF; border-width: 1px; border-style: solid; border-color: #AAAAFF; padding-top: 1em }" +
						"#d4 { padding-left: 30px; background-color:#FFDDDD; border-width: 1px; border-style: solid; border-color: #FFAAAA; padding-top: 1em }" +
						"#d5 { padding-left: 30px; background-color:#DDFFDD; border-width: 1px; border-style: solid; border-color: #AAFFAA; padding-top: 1em }" +
						"</style></head><div id=\"d1\"><h1 align=\"center\">Schritt 2:   Zweiter Schritt</h1></div> "+
						"<div id=\"d3\">Nächster Schrit....: 
" +
						"</div>
" +
						"</html>");
				
				centerpanel.setLayout(new BorderLayout());
				centerpanel.setBorder(BorderFactory.createLineBorder(new Color(170,170,170)));
				
				centerpanel.add(text, BorderLayout.NORTH);
			
				notifyObservers(centerpanel);
				
			}
		}
	
	private static ActionListener ACTLDialog2 = new ActionListener(){
		public void actionPerformed(ActionEvent event){
			String ereignis = event.getActionCommand();
			
			if(ereignis.equals(Datauswählen.getText())) {
				fc.showOpenDialog(dialogfc);
				File auswahl = fc.getSelectedFile();
				
				if(auswahl != null){
					View.pfadname = auswahl.getAbsolutePath();
					String Endung = View.pfadname.substring(View.pfadname.length()-4, View.pfadname.length());
					
					if(Endung.equals(".xls")){
						EndungsErgebnis = "Excel - Mappe erkannt";
						analyse.setText("Excel - Mappe erkannt");
					} else {
						EndungsErgebnis = "";
						analyse.setText("");
					}
				}
				pfad.setText(View.pfadname);
			} 
		}
	};
}

Controller.java

Code:
package MVC;

import java.awt.BorderLayout;
import java.awt.Color;
import java.util.*;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Controller {

	private static Model test3 = new Model();
	static JPanel centerpanel = new JPanel();
	
   public static void main(String[] args){
	 
	   JLabel text = new JLabel("<html><style type=\"text/css\"> h1 { font-size: 13pt; font-style: italic; font-family: 'Verdana'} h2 { font-size: 13pt; font-style: bold;  } h3 { font-size: 12pt; font-style: italic}" + 
				"#d1 { padding-left: 10px; background-color:#FFFEDA; border-width: 1px; border-style: solid; border-color: #FFDDAA;padding-top: 1em }" + 
				"#d2 { padding-left: 10px; background-color:#DDDDDD; height:215px}" +
				"#d3 { padding-left: 30px; background-color:#DDDDFF; border-width: 1px; border-style: solid; border-color: #AAAAFF;padding-top: 1em }" +
				"#d4 { padding-left: 30px; background-color:#FFDDDD; border-width: 1px; border-style: solid; border-color: #FFAAAA;padding-top: 1em }" +
				"#d5 { padding-left: 30px; background-color:#DDFFDD; border-width: 1px; border-style: solid; border-color: #AAFFAA;padding-top: 1em }" +
				"</style></head><div id=\"d1\"><h1>Überschrift</h1></div> "+
				"<div id=\"d2\"><h2>Folgende Schritte werden durchgeführt: </h2>
" +
				"<div id=\"d3\">1. Schritt - Datei auswählen
" +
				"<h3>& & &Beschreibung.</h3></div>
" +
				"<div id=\"d4\">2. Schritt - ..zweiter Schritt...
" + 
				"<h3>& & &Beschreibung</h3></div>
" + 
				"<div id=\"d5\">3. Schritt - ..dritter Schritt...
" +
				"<h3>& & &Beschreibung</h3></div>" + 
				"</html>");
		
		centerpanel.setLayout(new BorderLayout());
		centerpanel.setBorder(BorderFactory.createLineBorder(new Color(170,170,170)));
		
		centerpanel.add(text, BorderLayout.NORTH);
		
	   Observer test1 = new View(centerpanel);
	   
	   test3.addObserver(test1);	     
   }
	
   public static void ChangePanel(int DialogID){
	   test3.setPanel(2);
		   }
}


Vielen Dank im Voraus!

Grüße
 

André Uhres

Top Contributor
Hier ist ein Versuch, wenigstens etwas Ordnung in das wüste Durcheinander zu bekommen: MVC.jar (Quellcode im jar)
Man könnte natürlich auch mit CardLayout oder CardPanel arbeiten...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa GUI Controller für Border Pane als MVC Modell AWT, Swing, JavaFX & SWT 1
K 3D-Modell AWT, Swing, JavaFX & SWT 6
T Modell als XML Speichern / Laden AWT, Swing, JavaFX & SWT 9
K 2D-Grafik BufferedImage eingelesen, welches Modell?! AWT, Swing, JavaFX & SWT 2
C [Swing] JList JText 2 Spalten Modell prozentual verteilen AWT, Swing, JavaFX & SWT 2
E SWT und Separierung von Logik, Präsentation sowie Modell (also eine Form von MVC) AWT, Swing, JavaFX & SWT 10
K SWT Table Modell / Datenmodell AWT, Swing, JavaFX & SWT 14
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
B viele JPanels auf JLayeredPane -> to SVG? AWT, Swing, JavaFX & SWT 15
CptK JPanels übereinander legen AWT, Swing, JavaFX & SWT 6
CptK JPanels wechseln AWT, Swing, JavaFX & SWT 2
B Minimum x und y von Children-JPanels ermitteln AWT, Swing, JavaFX & SWT 3
L Swing JPanels werden nicht angezeigt! AWT, Swing, JavaFX & SWT 7
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
C LayoutManager Bei verkleinern des Fensters, verschieben sich JPanels übereinander. AWT, Swing, JavaFX & SWT 7
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
W Swing Farbige JPanels auf JFrame werden nicht gezeigt. Was mach ich falsch? AWT, Swing, JavaFX & SWT 7
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
F Swing JPanels übereinander ohne Mananger AWT, Swing, JavaFX & SWT 1
K Swing Klassenstruktur mit mehreren JPanels AWT, Swing, JavaFX & SWT 3
S Swing Navigation durch JPanels AWT, Swing, JavaFX & SWT 0
S Bei BoxLayout haben hinzugefügten Jpanels einen Versatz/Space AWT, Swing, JavaFX & SWT 0
B Größer-/Kleinerziehen eines JFrames/JPanels erkennen AWT, Swing, JavaFX & SWT 2
C Bei Btn Klick zwei JPanels switchen AWT, Swing, JavaFX & SWT 14
M Swing Aktualisieren eines JPanels nach Tasteneingabe AWT, Swing, JavaFX & SWT 2
S Liste von JPanels mit festen Höhen AWT, Swing, JavaFX & SWT 3
I Rechteck eines Graphics eines JPanels in einem anderen JPanel anzeigen AWT, Swing, JavaFX & SWT 7
S Swing Kopie eines JPanels inkl. aller objekte darin erstellen AWT, Swing, JavaFX & SWT 5
S Aufteilung von JPanels in einem Frame AWT, Swing, JavaFX & SWT 13
F Event Handling Kommunikation eines JButton ueber JPanels hinaus AWT, Swing, JavaFX & SWT 6
S Swing Drag&Drop mit TransferHandler und JPanels AWT, Swing, JavaFX & SWT 8
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
A Swing Aktualisieren eines JPanels AWT, Swing, JavaFX & SWT 13
N Abspeichern eines kompletten JPanels AWT, Swing, JavaFX & SWT 57
S Swing Zwischenräume zwischen JPanels AWT, Swing, JavaFX & SWT 4
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
X zwischen 2 JPanels "elegant" wechseln AWT, Swing, JavaFX & SWT 3
S Swing MVC Ein JFrame, mehrere JPanels AWT, Swing, JavaFX & SWT 6
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
T jPanels im jFrame bewegen - Auch ohne Textfield? AWT, Swing, JavaFX & SWT 4
G ein JTextArea in zwei JPanels AWT, Swing, JavaFX & SWT 2
W Swing JFrame mit unterschiedlichen JPanels AWT, Swing, JavaFX & SWT 2
D Grafik über JPanels hinweg verschieben AWT, Swing, JavaFX & SWT 2
C klassenübergreifende JPanels auf ein JFrame AWT, Swing, JavaFX & SWT 22
X Alle Components eines JPanels Enablen AWT, Swing, JavaFX & SWT 7
D Swing Problem mit Gridbaglayout bzw. Größenanpassung JPanels AWT, Swing, JavaFX & SWT 7
P Swing Größe eines JPanels bestimmen (ohne Border!) AWT, Swing, JavaFX & SWT 2
0 Ausschnitt eines JPanels als Bild speichern AWT, Swing, JavaFX & SWT 4
N Richtiges einstellen der size von JPanels AWT, Swing, JavaFX & SWT 10
D LayoutManager JPanels ohne LayoutManager platzieren AWT, Swing, JavaFX & SWT 6
Weltall 7 Swing JPanels werden doppelt gezeichnet AWT, Swing, JavaFX & SWT 6
C Swing JList mit JPanels AWT, Swing, JavaFX & SWT 6
J Swing JPanels werden ständig gezeichnet AWT, Swing, JavaFX & SWT 11
C Swing Inhalt eines JPanels ermitteln & bearbeiten AWT, Swing, JavaFX & SWT 5
G Swing Komponenten dem Hintergrundbild des JPanels anpassen? AWT, Swing, JavaFX & SWT 6
N Swing GUI updaten / Aufklappbare Jpanels AWT, Swing, JavaFX & SWT 2
E Swing JPanels durch ziehen am Rand vergrößern/verkleinern?! AWT, Swing, JavaFX & SWT 2
buntuswalus Swing Datentransfer zwischen JPanels AWT, Swing, JavaFX & SWT 18
T Sichtbarmachen von Objekten auf mehreren JPanels AWT, Swing, JavaFX & SWT 2
J Swing Container innerhalb eines JPanels erfragen AWT, Swing, JavaFX & SWT 3
H Z-Order von JPanels in JFrames AWT, Swing, JavaFX & SWT 2
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
R Verschachtelte JPanels FocusTraversalPolicy AWT, Swing, JavaFX & SWT 6
L mehere JPanels auf JFrame - setVisible() funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Swing JScrollPane fasst JPanel und Groesse des JPanels soll sich aendern AWT, Swing, JavaFX & SWT 2
H Größen von JPanels,JLable und JTextfield.. AWT, Swing, JavaFX & SWT 12
H Layoutprobleme mit Jpanels AWT, Swing, JavaFX & SWT 2
S Swing Dynamische JPanels: Vertikales Strecken verhindern AWT, Swing, JavaFX & SWT 4
Pithecanthropus Swing JPanels dynamisch austauschen AWT, Swing, JavaFX & SWT 8
J SWING Fenster mit mehreren JPanels (dank JLayeredPane) AWT, Swing, JavaFX & SWT 19
R Swing JPanel enthält mehrere JPanels - Positionsvergabe AWT, Swing, JavaFX & SWT 4
P verschiedene JPanels einblenden je nach auswahl AWT, Swing, JavaFX & SWT 2
R MousePosition über mehrere JPanels darstellen AWT, Swing, JavaFX & SWT 13
A Mehrere JPanels in ein JFrame AWT, Swing, JavaFX & SWT 4
R JFrame enthält JScrollPane mit JPanels AWT, Swing, JavaFX & SWT 3
R Mehrere JPanels in JScrollPane AWT, Swing, JavaFX & SWT 3
R JScrollPane, mehrere JPanels hinzufügen AWT, Swing, JavaFX & SWT 2
R Hinzufügen mehrer JPanels zu einem JFrame AWT, Swing, JavaFX & SWT 2
D Event beim Laden eines JPanels? AWT, Swing, JavaFX & SWT 3
A Problem beim Setzen von JPanels AWT, Swing, JavaFX & SWT 4
M Automatische Anpassung eines JPanels in einem JFrame AWT, Swing, JavaFX & SWT 6
M Anpassen der Größe eines JPanels (incl. gezeichneter Ampel) AWT, Swing, JavaFX & SWT 2
G Hilfe Meine JPanels verschwinden im Müll AWT, Swing, JavaFX & SWT 10
G Hintergrundfarbe eines JPanels zurücksetzen AWT, Swing, JavaFX & SWT 12
G Alle Komponenten eines JPanels durchlaufen AWT, Swing, JavaFX & SWT 11
P Problem bei Aktualisierung eines JPanels AWT, Swing, JavaFX & SWT 2
G mehrere JPanels untereinander ? AWT, Swing, JavaFX & SWT 2
M Wirkliche Größe eines JPanels/o.ä. ermitteln AWT, Swing, JavaFX & SWT 3
T Bisherige JFrames in JPanels oder JInternalFrames? AWT, Swing, JavaFX & SWT 2
M Minimieren von verschachtelten JPanels AWT, Swing, JavaFX & SWT 2
M Problem, an ImageIcon in JPanels zu kommen. AWT, Swing, JavaFX & SWT 2
G Größe eines JPanels beeinflussen AWT, Swing, JavaFX & SWT 5
S Update des fensters beim Ersetzen von JPanels AWT, Swing, JavaFX & SWT 9
S Automatisches Rendern einen JPanels AWT, Swing, JavaFX & SWT 8
S Frage: Mehrere JPanels gleichen Button zuzweisen? AWT, Swing, JavaFX & SWT 10
D JTree mit JPanels als UserObjects AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben