Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Chiedo scusa, ma la CompositeAction è una classe personalizzata che estende la classe Action public class CompositeAction implements Action{...}.

    Tralasciando questo aspetto, il mio obliettivo è schedulare due remote action in sequenza.
    La domanda è, posso fare semplcemente qualcosa del genere?

    codice:
            btnConferma.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    log.debug("Inizio azione tasto Conferma " + e);
                        new LoadAction1().actionPerformed(e);        
                        new LoadAction2().actionPerformed(e);
                    log.debug("Fine azione tasto Conferma");
                }            
            });
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da maximum Visualizza il messaggio
    Chiedo scusa, ma la CompositeAction è una classe personalizzata che estende la classe Action public class CompositeAction implements Action{...}.
    Action è una interfaccia. Quando si vuole creare una action "custom" tipicamente non si implementa direttamente Action ma si estende (per comodità) la classe AbstractAction.

    E comunque Action non rappresenta solo la esecuzione di "qualcosa" ma espone anche altre informazioni, ad esempio tramite il isEnabled() (che serve ad esempio per far sì che un pulsante/menù che ha quella action si abiliti o no a seconda di questa informazione).

    Quindi creare una Action "composita" cosa vuol dire (in tal sensi)? Hai considerato questi aspetti?


    Quote Originariamente inviata da maximum Visualizza il messaggio
    posso fare semplcemente qualcosa del genere?

    codice:
            btnConferma.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    log.debug("Inizio azione tasto Conferma " + e);
                        new LoadAction1().actionPerformed(e);        
                        new LoadAction2().actionPerformed(e);
                    log.debug("Fine azione tasto Conferma");
                }            
            });
    Tecnicamente sì ma è bruttino.


    Se vuoi applicare il Composite Pattern ad ActionListener (che è più semplice di un Action) e che esegua sempre N ActionListener in sequenza, si può fare:

    codice:
    public class CompositeActionListener implements ActionListener {
        private final ActionListener[] listeners;
    
        public CompositeActionListener(ActionListener... listeners) {
            this.listeners = listeners;
        }
    
        @Override
        public void actionPerformed(ActionEvent e) {
            for (ActionListener l : listeners) {
                l.actionPerformed(e);
            }
        }
    }

    btn.addActionListener(new CompositeActionListener(actList1, actList2, actList3));


    Se vuoi che un ActionListener "blocchi" o no condizionalmente la sequenza, va fatto diversamente.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se vuoi che un ActionListener "blocchi" o no condizionalmente la sequenza, va fatto diversamente.
    Per favore, puoi chiarirmi meglio questo punto?
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da maximum Visualizza il messaggio
    Per favore, puoi chiarirmi meglio questo punto?
    Se vuoi che un ActionListener possa "bloccare" (o al contrario lasciar continuare) condizionatamente il prossimo ActionListener, allora il CompositeActionListener che ho scritto prima ovviamente non va bene. Perché ciascun ActionListener che passi a CompositeActionListener non "sa" nulla degli altri e non ha alcun appiglio per chiamare/bloccare esplicitamente un altro.
    In teoria potrebbe lanciare una eccezione specifica che potrebbe essere catturata nel actionPerformed del CompositeActionListener. Ma è molto molto brutto. Le eccezioni non dovrebbero essere usate (solo) per il controllo del "flusso".

    Una alternativa è usare il Decorator Pattern.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.