まず、「制御フロー」とは、ユーザーがUIをナビゲートする方法であることを明確にしておきます。(これは私が説明していることの正しい用語ではない可能性が高いので、知っている場合はより良い用語を提案してください!)
最近のほとんどのアプリケーションでは、ユーザーがいつ何をすべきかを決定できるようです。自己完結型の制御ユニットには、ほとんどの場合、テキスト入力とマウスクリックが含まれます。
私が取り組んでいるアプリケーションについては、別の何かが必要です(避けられない「なぜそれが必要なのか、それは良い設計ではないのか」に対する答えについては、この投稿の最後を参照してください)。次の図は、私が行っていることに非常に近いサンプルGUIを示しています。これは削除されただけで、ビジネスドメインが変更されて理解しやすくなっています。
目的の制御フローは次のとおりです。
1 user enters name of recipe, presses Enter
2 user enters ingredient, presses Enter
3 if ingredient field is empty, we're done: go to 9
4 dialog window shows up, queries database with user input and lets him select from a list of possible ingredients
5 if nothing was selected, go to 2
6 user enter amount, presses Enter
7 add this ingredient to an observable collection which is bound to the list
8 go to 2
9 dialog window shows up, prompts user for price of the mixture
このための私の現在のコードは、キーの押下をインターセプトし、関連するロジックを呼び出してから、適切な次のテキストフィールド/その他のコントロールを手動で呼び出すKeyListener
すべてのコントロールに接続されているに基づいています。これは機能しますが、コードを維持するのは難しいように見え、数十年前にVB5で書いたコードと同じように苦痛を感じます。Enter
setFocus()
これを達成するためのより良いアプローチはありますか?一般的なデザインパターンと、WPF、JavaFX、Swingなどのフレームワークによって提供される可能性のある特定のソリューションの両方に興味があります。
なぜ誰もがそれを望んでいるのでしょうか?
2つの理由:
- この特定のアプリケーションは常にこのように機能し、コンピューターの経験がほとんどない多くの人々によって使用されています。何をいつどのように行うかを選択しすぎると、不必要な混乱が生じるだけです。
- このような単純なタスク(多かれ少なかれデータ入力)の場合、マウスを使用した手動ナビゲーションは、入力マスクを介した事前定義された経路よりも遅く、エラーが発生しやすくなります。