Swirrel 0.3


Swirrel 0.3 ist da. Wichtigste Neuerung ist die Möglichkeit, Actions per Annotation erzeugen zu lassen:

public class ActionWrapperExampleSwFrame extends SwFrame {
  
  @ActionPerformed("call")
  private final JButton button = new JButton();
  
  public ActionWrapperExampleSwFrame() {
    super("Swirrel ActionWrapper example");
    setSize(500,500);
    JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    panel.add(button);
    getContentPane().add(panel);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
  }
  
  @ActionWrapper(name="An interesting name", 
                 shortDescription="short description",
                 smallIcon="calculate.png") //Icon über Class.getResource
  private void call() {
    JOptionPane.showMessageDialog(this, "I react!");
  }
  
  public static void main(String[] args) {
    new ActionWrapperExampleSwFrame();
  }
}

Ohne die @ActionWrapper würde die @ActionPerformed-Annotation einfach einen ActionListener erzeugen, der an die Methode call() delegiert. Jetzt wird dagegen eine Action mit den spezifizierten Parametern erzeugt (deren actionPerformed()-Methode natürlich ebenfalls call() aufruft) und an den Button gehängt. Es gibt nur eine Action pro Methode (was z.B. wichtig ist, wenn ein Menü und ein ToggleButton synchron geschaltet werden sollen). Als „Registry“ habe ich eine WeakHashMap verwendet, die die Actions auch freigibt, wenn sonst niemand darauf referenziert. Überraschenderweise scheint das alles recht gut zu funktionieren, ich hatte mehr Probleme bei dem ganzen Reflection-Karate erwartet…

Ach ja: Natürlich werden auch mehr Listener als bei der Vorversion unterstützt. Viel Spaß beim Ausprobieren!

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s