GUI-Entwicklung - Dispose, enabling und mehrere Controller

Kaibear

Aktives Mitglied
Moin moin,

ich werkle derzeit an einer GUI, die mit mehreren Fenstern arbeitet. Dabei mache ich mir natürlich das MVC-Muster zu Nutze.

Der Anfang der GUI ist ein Fenster, wo man mehrere Optionen über Buttons hat. Je nach Button, öffnet sich ein anderes Fenster. Dabei soll das Startfenster offenbleiben, aber für den Nutzer nicht nutzbar. Dafür mache ich im StartFenster-Controller ein "startWindow.setEnabled(false)".
Der Start des neuen Fensters geschieht einfach durch erzeugen eines neuen Controller-Objekts, dass für das andere Fenster die Funktionen beinhaltet. In diesem neuen Controller-Objekt ist eine close-Funktion, die bei Betätigung ein guiview.dispose() ausführt.

Nun zur Problematik: Wie kann ich in diesem close gleich mitgeben, dass das startWindow.setenabled(true) ausgeführt wird? Ich muss das startWindow-Objekt dann in jede andere Controller-Klasse mitgeben. Erstens, wie geben ich GENAU dieses mit oder soll ich nur die Controller-Klasse mitgeben? Und wenn ja, wie geben ich GENAU diese mit?

Eine andere Frage habe ich auch noch für das JFrame Objekt an sich, welches als defaulCloseOption "JFrame.DISPOSE_ON_CLOSE" hat. Kann ich dieses DISPOSE_ON_CLOSE in soweit modifizieren, dass auch hier dieselbe startWindow.setEnabled(true)" Funktion ausführt, wie vorher durch "Close" gewollt?

Anbei der Code der Controller Klassen:

Java:
package com.sennheiser.xpiUtil.control;

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

import com.sennheiser.xpiUtil.control.ControlExistingProject.CloseListener;
import com.sennheiser.xpiUtil.view.ViewStartWindow;

public class ControlStartWindow {

	private ViewStartWindow startWindow;

	public ControlStartWindow() {
		// Add your Model here
		this.startWindow = new ViewStartWindow(this);

		addListener();
	}

	private void addListener() {

		this.startWindow.createNewProject(new CreateNewProjectListener());
		this.startWindow
				.workWithExistingProject(new WorkWithExistingProjectListener());
		this.startWindow.closeStartWindow(new CloseListener());

	}

	class CreateNewProjectListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			Control control = new Control();
			startWindow.setEnabled(false);
		}

	}

	class WorkWithExistingProjectListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			ControlExistingProject control = new ControlExistingProject();
			startWindow.setEnabled(false);
			
		}

	}

	class CloseListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			startWindow.close();
		}
	}

}

Java:
package com.sennheiser.xpiUtil.control;

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

import com.sennheiser.xpiUtil.model.ProjectCreator;
import com.sennheiser.xpiUtil.view.ViewExistingProject;
import com.sennheiser.xpiUtil.view.ViewGui;

public class ControlExistingProject {

	private ViewExistingProject existingProject;
	private ControlStartWindow startWindow;
	
	// Add Model here

	public ControlExistingProject() {
		// Add your Model here
		this.existingProject = new ViewExistingProject(this);

		addListener();
	}

	private void addListener() {
		this.existingProject.doCheckProject(new DoCheckProjectListener());
		this.existingProject.doHTTPRegen(new DoHTTPRegenListener());
		this.existingProject.doXMLRecon(new DoXMLReconListener());
		this.existingProject.closeExistingProjectWindow(new CloseListener());
	}

	class DoCheckProjectListener implements ActionListener {

		public void actionPerformed(ActionEvent arg0) {
			// Add Function of Model
		}

	}

	class DoHTTPRegenListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			// Add Function of Model
		}

	}

	class DoXMLReconListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			// Add Function of Model
		}

	}

	class CloseListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			existingProject.close();
			
		}
	}

}

Die close()-Operation aus der GUI sieht wie folgt aus:

Java:
	public void close(){
		this.dispose();
	}


Ist mein Anliegen soweit verstanden? Benötigt ihr zusätzliche Infos? Vielen Dank für eine Lösung.
 

Kaibear

Aktives Mitglied
Okay, nach einigem Gehirn-Griebenschmalz bin ich auf die Idee gekommen, einfach das Controllerobjekt mitgeben. Kodiert ists also:

Java:
package com.sennheiser.xpiUtil.control;

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

import com.sennheiser.xpiUtil.model.ProjectCreator;
import com.sennheiser.xpiUtil.view.ViewExistingProject;
import com.sennheiser.xpiUtil.view.ViewCreateNewProject;

public class ControlExistingProject {

	private ViewExistingProject existingProject;
	private ControlStartWindow controlStartWindow;
	
	// Add Model here

	public ControlExistingProject(ControlStartWindow controlStartWindow) {
		// Add your Model here
		this.existingProject = new ViewExistingProject(this);
		this.controlStartWindow = controlStartWindow;
		
		addListener();
	}
	
	public ControlStartWindow getControlStartWindow(){
		return this.controlStartWindow;
	}

	private void addListener() {
		this.existingProject.doCheckProject(new DoCheckProjectListener());
		this.existingProject.doHTTPRegen(new DoHTTPRegenListener());
		this.existingProject.doXMLRecon(new DoXMLReconListener());
		this.existingProject.closeExistingProjectWindow(new CloseListener());
	}

	class DoCheckProjectListener implements ActionListener {

		public void actionPerformed(ActionEvent arg0) {
			// Add Function of Model
		}

	}

	class DoHTTPRegenListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			// Add Function of Model
		}

	}

	class DoXMLReconListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			// Add Function of Model
		}

	}

	class CloseListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			getControlStartWindow().getWindow().setEnabled(true);
			existingProject.close();
			
		}
	}

}

Java:
package com.sennheiser.xpiUtil.control;

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

import com.sennheiser.xpiUtil.control.ControlExistingProject.CloseListener;
import com.sennheiser.xpiUtil.view.ViewStartWindow;

public class ControlStartWindow {

	private ViewStartWindow startWindow;

	public ControlStartWindow() {
		// Add your Model here
		this.startWindow = new ViewStartWindow(this);

		addListener();
	}

	public ViewStartWindow getWindow(){
		return this.startWindow;
	}
	
	private void addListener() {

		this.startWindow.createNewProject(new CreateNewProjectListener());
		this.startWindow
				.workWithExistingProject(new WorkWithExistingProjectListener());
		this.startWindow.closeStartWindow(new CloseListener());

	}

	class CreateNewProjectListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			ControlCreateNewProject control = new ControlCreateNewProject(ControlStartWindow.this);
			startWindow.setEnabled(false);
		}

	}

	class WorkWithExistingProjectListener implements ActionListener {

		public void actionPerformed(ActionEvent e) {
			ControlExistingProject control = new ControlExistingProject(ControlStartWindow.this);
			startWindow.setEnabled(false);
			
		}

	}

	class CloseListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			startWindow.close();
		}
	}

}

Aber wie modifiziere ich das DEFAULT für Beenden per Kreuz?

PS: Mir ist leider zu spät aufgefallen, dass es im Flaschen Forum gelandet ist =|
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben