Kommunikation zwischen Klassen, aber bitte MVC

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo zusammen,

folgendes Prob:

Ich habe eine Klasse, die den Frame bereitstellt. Eine zweite Klasse bildet die Menüleiste und wird dem Frame geaddet. Ein dritte Klasse ist ein Panel mit den Steuerelementen, usw.

Im Menü habe ich nun ein JCheckBoxMenuItem. Wie kriegt nun z.B. ein Button in der dritten Klasse mit, ob das gecheckt ist oder nicht?
Soll ich ein "globales Flag" setzen, oder geht das auch geschickter???????

THX im voraus.
 

meez

Top Contributor
Mach die CheckBox Singleton...
Dann kannst du sie in jeder anderen Klasse aufrufen und den Status abfragen...
 
G

Gast

Gast
meez hat gesagt.:
Mach die CheckBox Singleton...
Dann kannst du sie in jeder anderen Klasse aufrufen und den Status abfragen...

Äh, Hmmmmmmm,

hast Du evtl. ein Bsp. dafür. Ich hab zwar schon darüber gelesen, kann es aber nicht umsetzen. Kann ich nur die CheckBox singleton machen, oder die ganze Klasse, oder wie??? ???:L
 

meez

Top Contributor
Du machst eine eigene Klasse, welche von JCheckBox erbt...
z.B.: so
Code:
public class MyCheckBox extends JCheckBox {
	private final static MyCheckBox box = new MyCheckBox();
	private MyCheckBox() {}
	public static MyCheckBox getInstance() {
		return box;
	}
}


Anstatt, dass du nun deine Checkbox so erstellst new JCheckBox, machst du es so MyCheckBox.getInstance().
Da du immer das gleiche Objekt zurückbekommst, kannst du das ja auch in den anderen Klassen verwenden.
 
B

bygones

Gast
mhm - hier geht es doch um ein JCheckboxMenuItem - nich JCheckbox.... ?!

Aber das wäre auch nicht der Renner - wenn du nur eine Instanz erlaubst, aber mehrer Checkboxe nutzen willst kommts zum Konflikt !

füge dem Menu einen SelectionListener oder ähnliches hinzu die Klasse die darauf reagieren soll ist entweder der Listener selbst oder der Listener kennt diese Klassen
 
G

Guest

Gast
deathbyaclown hat gesagt.:
füge dem Menu einen SelectionListener oder ähnliches hinzu ...

???:L Also das mit dem Singleton funzt jetzt. Könnte ich auch gut nehmen, da ich in diesem Fall nur ein JCheckBoxMenuItem habe.

Trotzdem, wie geht das mit dem SelectionListener???????
 
B

bygones

Gast
ok - ist ItemListener, nicht SelectionListener....

so könnte man es z.b. machen:
Code:
public class MyFrame extends JFrame {
	public MyFrame() {
		super("test");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		MyPanel panel = new MyPanel();
		
		setJMenuBar(new MyMenu(panel));
		setContentPane(panel);
		pack();
		setVisible(true);
		
	}
	public static void main(String[] args) {
		new MyFrame();
	}
}
Code:
import java.awt.Dimension;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JLabel;
import javax.swing.JPanel;
/*
 * Created on 07.12.2004
 */

/**
 * @author Andreas Groscurth
 */
public class MyPanel extends JPanel implements ItemListener {
	private JLabel label;
	
	public MyPanel() {
		super();
		setPreferredSize(new Dimension(400,400));
		
		label = new JLabel("");
		add(label);
	}

	/* (non-Javadoc)
	 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
	 */
	public void itemStateChanged(ItemEvent e) {
		if(e.getStateChange() == ItemEvent.SELECTED) {
			label.setText("selected");
		}
		else {
			label.setText("not selected");
		}
	}
}
Code:
public class MyMenu extends JMenuBar {
	public MyMenu(ItemListener checkboxlistener) {
		super();
		JMenu m = new JMenu( "test" );
		JMenuItem i = new JMenuItem( "tt" );
		m.add( i );
		JCheckBoxMenuItem ii = new JCheckBoxMenuItem( "check" );
		ii.addItemListener( checkboxlistener);
		m.add( ii );
		add( m );
	}
}
 
G

Gast

Gast
Cooooooooool, :applaus: aber was passiert eigentlich genau an dieser Stelle???

Code:
setJMenuBar(new MyMenu(panel));
 

foobar

Top Contributor
Es wird eine Instanz von MyMenu erzeugt, der eine Referenz auf MyPanel übergeben wird. Das erzeugt MyMenu wird dann, über die Methode setJMenuBar , dem JFrame übergeben, damit es entsprechend positioniert wird.
 
B

bygones

Gast
du setzt dem Frame eine MenuBar.
Die MenuBar ist durch die Klasse MyMenu repräsentiert. die bekommt den panel als ItemListener als Argument mit
 
G

Guest

Gast
deathbyaclown hat gesagt.:
ItemListener als Argument mit

Langsam wird's klarer, aber...
Wieso ist das so? panel ist doch vom Typ JPanel. Warum kann ich panel dann als ItemListener übergeben?
 
B

bygones

Gast
die Klasse MyPanel implementiert ItemListener - und da kommt der Sinn und die "Macht" des Interfaces zu tragen...

Du kannst die Klasse als ItemListener ansehen - sowie du sagen kannst es ist ein panel, weil es von Panel erbt....
 
G

Gast

Gast
Tach auch zusammen,

da bin ich wieder. Musste erstmal ne Nacht drüber schlafen.
Vorab erstmal vielen Dank für eure Mühe. Hat mir sehr weitergeholfen.

Ich habe mich jetzt für eine Kombination aus Listener und Singelton entschieden.
Und zwar deshalb:
Abhängig vom Status des CheckBoxMenuItem wird ein Button enabled bzw. disabled. Dieser Button macht nichts weiter, als eine Datei zu erzeugen. Ist der Button disabled und also das CheckBoxMenuItem "gecheckt", soll bei Programmende besagte Datei automatisch erzeugt werden. Daher muss ich bei Programmende wissen, welchen Status diese CheckBox hat.
Der Listener macht also nicht weiter, als den Button zu enablen bzw. disablen. Ausserdem setzt er ein Flag im Singleton. Das sieht so aus:
Code:
//public class ClosePanel extends JPanel implements ItemListener { ....
//CheckBoxState checkboxstate = CheckBoxState.getInstance();....

public void itemStateChanged(ItemEvent e) {
		if (e.getStateChange() == ItemEvent.SELECTED) {
			//System.out.println("selected");
			createButton.setEnabled(false);
			checkboxstate.setFlag(true);
		} else {
			//System.out.println("not selected");
			createButton.setEnabled(true);
			checkboxstate.setFlag(false);
		}
	}
//....

Das Singleton speichert den Zustand:
Code:
public class CheckBoxState {

	private static CheckBoxState instance = null;

	private boolean Flag = false;

	/**
	 *  
	 */
	private CheckBoxState() {
		super();
	}

	public static CheckBoxState getInstance() {
		if (instance == null) {
			instance = new CheckBoxState();
		}
		return instance;
	}

	public void setFlag(boolean Flag) {
		this.Flag = Flag;
	}

	public boolean getFlag() {
		return this.Flag;
	}

}

Zu guter letzt habe ich mir einen ClosingAdapter geschrieben, welcher auch als Listener verwendet werden kann. Somit kann ich (egal wie das Prog beendet wird) die Datei beim Beenden erzeugen, oder eben nicht.

Code:
public class WindowClosingAdapter extends WindowAdapter implements
		ActionListener {

	private boolean exitSystem;
	private CheckBoxState checkboxstate = CheckBoxState.getInstance();
	private MapFileCreator mapfilecreator = new MapFileCreator();

	/**
	 * Erzeugt einen WindowClosingAdapter zum Schliessen des Fensters. Ist
	 * exitSystem true, wird das komplette Programm beendet.
	 * 
	 * Dieser WindowClosingAdapter kann auch als ActionListener zum Beenden
	 * eines Programms verwendet werden. In diesem wird exitSystem ignoriert.
	 * 
	 * @param exitSystem
	 *            TRUE, wenn das Programm beendet werden soll.
	 */
	public WindowClosingAdapter(boolean exitSystem) {
		this.exitSystem = exitSystem;
	}

	/**
	 * Erzeugt einen WindowClosingAdapter zum Schliessen des Fensters. Das
	 * Programm wird nicht beendet.
	 * 
	 * Dieser WindowClosingAdapter kann auch als ActionListener verwendet
	 * werden. Dann wird das Programm beendet.
	 */
	public WindowClosingAdapter() {
		this.exitSystem = false;
	}

	/**
	 * Fenster schliessen und Programm beenden, wenn exitSystem true ist.
	 */
	public void windowClosing(WindowEvent event) {
		event.getWindow().setVisible(false);
		event.getWindow().dispose();
		if (exitSystem) {
			if (checkboxstate.getFlag()) {
				mapfilecreator.createNewMapFile();
			}
			System.exit(0);
		}
	}

	/**
	 * Egal, welcher Konstruktor benutzt wurde, das Programm wird immer beendet,
	 * wenn der WindowClosingAdapter als ActionListener eingesetzt wird.
	 */
	public void actionPerformed(ActionEvent event) {
		/*
		 * evtl. Aufruf weiterer Methoden, die vor Beendigung des Programms
		 * ausgeführt werden sollen.
		 */
		if (checkboxstate.getFlag()) {
			mapfilecreator.createNewMapFile();
		}
		System.exit(0);
	}
}

So, ist das. Was sagen die Profis dazu?? Kann man das so lassen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
F Klassen Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 4
G Kommunikation zwischen zwei Klassen Java Basics - Anfänger-Themen 5
M Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
V Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 2
L Kommunikation zwischen mehreren Klassen Java Basics - Anfänger-Themen 2
G Nochmal Problem mit Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
P Kommunikation zwischen zwei *.class Java Basics - Anfänger-Themen 3
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2
S Frage zur Kommunikation zwischen Objekten Java Basics - Anfänger-Themen 5
J Kommunikation zwischen zwei JAVA-Dateien Java Basics - Anfänger-Themen 8
S Kommunikation zwischen Komponenten in einem JFrame Java Basics - Anfänger-Themen 10
B Kommunikation zwischen Klasse und Listener Java Basics - Anfänger-Themen 2
D Kommunikation zwischen zwei Java Anwendungen möglich? Java Basics - Anfänger-Themen 6
G Kommunikation zwischen Applet und Java-Anwendung über TCP/IP Java Basics - Anfänger-Themen 3
M Kommunikation zwischen GUI und Event -Klasse Java Basics - Anfänger-Themen 3
Q Kommunikation zwischen Frames Java Basics - Anfänger-Themen 3
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
I Kommunikation "normaler PC" mit lokaler Software an "Cloud Service" und umgekehrt Java Basics - Anfänger-Themen 15
izoards Socket Kommunikation Java Basics - Anfänger-Themen 16
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
M Input/Output Kommunikation mit externen Geräten Java Basics - Anfänger-Themen 0
M OOP Kommunikation MVC und DTO Java Basics - Anfänger-Themen 13
K Kommunikation von Java RMI und Webservices Java Basics - Anfänger-Themen 9
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
E MVC: Kommunikation der Modellteile Java Basics - Anfänger-Themen 12
G Klassen Kommunikation zw. Klassen Java Basics - Anfänger-Themen 28
B Socket Kommunikation in beide Richtungen Java Basics - Anfänger-Themen 12
F Socket Kommunikation Java Basics - Anfänger-Themen 4
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
J Panel-übergreifende Kommunikation Java Basics - Anfänger-Themen 3
J RxTx/RS232 Kommunikation (TwoWay) Java Basics - Anfänger-Themen 10
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
G Datenstruktur und die Kommunikation mit der GUI Java Basics - Anfänger-Themen 10
W Inter-Thread-Kommunikation Java Basics - Anfänger-Themen 3
T Kommunikation zw. 2 Javaprogrammen Aufr --> Verab. -> Java Basics - Anfänger-Themen 6
P Kommunikation mit Prozess Java Basics - Anfänger-Themen 3
H Kommunikation C++ <> Java Java Basics - Anfänger-Themen 4
A Kommunikation Java-Anwendung <-> Java-Applet Java Basics - Anfänger-Themen 24
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
P asynchrone Kommunikation Applet Servlet mit RMI möglich Java Basics - Anfänger-Themen 4
F Kommunikation von 2 Klasse Java Basics - Anfänger-Themen 5
B jtapi <-> tapi Kommunikation Java Basics - Anfänger-Themen 2
S Kommunikation zwsichen Klassen. Java Basics - Anfänger-Themen 9
D J/Direct oder JNI? .bzw. Kommunikation mit Windows-API. Java Basics - Anfänger-Themen 2
M probleme in der kommunikation von klassen Java Basics - Anfänger-Themen 5
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
S Unterschied zwischen Denkweisen Java Basics - Anfänger-Themen 13
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
rafi072001 Assoziation zwischen Musiker und Label Java Basics - Anfänger-Themen 1
I Best Practice Saubere Verbindung zwischen API und Business Layer mit DTO's Java Basics - Anfänger-Themen 2
A Parametar übergabe zwischen Methoden Java Basics - Anfänger-Themen 26
W User zwischen Optionen wählen lassen Java Basics - Anfänger-Themen 1
I Differenz zwischen LocalDateTime Java Basics - Anfänger-Themen 4
Leo_1789 Differenz ausrechnen zwischen denn idealgewicht und denn echten Gewicht Java Basics - Anfänger-Themen 7
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
NeoLexx Zuweisungskompatibilität zwischen Vererbungsbeziehungen (Polymorphie) Java Basics - Anfänger-Themen 18
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
N Berührung zwischen Rechtecken Java Basics - Anfänger-Themen 5
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
Dilara_K Abstand zwischen den Doppelwerten in einem Array herausfinden Java Basics - Anfänger-Themen 20
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
D Zufallszahl zwischen 10 und 99? Java Basics - Anfänger-Themen 5
J Objektzugriff zwischen disjunkten Klassen Java Basics - Anfänger-Themen 1
L Den Winkel zwischen zwei Vektoren berechnen! Java Basics - Anfänger-Themen 2
A Methoden Unterscheid zwischen public und ohne Java Basics - Anfänger-Themen 9
X Input/Output Höchste Temperaturschwankung zwischen 2 Tagen Java Basics - Anfänger-Themen 2
Bluedaishi der Monat zwischen zwei Datumsangaben Java Basics - Anfänger-Themen 15
R Threads Pause zwischen zwei Schleifen Java Basics - Anfänger-Themen 1
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
S Parameterübergabe zwischen zwei Programme Java Basics - Anfänger-Themen 4
S Erste Schritte Zwischen zwei Punkten ein Minimumpkt./Maxima finden Java Basics - Anfänger-Themen 1
K Klassen Array zwischen Klassen übergeben Java Basics - Anfänger-Themen 2
Arif OOP Die Bindung zwischen einem äußeren und einem inneren Objekt Java Basics - Anfänger-Themen 2
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
N Dauer zwischen zwei LocalDateTime Objekten berechnen? Java Basics - Anfänger-Themen 4
P Ungerade Zahlen ausgeben lassen zwischen Spannweite zweier eingegeben zahlen Java Basics - Anfänger-Themen 6
V Zufallswert zwischen zwei Zahlen a und b Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben