Wpf 如何在GUI中正确实现严格的控制流?

Wpf 如何在GUI中正确实现严格的控制流?,wpf,swing,user-interface,javafx,Wpf,Swing,User Interface,Javafx,首先,让我试着澄清一下,我所说的“控制流”是指用户在我的UI中导航的方式。(这可能不是我所描述的正确术语,因此如果您知道,请推荐一个更好的术语!) 大多数现代应用程序似乎让用户决定何时做什么。独立的控制单元主要涉及一些文本输入和最多一次鼠标点击 对于我正在开发的应用程序,我想要一些不同的东西(请参阅本文末尾,以了解不可避免的“为什么你会想要它,这不是好的设计?”的答案)。下图显示了一个与我正在做的非常接近的示例GUI,它只是被剥离了,并且业务域已被更改以使其易于理解: 预期控制流程如下所示:

首先,让我试着澄清一下,我所说的“控制流”是指用户在我的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
我当前的代码是基于
keylister
s附加到所有拦截
Enter
按键的控件,调用相关逻辑,然后手动
setFocus()
相应的下一个文本字段/其他控件。 这是可行的,但代码看起来很难维护,感觉很痛苦,就像我几十年前在VB5中编写的代码一样

有没有更好的方法来实现这一点?我对通用设计模式和WPF、JavaFX或Swing等框架可能提供的特定解决方案都感兴趣。


为什么会有人想要呢

原因有二:

  • 这个特殊的应用程序一直都是这样工作的,并且被许多缺乏计算机经验的人使用。让他们在做什么、如何做和何时做上有太多的选择,只会增加不必要的困惑
  • 对于像这样的简单任务(或多或少只是数据输入),使用鼠标手动导航肯定比通过输入掩码的预定义路径更慢、更容易出错

    • 问题

      您正在重载Enter键。首选的方法是让按钮代表动作

      如果金额字段与整个配方(而非配料)相关,则该字段位于错误的位置。在配料表后向下移动

      按钮

      回到按钮上来。您可以在底部的名称字段、配料字段和金额字段后面有一个按钮。这允许用户明确他们想要更新的内容

      状态模式

      您可以使用来跟踪用户已经做了什么,以及用户下一步可以做什么。如果用户不按顺序操作,您会在屏幕上的某个位置返回一条错误消息,指导用户下一步要做什么

      您必须列举用户操作的所有不同可能性。有3个按钮,即6个组合

      • 名称、成分、数量(您描述的内容)
      • 名称、数量、成分
      • 成分、名称、数量
      • 成分、数量、名称
      • 数量、名称、成分
      • 数量、成分、名称
      您将决定哪些组合有效,哪些组合无效。状态树还有一个更复杂的问题,用户可能要输入多个成分

      确定和取消按钮

      您可以在GUI的底部添加一对按钮,确定和取消,而不是管理状态。这允许用户按照他们选择的任何顺序填写字段。在左键单击“确定”按钮之前,不会检查有效性

      OK(确定)按钮是通常绑定到Enter键的按钮


      您仍然需要在配料字段后面有一个按钮,以允许用户输入多个配料。

      您可以有两个按钮,而不是按enter键驱动所有内容。一个在名称字段后,一个在成分字段后。如果“金额”字段应用于整个配方,则应随名称上移,或下移至底部。其思想是用户从左到右,从上到下浏览屏幕。数量字段适用于每种成分。我不太确定我是否理解你的意思-你是否建议用户使用Tab键浏览新的UI(使用你建议的按钮)?谢谢!我正在寻找的是类似于州模式的东西。我知道按钮将是今天完成事情的方式,但对于这个特殊的应用程序,我希望尽可能使鼠标远离一切。(数量适用于每种成分,我认为应该在正确的位置。)@us2012:祝你好运。如果数量与每种成分一致,则应使用一个包含两列的JTable来列出成分。我刚刚看到你的其他评论。是的,用户必须能够从一个输入字段切换到下一个输入字段,否则他们将不得不使用鼠标进入下一个输入字段。