どのように他のアクションからアクションを呼び出すには? (それがすべてで賢明だ場合)

StackOverflow https://stackoverflow.com/questions/2205945

質問

私は私のメニュー項目の多くは、同様に、ツールバーで使用されようとしていることに気づいたので、

私は、ActionクラスにActionListenerにを使用してから、Swingアプリケーションをリファクタリングしようと思います。

今私は、基礎となるモデルの状態を扱うし、適切なユーザーダイアログを表示するImportExportというクラスを持っています。 ImportExportは機能save()saveAs()open()を持っています。ユーザーが「開く」メニュー項目をクリックすると、アクションリスナーは、open()を呼び出しモデルは変更がある場合は最初のチェックをopen()し、その場合は、彼が最初に保存したい場合は、ユーザーを求めるダイアログが表示されます。ユーザーがクリックした場合、今、「はい」open()は再びいくつかのチェックを実行し、ユーザーのダイアログを表示するsave()を呼び出します。 save()はかなり永続的である:このアクションから抜け出すための唯一の方法は、成功した保存やユーザーは、彼がキャンセルしたいことを決定することにより、どちらかです。私は強くsave()が提供するフィードバックに依存しており、ユーザーがキャンセルしたい場合、私は、呼び出しopen()機能を解除ます。

私は、三つのクラス(ImportExportOpenActionSaveAction)にSaveAsActionクラスを分割したかったそれらのそれぞれは、AbstractActionをサブクラス化し、最終的にImportExportクラスを取り除きます。ユーザーが別のものを開く前に、モデルを保存したい場合、私は実行するためにSaveActionに伝えるにはどうすればよい:そして、これは私の問題が発生したどこにあるのでしょうか?ユーザーがキャンセルすることを決定した場合、どのようにフィードバックを得るのですか?

これはさえ正しいアプローチですか?私は保存して開いたアクションでコードを重複していて好きではないと私はすでに私の基本的なモデルにできるだけ多くの機能を入れているが、これは何のオプションではありませんので、ユーザーのダイアログが場違いobiouslyです。私はちょうど私のActionクラスを維持し、単純にすべてのアクションがImportExportで適切な関数の呼び出し委任機能やsouldのこの種を保持するために、すべてで設計ImportExportました。どのようにActionsを使うのですか?

役に立ちましたか?

解決

関連する決定木があるときに

私は時々「コントローラ」アクションを追加します。 OpenAction、SaveActionとSaveAsActionは、このコントローラのアクションをサブクラス化します。コントローラのアクションは、モデルの状態を判断し、適切なとは、正しいサブクラスを呼び出す場合、ユーザからの詳細情報を要求する。

他のヒント

ImportExportController

私はこれらのメソッドを持つ、open, save, saveAsクラスを作成します。このコントローラは、ビジネス・ロジックを知っているだろう。

私のActionクラスは、ビジネスロジックの多くが含まれていません。彼らは唯一のコントローラを呼び出します。

しかし、これらのアクションはすべてのラベル、アイコン、加速器... JButtonに表示されている必要があり、JMenuItem、などが含まれます。

私にとっては、Actionsは便宜上使用GUI指向クラス、(彼らは非常に便利です!)ですが、何のクラスは、ビジネスロジックを処理するための専用ません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top