私の最初の問題は次のとおりです。「同じアクションが、別の Swingオブジェクトで参照される別の UI コンポーネントと組み合わせて使用される場合、Swing の量をActions
(他のアクションのベースとして使用して) どのように制限するのですか?相互に直接参照"?AbstractAction
JPanel
私の 2 番目の問題は、「アクションの actionPerformerd() メソッドが 2 つ以上の異なる UI コンポーネント参照を使用する場合に、アクションと UI コンポーネントの間で参照を維持する方法」です。直接関係のないさまざまな場所で actionPerformed() メソッド内に ui コンテキストが必要です (まあ、少なくともそれは私が思うことです)。
私が扱っている私の設計上の懸念を説明させてください...
すべての UI ロジックを保持する JFrame が 1 つあります。この JFrame は、JPanel ロジックへの 3 つの異なる参照を保持します: a ControlPanel
、 a 、MainPanel
および a StatusPanel
(すべて JPanel を拡張します)。
ControlPanel
JMenu と項目、JToolBar 項目、およびこの JPanel をセットアップし、すべての適切なアクションがインストールされた状態で contentpane に追加されます。
はMainPanel
、ユーザーとの実際のコミュニケーションが行われる場所です。この JPanel は、内部に多数の JPanel を含む CardLayout を保持します。
これStatusPanel
は実際には、さまざまな JPanel からのあらゆる種類のテキスト メッセージを処理するステータスバーですが、StatusBarManager オブジェクトによって処理されます。ここには空想的なものはありません。退屈な GUI のものだけです。
ここで問題の部分: 最初に、考えられるアクションごとに一連の拡張AbstractActions
をプログラムしました (あまり良いアイデアではありません)。次に、特定のタスクに obj を ActionFactory
渡すan をプログラムしました。次のようにします。メソッドの実装という 1 つの違いだけで、すべての「ファイル」操作
のオブジェクトをインスタンス化できるため、これはより良いアプローチのように思えます。別のものを呼び出すと、以前にインスタンス化された同じオブジェクトが返されるため、これは良い考えのようです (多くの重複オブジェクトを保存します)。これは良い考えに思えるかもしれませんが、私はまだ のコンテキストに苦労しています。とを使用して表示する「カード」を選択すると、Action
ActionFactory.getAction("file.new");
FileAction
actionPerformed()
JPanel
ActionFactory.getAction("file.new");
Action
JPanels
MainPanel
JMenu
JMenuItems
、私はControlPanel
UIコンテキストのみにいて、メソッドにはそのJPanelのを使用して「カード」を設定するコンテキストactionPerformed()
がありません。同じことが MainPanel にいて (ボタンを押して)、StatusPanel のコンテキストがない場合にも当てはまります。MainPanel
CardLayout
これらの以前の提案をstackoveflowで見ましたが、どういうわけか接続できません。私は手がかりを失っています...
SO でのアクションに関する同じ Q&A の並べ替え: here、here、here、here、here、here、here、here、およびhere。
これには、appframework、eclipse rcp、spring rcp などのフレームワークを使用することを提案する人もいます。しかし、デフォルトの JVM 6 で利用できるもの以外のいくつかの理由から、私はフレームワークをまったく使用しないことを好みます。
誰かがこの問題に光を当てて、私の問題の良い解決策を見つけるのに役立つことを願っています. 事前にご協力いただきありがとうございます。