Domanda

Mi piacerebbe caricare una serie di azioni di Swing in un contenitore in fase di esecuzione e di accesso da parte di un nome di costante come è possibile con un Enum. Lo scopo di questo sarebbe sia per limitare le azioni possibili e anche migliorare la leggibilità.

Inizialmente, stavo considerando una sorta di enum dinamica (vedi http://blog.xebia.com/2009/04/02/dynamic-enums-in-java/ ), ma come sottolinea Java Bevitore di sotto di questo non è necessaria in quanto le azioni rimangono invariati.

Idealmente, quello che mi piacerebbe fare è una sorta di involucro che contiene le istanze AbstractAction che potrebbero essere abilitato / disabilitato ed essere in grado di fare riferimento a ciascuna azione attraverso un nome simbolico.

Modifica:. Domanda è stato riformulato

È stato utile?

Soluzione

Si può fare qualcosa di simile:

public enum Actions {
    COPY( new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            //do something
        }
    }),
    PASTE( new PasteAction() );

    public final AbstractAction action;
    private Actions(AbstractAction action) {
        this.action = action;
    }

}

//...
Actions.COPY.action...;

E poi come altri hanno detto, usare l'enum in combinazione con un EnumSet o EnumMap. Personalmente, non vedo un enorme valore in esso oltre basta avere un paio di campi chiamati, senza un enum.

Credo che ciò che si vuole veramente è una sorta di registro Azione in questo modo:

public class ActionsManager {
    private final Map<String, Action> actions;
    private final Map<User, Set<String>> enabledActions;
    public Action get(String id);
    public void register(String id, Action action);
    public void deregister(String id);
    public boolean isEnabled(User user, Action action);
}

Attuazione lasciato come esercizio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top