|
アクション |
Swing のその他の変更 |
ActionEvent ソースへのアクション追加用 API
背景
Swing は、アプリケーション開発者が機能を集中化して、GUI の複数の場所からその機能にアクセスできるようなコマンドパターンの実装を提供します。Actionインタフェースは、ActionListenerを提供するために使用されます。ActionListenerは、ツールバー、メニュー項目、およびキーボードバインドからアクセス可能な機能の実装を提供できます。Actionの状態が (無効にされるなどして) 変化すると、対応制御もそれに応じて (無効にされるなどして) 変化します。問題
Actionが意図したとおりに機能するためには、次の接続を作成する必要があります (Actionがすでに作成されていることが前提)。一般的なアプリケーションは 5 から 25 の
- コントロールを作成する必要があります。
Actionはコントロール上にActionListenerとして追加されます。PropertyChangeListenerが作成されます。これは、Action上のPropertyChangeEventに応答してコントロールの更新方法を規定します。PropertyChangeListenerがリスナーとしてAction上に追加されます。- 元に戻してガベージコレクションを可能にするために、リンケージに関する情報の保持が必要とされる場合があります (1.2 では、これは WeakRefs を使って自動的に処理される)。
Actionを保持し、各Actionは 2 から 3 のコントロールを保持するため、上記の手順は多い場合 75 回も実行する必要があります。開発者にとっての負荷を大幅に軽減するため、
Actionの潜在的なContainerに対してヘルパーメソッドを使用することにより、自動処理を実行する方法が用意されました。現在のところ、Swing で自動処理を実行できることが明らかになっているのは次の 3 か所です。
JToolBar.java public JButton add(Action a)JMenu.java public JMenuItem add(Action a)JPopupMenu.java public JMenuItem add(Action a)この方法には、いくつかの問題があります。
- ビルダにとって、これは大きな問題になります。 ビルダは
Container.add()をオーバーロードして、それ自体が追加されて終了するわけではない非Componentパラメータを許可するためです。- 開発者は、コンテナクラスをサブクラス化することなく作成されたコントロールの構成に関係することはできません。
- サブクラス化したとしても、構成の粒度は、追加されたコントロール単位ではなく、
Container単位になります。- これにより、開発者は、
Actionが許可するActionEventソースの全範囲ではなく、Containerごとの目的のコントロールに制限されます。解決法
多くの開発者からのコメントによると、ActionEventソースである独自のコントロールを作成してから、コントロールを特定のActionに接続するメソッドを保持することが望まれています。解決法は、この要望に沿ったもので、同時に上記の欠点の解決にも取り組んでいます。追加された API は、まず AbstractButton に追加されます。 これは、
JButton、JMenuItem、JMenu、JCheckBoxなどの抽象スーパークラスです。新規 public メソッドは、次のとおりです。 さらに、提供されたアクションを使ってコントロールを直接作成することを可能にする ActionEvent ソースにコンストラクタが追加されています。
JButton では、次のメソッドです。
同等のコンストラクタが、以下に追加されました。 注 :
setActionは、開発者の便宜のために上記のリンケージ処理を実行する単なるヘルパーメソッドです。- 開発者が、進行中のコントロールに対する
Actionを頻繁に切り替えることは考慮されていません。ただし、setActionを使用して切り替えを行うことは可能です。setActionは、以前に設定されたアクションを置き換えてPropertyChangeEventを発生させるためです。- これは、
ActionListenerを追加する標準メソッドを置き換えるものではないため、上記のaddActionListener()を使用することに留意してください。- 上に示した現在の
ContainerAPI が、setAction に関して再実装されて、以前と同じ動作を提供できるようにします。これにより、コードの保守が容易になります。configurePropertiesFromActionメソッドおよびcreateActionPropertyChangeListenerメソッドは、必要なデフォルト動作を提供するためにサブクラス内でオーバーライドされます。JToolBar、JPopupMenu、JMenu 用の createAction ファクトリメソッド
新規ファクトリメソッドを使用すると、アクションが (add メソッドを使って) 直接追加された場合に、ツールバーおよびメニューの作成内容を制御できます。JToolBar への追加:
JPopupMenu への追加: JMenu への追加:新規アクション定数
以下を参照してください。AbstractAction への getKeys メソッドの追加
この新規メソッドは AbstractAction の直列化に必要なメソッドで、開発者が AbstractAction 用に設定されたキーを調査する手段を提供します。以下を参照してください。
|
Copyright ©1999 Sun Microsystems, Inc. All Rights Reserved. コメントの送付先: swing-feedback@java.sun.com.これは購読リストではありません。 |
Java ソフトウェア |