首先,让我尝试澄清一下我所说的“控制流”是指用户在我的 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
附加到所有那些拦截Enter
按键的控件,调用所涉及的逻辑,然后手动setFocus()
执行适当的下一个文本字段/其他控件。这行得通,但代码看起来很难维护,感觉很像几十年前我用 VB5 编写的代码。
有没有更好的方法来实现这一目标?我对通用设计模式和 WPF、JavaFX 或 Swing 等框架可能提供的特定解决方案都感兴趣。
为什么会有人想要那个?
两个原因:
- 这个特殊的应用程序一直以这种方式工作,并且被许多计算机经验很少的人使用。给他们太多选择如何做以及何时做只会增加不必要的混乱。
- 对于像这样的简单任务(或多或少只是数据输入),使用鼠标手动导航肯定比通过输入掩码的预定义路径更慢且更容易出错。