0

まず、「制御フロー」とは、ユーザーがUIをナビゲートする方法であることを明確にしておきます。(これは私が説明していることの正しい用語ではない可能性が高いので、知っている場合はより良い用語を提案してください!)

最近のほとんどのアプリケーションでは、ユーザーがいつ何をすべきかを決定できるようです。自己完結型の制御ユニットには、ほとんどの場合、テキスト入力とマウスクリックが含まれます。

私が取り組んでいるアプリケーションについては、別の何かが必要です(避けられない「なぜそれが必要なのか、それは良い設計ではないのか」に対する答えについては、この投稿の最後を参照してください)。次の図は、私が行っていることに非常に近いサンプルGUIを示しています。これは削除されただけで、ビジネスドメインが変更されて理解しやすくなっています。

サンプルUI画像

目的の制御フローは次のとおりです。

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で書いたコードと同じように苦痛を感じます。EntersetFocus()

これを達成するためのより良いアプローチはありますか?一般的なデザインパターンと、WPF、JavaFX、Swingなどのフレームワークによって提供される可能性のある特定のソリューションの両方に興味があります。


なぜ誰もがそれを望んでいるのでしょうか?

2つの理由:

  • この特定のアプリケーションは常にこのように機能し、コンピューターの経験がほとんどない多くの人々によって使用されています。何をいつどのように行うかを選択しすぎると、不必要な混乱が生じるだけです。
  • このような単純なタスク(多かれ少なかれデータ入力)の場合、マウスを使用した手動ナビゲーションは、入力マスクを介した事前定義された経路よりも遅く、エラーが発生しやすくなります。
4

1 に答える 1

1

問題

Enterキーをオーバーロードしています。推奨される方法は、ボタンでアクションを表すことです。

材料ではなくレシピ全体に関連している場合、金額フィールドが間違った場所にあります。材料リストの後に下に移動します。

ボタン

ボタンに戻ります。名前フィールドの後、材料フィールドの後、および下部の金額フィールドの後にボタンを配置できます。これにより、ユーザーは更新する内容を具体的に指定できます。

状態パターン

状態パターンを使用して、ユーザーがすでに行ったことと、ユーザーが次にできることを追跡できます。ユーザーが順不同で何かをした場合、画面のどこかにエラーメッセージが返され、次に何をすべきかをユーザーに案内します。

ユーザーアクションのさまざまな可能性をすべて列挙する必要があります。3つのボタンで、6つの組み合わせになります。

  • 名前、成分、量(あなたが説明したもの)
  • 名前、量、成分
  • 材料、名前、量
  • 材料、量、名前
  • 量、名前、成分
  • 量、成分、名前

有効な組み合わせと無効な組み合わせを決定します。状態ツリーには、ユーザーが複数の材料を入力する可能性があるという点で、さらに複雑です。

[OK]ボタンと[キャンセル]ボタン

状態を管理するのではなく、GUIの下部に[OK]と[キャンセル]の2つのボタンを追加できます。これにより、ユーザーは選択した順序でフィールドに入力できます。[OK]ボタンを左クリックするまで、有効性を確認しません。

[OK]ボタンは、通常、Enterキーに関連付けられているボタンです。

ユーザーが複数の材料を入力できるようにするには、材料フィールドの後にボタンが必要です。

于 2013-01-11T15:09:18.750 に答える