アクションの実行可否を宣言的に記述する
Swing Application Frameworkでは、メソッドに@Actionアノテーションを付けることでアクションを定義できます。さらに、@ActionにenabledPropertyパラメータやselectedPropertyパラメータを付加することで、アクションの実行可否状態や選択状態を宣言的に記述可能です。
例えば、ドキュメントが変更されているときだけ「上書き保存」を実行できるようにするには、次のように記述します。
private boolean modified; public boolean isModified() { return modified; } public void setModified(boolean modified) { boolean oldValue = this.modified; this.modified = modified; firePropertyChange("modified", oldValue, modified); } @Action(enabledProperty = "modified") public void save() { // ... }
これはこれで良い機能なんですが、boolean型のプロパティ名しか指定できない上に、プロパティがPropertyChangeイベント発火をサポートする必要があるので、いまいち使い勝手が悪いです。
フレームワークが、アプリケーションアイドル時にOGNL式を自発的に評価して、アクションの状態を更新できると便利だなと思います。イメージとしては以下のような感じです。
@S2Action(enabled = "documentModel.documentCount > 0") public void closeAllDocuments() { // ... }