Wpf 如何在GUI中正确实现严格的控制流?
首先,让我试着澄清一下,我所说的“控制流”是指用户在我的UI中导航的方式。(这可能不是我所描述的正确术语,因此如果您知道,请推荐一个更好的术语!) 大多数现代应用程序似乎让用户决定何时做什么。独立的控制单元主要涉及一些文本输入和最多一次鼠标点击 对于我正在开发的应用程序,我想要一些不同的东西(请参阅本文末尾,以了解不可避免的“为什么你会想要它,这不是好的设计?”的答案)。下图显示了一个与我正在做的非常接近的示例GUI,它只是被剥离了,并且业务域已被更改以使其易于理解: 预期控制流程如下所示:Wpf 如何在GUI中正确实现严格的控制流?,wpf,swing,user-interface,javafx,Wpf,Swing,User Interface,Javafx,首先,让我试着澄清一下,我所说的“控制流”是指用户在我的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个组合
您仍然需要在配料字段后面有一个按钮,以允许用户输入多个配料。您可以有两个按钮,而不是按enter键驱动所有内容。一个在名称字段后,一个在成分字段后。如果“金额”字段应用于整个配方,则应随名称上移,或下移至底部。其思想是用户从左到右,从上到下浏览屏幕。数量字段适用于每种成分。我不太确定我是否理解你的意思-你是否建议用户使用Tab键浏览新的UI(使用你建议的按钮)?谢谢!我正在寻找的是类似于州模式的东西。我知道按钮将是今天完成事情的方式,但对于这个特殊的应用程序,我希望尽可能使鼠标远离一切。(数量适用于每种成分,我认为应该在正确的位置。)@us2012:祝你好运。如果数量与每种成分一致,则应使用一个包含两列的JTable来列出成分。我刚刚看到你的其他评论。是的,用户必须能够从一个输入字段切换到下一个输入字段,否则他们将不得不使用鼠标进入下一个输入字段。