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:
Dieses wird vom Hautprogramm implementiert, in meiner JMenubar steht folgendes:
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
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:
Damit müßte doch MVC weiterhin erfüllt sein? :roll: Denk ich da richtig?
Andy
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);
}
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;
}
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) {
}
}
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