MVC-Pattern - Kreuzweise Anwendung?

Status
Nicht offen für weitere Antworten.
A

Andy

Gast
Hi!
Ich versuche hinter das MVC-Pattern zu steigen:
Normalerweise ist das Model das Hauptprogramm und das View die GUI.
Es gibt aber folgendes Problem, das Hauptprogramm erwartet ja auch Eingaben, die eigentlich über die GUI erfolgen sollten. Praktisch ist M und V vertauscht. Oder versteh ich das falsch? Ich brauch Observer auf beiden Seiten, oder nicht? ???:L
Ich möchte aber momentan auf ein spezielles Problem hinaus:
Ich habe eine JMenuBar und rufe über ein allgemeines Interface Aktionen im Hauptprogramm auf:
Code:
public interface Performed {
	public void action (String name);
}
Dieses wird vom Hautprogramm implementiert, in meiner JMenubar steht folgendes:
Code:
Performed performed = null;

public void actionPerformed (ActionEvent e) {
	Object src = e.getSource();
	if (src instanceof JMenuItem) {
		String actionName = (String) actions.get(src);
		if (performed!=null)
			performed.action (actionName);
	}
}

public void setPerformed (Performed p) {
	performed = p;
}
wobei actions eine Hashtable ist in dem JMenuItems auf treffende Namen umgemapt werden (z. B.: copy, paste, quit).
Als Schmankerl implementiere ich action in meiner Hauptklasse als
Code:
public void action (String a) {
	String methodName = a;
	try {
		Method method = getClass().getMethod(methodName, null);
		method.invoke(this,null);
	} catch (NoSuchMethodException e) {
	} catch (IllegalAccessException e) {
	} catch (InvocationTargetException e) {
	}
}
somit werden entsprechend benannte (parameterlose) Methoden direkt aufgerufen (copy(), paste(), quit()) :lol:

In diese Richtung habe ich eigentlich eine gute Entkoppelung geschaffen, aber ich möchte vom Hauptprogramm auch bestimmte JMenuItem enabled oder disabled setzen können, ohne das ich meine JMenuBar direkt bekanntgeben muss. Wäre jetzt der Kreuzgriff angebracht in meiner JMenuBar auch Performed zu implementieren? :?:
Dass dann in der Controller-Ebene sowas steht:
Code:
HauptFenster hauptFenster = new HauptFenster();
MeineMenuBar menuBar = new MeineMenuBar();
hauptFenster.setPerformed (menuBar);
menuBar.setPerformed (hauptFenster);

Damit müßte doch MVC weiterhin erfüllt sein? :roll: Denk ich da richtig?

Andy
 

bellmann29

Aktives Mitglied
Hallo,
Dein Ansatz ist nicht verkehrt geht aber einfacher!

Schreibe eine ActionKlasse, die allein existiert. Übergib dies dann dem, der Actions ausführen soll. Damit kannst Du dann die ActionKlasse mehrmals nutzen.

Bsp.:
Code:
public class CopyAction extends AbstractAction{

  //muß implementiert werden
  public void actionPerformed(ActionEven ae){
    System.out.println("Huch, ich soll was copieren");
  }
}

oder aber Du baust Dir einen Handler der eigentlich ein Listener ist.


Code:
public class MyActionHandler implements ActionListener{

  public final static String CUT = "cut";
  public final static String COPY = "copy";
  public final static String PASTE = "paste";

  public void actionPerformed(ActionEvent ae){
    String command = ae.getActionCommand();
    if(command == CUT) System.out.println("Ich soll was ausschneiden");
    if(command == COPY) System.out.println("Ich soll was kopieren");
    if(command == PASTE) System.out.println("Da will einer Zahnpasta");
  }
}

und dann


Code:
ActionListener myListener = new MyActionHandler();


...
myButton.addActionListener(myListener);
myButton.setActionCommand(MyActionHandler.PASTE); // Wenn die Beschriftung vom Commando abweicht
....

Bis dann
 
A

Andy

Gast
Danke, erstmal!

@dotlens:
Das mit den Pattern, habe ich schon mal gelesen! Danke trotzdem!

@bellmann29:
Das ist nicht schlecht. Die Frage ist aber trotzdem, wie würdet ihr es implementieren, dass man von der Hauptklasse Menupunkte aktivieren, deaktivieren kann? Bekannt sollte nur der Kommandoname sein (also "copy" wird dem Menupunkt "kopieren" entsprechen)
Direkter Zugriff auf die Menubar?

Ciao,
Andy
 

bellmann29

Aktives Mitglied
Nun ja,
wenn Du Text aus einer TextArea z.B. kopieren willst, solltest Du die TA mit ebenfalls mit einem Listener ausstatten, der prüft ob überhaupt was im TextArea markiert ist. Wenn ja:

Code:
....
myCopyButton.setTextEnabled(true);
...

wenn nein:
Code:
...
myCopyButton.setTextEnabled(false);
...

Ansonsten zur Implementierung würde ich sämtliche ListenerKlassen als innereKlassen machen. So brauchst Du keine Referenzen auf die FensterKlasse (ich meine dein JFrame) übergeben. Für innere Klassen sind alle Attribute der umgebenden Klasse sichtbar.

Bis dann.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
B JavaFX Pattern (Aufteilung Zuständigkeiten AWT, Swing, JavaFX & SWT 7
M Swing MVC-Pattern - View mit mehreren Models AWT, Swing, JavaFX & SWT 5
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Cromewell JavaFX MVC-Pattern AWT, Swing, JavaFX & SWT 7
L JavaFX Java FX Anwendung nach MVC mit Observer Pattern AWT, Swing, JavaFX & SWT 15
3 2D-Grafik BasicStroke dash pattern - Linie zu lang!? AWT, Swing, JavaFX & SWT 1
M Welches Pattern bei GUI Anwendungen? AWT, Swing, JavaFX & SWT 2
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
M Swing MVC Pattern verstanden, aber Probleme bei der Umsetzung AWT, Swing, JavaFX & SWT 5
C GUI Entwicklung - welches Pattern? AWT, Swing, JavaFX & SWT 16
J Swing Controller im MVC-Pattern AWT, Swing, JavaFX & SWT 9
G Hilfe! Command Pattern an easy ImageViewer? AWT, Swing, JavaFX & SWT 13
D Wie mehrere Grafiken auf JPanel anzeigen lassen? (Observer pattern?) AWT, Swing, JavaFX & SWT 24
D MVC Pattern in Swing-Applikationen AWT, Swing, JavaFX & SWT 4
hdi Observer-Pattern bei JPanel nicht möglich? AWT, Swing, JavaFX & SWT 7
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
I JavaFX JavaFx-Anwendung für die Erstellung einer Windows-Anwendung? AWT, Swing, JavaFX & SWT 6
P Swing Anwendung von LayeredPanel AWT, Swing, JavaFX & SWT 6
J Netbeans die JavaFX-Anwendung wird nicht ausgeführt AWT, Swing, JavaFX & SWT 16
tommybalbor JavaFx Anwendung klappt nicht für macOs Nutzern, wenn ich zwei dependecies bei maven hinzufüge AWT, Swing, JavaFX & SWT 6
thor_norsk JavaFX Anwendung stürzt ab AWT, Swing, JavaFX & SWT 4
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
G JavaFX Steuerung bzw. Test von externer JavaFX Anwendung (liegt nur als jar vor) AWT, Swing, JavaFX & SWT 9
N JavaFX Vor beenden der Anwendung durch klicken von X Dialog zeigen AWT, Swing, JavaFX & SWT 1
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
B JavaFX Wie A4-Seite in meiner Anwendung repräsentieren AWT, Swing, JavaFX & SWT 6
B JavaFX JavaFX Anwendung deployen (entw als runnableJAR oder exe-Datei) AWT, Swing, JavaFX & SWT 15
OSchriever Anwendung aus SystemTray öffnen AWT, Swing, JavaFX & SWT 29
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
T Anwendung mit X schliessen AWT, Swing, JavaFX & SWT 1
L JavaFX OpenJFX13 Anwendung exportieren AWT, Swing, JavaFX & SWT 7
D PDF Viewer in SWT-Anwendung AWT, Swing, JavaFX & SWT 8
O Basics - Anwendung erstellen mit mehreren Szenen AWT, Swing, JavaFX & SWT 1
G JavaFX JavaFX-Dialog aus einer Nicht-JavaFX-Anwendung heraus AWT, Swing, JavaFX & SWT 1
A JavaFX Anwendung in Jar Datei AWT, Swing, JavaFX & SWT 8
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
J Splashscreen Start Anwendung AWT, Swing, JavaFX & SWT 14
MiMa Programmeinstellungen für Anwendung?? AWT, Swing, JavaFX & SWT 54
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
I JFileChooser mit System L&F bei anderem L&F der eigtl. Anwendung AWT, Swing, JavaFX & SWT 0
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
L JavaFX PdfViewer für JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
D JafaFX Anwendung beenden AWT, Swing, JavaFX & SWT 11
B Wie erstelle ich eine JavaFX Anwendung von diesem Code? AWT, Swing, JavaFX & SWT 3
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
X Anwendung skalierbar AWT, Swing, JavaFX & SWT 3
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
D JavaFX Anwendung hängt sich permanent auf AWT, Swing, JavaFX & SWT 6
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
I Variabeln speichern in Desktop Anwendung AWT, Swing, JavaFX & SWT 2
V Anwendung im Vollbild zentrieren AWT, Swing, JavaFX & SWT 13
A Swing Textübergabe innerhalb der Anwendung in unterschiedlichen Fenster AWT, Swing, JavaFX & SWT 8
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
J JavaFX Anwendung läuft in eclipse, nicht aber exportiert AWT, Swing, JavaFX & SWT 2
P Anwendung kommt nach minimieren nicht mehr in den Vordergrund AWT, Swing, JavaFX & SWT 5
K 3D-Grafik Anwendung von Java in Gnuplot AWT, Swing, JavaFX & SWT 3
M SWT Anwendung in der Symbolleiste verstecken AWT, Swing, JavaFX & SWT 5
B SWT Redesign SWT Anwendung AWT, Swing, JavaFX & SWT 7
M Java anwendung VOR vollbildspielen (schon wieder...) AWT, Swing, JavaFX & SWT 5
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
VfL_Freak Swing Zweiter Monitor von Java-Anwendung ansprechbar ?? AWT, Swing, JavaFX & SWT 2
S Swing Ist meine gute Java Anwendung vorgängig? AWT, Swing, JavaFX & SWT 20
P Klassenaufbau bei komplexerer GUI Anwendung AWT, Swing, JavaFX & SWT 14
S Java GUI Anwendung ohne Konsole starten AWT, Swing, JavaFX & SWT 6
qwerqer Swing Anwendung soll blinken (Taskleiste) AWT, Swing, JavaFX & SWT 3
R Java Desktop Anwendung erstellen. Womit? AWT, Swing, JavaFX & SWT 3
eLogic Fullscreen anwendung aus der man nicht rauskommt AWT, Swing, JavaFX & SWT 37
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
H Anwendung schließen ohne System.exit AWT, Swing, JavaFX & SWT 5
R Anwendung ohne Symbol in der Taskleiste AWT, Swing, JavaFX & SWT 3
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
alderwaran Swing XML editor plugin für eigene anwendung AWT, Swing, JavaFX & SWT 2
G Swing Update-Funktion für Swing-Anwendung AWT, Swing, JavaFX & SWT 5
C Swing Eine SWING-Anwendung mittels MVC AWT, Swing, JavaFX & SWT 4
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
B SWT Hello World-Anwendung mit GUI in Eclipse -Problem mit Import von SWT AWT, Swing, JavaFX & SWT 9
G Applet und Swing Anwendung AWT, Swing, JavaFX & SWT 2
J Client Server Anwendung - Mehrere Clients in einer Server GUI AWT, Swing, JavaFX & SWT 11
F Anwendung auf Teskleiste legen AWT, Swing, JavaFX & SWT 3
B MDI Anwendung alle maximierten InternalFrames in Tabs AWT, Swing, JavaFX & SWT 3
T Anwendung starten AWT, Swing, JavaFX & SWT 5
J Anwendung von Swing nach SWT bzw. Eclipse portieren AWT, Swing, JavaFX & SWT 3
2 Tablet-PC Java-Anwendung -> Tablet-Pen Problem !! AWT, Swing, JavaFX & SWT 3
J Swing Anwendung schließen im Listener AWT, Swing, JavaFX & SWT 3
isowiz Vorteil einer RCP Anwendung gegenüber Swing AWT, Swing, JavaFX & SWT 3
? Java-SWT-Anwendung in der Taskleiste nicht sichtbar AWT, Swing, JavaFX & SWT 6
H Netbeans-Anwendung schliessen AWT, Swing, JavaFX & SWT 8
M "Billig Excel" Anwendung mit Swing - Aufwand ? AWT, Swing, JavaFX & SWT 4
G "Views-Abwechseln-Pro " in RCP-Anwendung AWT, Swing, JavaFX & SWT 2
H PopUp-Fenster in einer Java Server Faces Anwendung AWT, Swing, JavaFX & SWT 4
T Auf Fenster innerhalb der Anwendung zugreifen-auch elegant? AWT, Swing, JavaFX & SWT 2
G Organisation Anwendung mit mehreren Eingabedialogen AWT, Swing, JavaFX & SWT 3
H JWindow schließen bei einem Klick außerhalb der Anwendung? AWT, Swing, JavaFX & SWT 19
G SWT DatePicker funzt nicht in eigener Anwendung AWT, Swing, JavaFX & SWT 5
E Bestehende Anwendung erweitern ->JFrame in JPanel verpack AWT, Swing, JavaFX & SWT 4
U Anwendung nicht beenden beim form schliessen? AWT, Swing, JavaFX & SWT 6
T "Echte" MDI Anwendung AWT, Swing, JavaFX & SWT 4
G Auf markierten Text einer anderen Anwendung zugreifen. AWT, Swing, JavaFX & SWT 8
G Relativer Pfad in Rich Client Anwendung AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben