Servus,
ich will SwingActions einsetzen, damit ich die Aktionen an verschiedenen Stellen im Programm nutzen kann. Der Controller haengt beim View meine Actions ein, soweit so gut. Dazu bindet der Controller den View ans Model, soweit so gut. Nur wenn jetzt ein Event abgedrückt wird, dann kennt die Action ja nur das ActionEvent und nicht mehr den View oder den Controller der dazu gehört. Meine Actions sind alle in etwa so aufgebaut:
Der Controller macht dann so etwas:
[Java]
public GuiController( )
{
// create and bind objects
model = new JobaCalculator();
WelcomeView view = new WelcomeView( model, this );// bind view to model - Observer-Pattern - JavaInsel8, S. 436ff
model.addObserver(view);
// actions einhaengen
view.getSymbolButton0().addActionListener( new CalcAddDigit0Action() );
view.getSymbolButton1().addActionListener( new CalcAddDigit1Action() );
view.getSymbolButton2().addActionListener( new CalcAddDigit2Action() );
....
view.getSymbolButtonPlus().addActionListener( new CalcProcessCommandPlusAction() );
this.doStartAction( view );
}
public void doStartAction( WelcomeView view ) {
// configure view, default action-objects are set in view itself
// collect data, call model, configure and create
// new view, grab rootframe and replace old view
RootFrame rf = RootFrame.getInstance();
rf.replaceView(view);
}
[/code]
Wie macht ihr das, also der SwingAction etwas mitgeben? Wenn ich das kann, dann kann ich meine Notlösung vorantreiben, dass mein View nicht nur das Model sondern auch seinen Controller speichert, ich will also nicht mit jeder Action eine GuiController-Instanz erzeugen, sondern so oft es geht den Controller aus dem View holen. Vielleicht mach ich den GuiController als Singleton, mal schauen. Meine Idee war: ist der GuiController die Anlaufstelle für alle Methoden aus den SwingActions, dann kann ich sehr einfach einen Packen Unittests auf diese Klasse loslassen, daher wollte ich die Logik in dieser Klasse sammeln.
Bei einem anderen Tutorial wurde das so gelöst, dass der Controller viele innere Klassen hat, irgendwie auch nicht schön.
Danke vorab für die ein oder andere Idee.
ich will SwingActions einsetzen, damit ich die Aktionen an verschiedenen Stellen im Programm nutzen kann. Der Controller haengt beim View meine Actions ein, soweit so gut. Dazu bindet der Controller den View ans Model, soweit so gut. Nur wenn jetzt ein Event abgedrückt wird, dann kennt die Action ja nur das ActionEvent und nicht mehr den View oder den Controller der dazu gehört. Meine Actions sind alle in etwa so aufgebaut:
Java:
public class AboutAction extends AbstractAction {
{
putValue( Action.NAME, "Über ..." );
putValue( Action.DISPLAYED_MNEMONIC_INDEX_KEY, 0 );
}
@Override
public void actionPerformed(ActionEvent e) {
GuiController controller = new GuiController();
controller.doAboutAction();
}
}
Der Controller macht dann so etwas:
[Java]
public GuiController( )
{
// create and bind objects
model = new JobaCalculator();
WelcomeView view = new WelcomeView( model, this );// bind view to model - Observer-Pattern - JavaInsel8, S. 436ff
model.addObserver(view);
// actions einhaengen
view.getSymbolButton0().addActionListener( new CalcAddDigit0Action() );
view.getSymbolButton1().addActionListener( new CalcAddDigit1Action() );
view.getSymbolButton2().addActionListener( new CalcAddDigit2Action() );
....
view.getSymbolButtonPlus().addActionListener( new CalcProcessCommandPlusAction() );
this.doStartAction( view );
}
public void doStartAction( WelcomeView view ) {
// configure view, default action-objects are set in view itself
// collect data, call model, configure and create
// new view, grab rootframe and replace old view
RootFrame rf = RootFrame.getInstance();
rf.replaceView(view);
}
[/code]
Wie macht ihr das, also der SwingAction etwas mitgeben? Wenn ich das kann, dann kann ich meine Notlösung vorantreiben, dass mein View nicht nur das Model sondern auch seinen Controller speichert, ich will also nicht mit jeder Action eine GuiController-Instanz erzeugen, sondern so oft es geht den Controller aus dem View holen. Vielleicht mach ich den GuiController als Singleton, mal schauen. Meine Idee war: ist der GuiController die Anlaufstelle für alle Methoden aus den SwingActions, dann kann ich sehr einfach einen Packen Unittests auf diese Klasse loslassen, daher wollte ich die Logik in dieser Klasse sammeln.
Bei einem anderen Tutorial wurde das so gelöst, dass der Controller viele innere Klassen hat, irgendwie auch nicht schön.
Danke vorab für die ein oder andere Idee.