Pseudo MVC in java

Ciao

sto mettendo su una piccola architettura di classi che mi svincolino dalla noia della gestione degli eventi per un menu. Essenzialmente ci sarà una classe incaricata di catturare tutti gli eventi generati dal -- più correttamente dalle voci dei menu -- menu e successivamente chiamare il metodo del Controller associato a quella voce.

Essenzialmente il funzionamento ricalca quello dello Zend Framework, per cui i metodi avranno un nome del tipo:

nomeDellaVoceNelMenuAction()

altraVoceDelMenuAction()

per la chiamata dinamica dei menu non ho incontrato alcun intoppo.

Ma ora ho intenzione di svincolare la classe Controller dal compito di gestire i menu, aggiungendo un livello di astrazione che mi permetta di creare un controller per menu.

Quindi per ora il sistema è in grado di intercettare gli eventi generati dalle voci dei menu, gestirle e chiamare il metodo della classe Controller con il nome associato alla voce del menu, ma come fare ad ottenere il nome del menu a cui la voce appartiene?

Una volta trovato il nome del menu sarà sufficiente creare un ulteriore livello di astrazione che permetta di estendere la classe ControllerAction e di creare classi chiamate <nomeMenu>Controller e di inserire al suo interno tutti i metodi relativi alle voci di quel menu. E questo non dovrebbe essere molto complesso.

Spero di essere stato chiaro.

Attendo con ansia suggerimenti

,Andrea

inviato 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Guardando la documentazione di Java noto che JMenu ha un metodo getComponents che restituisce il un array dei componenti figli.

Probabilmente mi toccherà un approccio top-down (ottenere la lista dei figli del menu, associare il mio ActionListener ad ogni voce, e passare al dispatcher il nome di quel menu) anziché il precedente bottom-up (chiamare il metodo associato alla voce del menu, trovare il nome del menu contenitore e passarlo al dispatcher che istanzierà il ControllerAction adatto e chiamerà il metodo associato alla voce).

Sarebbe meglio -- visto il codice che ho ora -- proseguire con la soluzione del problema "trovare il nome del padre", ma nel caso non fosse possibile dovrò procedere all'inverso e riscrivere un poco di codice (cosa aspettata visto che è molto grossolano e quasi senza design patterns)

Comunque avete idea se è possibile ottenere il nome del padre (JMenu) da un'istanza di JMenuItem? (Ovviamente è stato aggiunto JMenuItem a JMenu con il metodo add ._.)

,Andrea

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

Perché mai utilizzando il metodo getSubElements della classe JMenuBar ottengo un array di MenuElement, quindi dei JMenu registrati nella barra, e invece il metodo getSubElements della classe JMenu non mi restituisce un array di JMenuItem bensì un JPopUpMenu?

Eppure nella documentazione dichiarano esplicitamente che il metodo, quando chiamato su oggetti di tipo JMenu, restituisce solo solo un vettore di JMenuItem.

,Andrea

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Note that since JSeparators do not conform to the MenuElement interface, this array will only contain JMenuItems.

Docs

Eseguendo questo codice:

JMenu file = new JMenu("File");
JMenuItem _item = new JMenuItem("Save");
file.add(_item);
for (MenuElement item: file.getSubElements()) {
    System.out.println(item);
}

Produce:

javax.swing.JPopupMenu[,0,0,0x0,invalid,layout=javax.swing.plaf.basic.DefaultMenuLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$PopupMenuBorder@1484a05,flags=8,maximumSize=,minimumSize=,preferredSize=,desiredLocationX=0,desiredLocationY=0,label=,lightWeightPopupEnabled=true,margin=,paintBorder=true]

Inoltre JPopupMenu, al contrario da quanto riportato dalla documentazione ufficiale, non ha il metodo getSubElements.

Cos'è che non quadra? Sono pazzo io?

 :bye:

,Andrea

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda