0

我正在尝试使用 NetBeans 在 Java 中创建一个框架。它将显示一些数据,同时在一个while循环中从用户那里获取数据。

我可以暂停while循环直到按下确认按钮吗?我发现有人可能会建议睡觉,但由于我必须让用户输入数据,我无法预测他们要花多长时间。

4

1 回答 1

3

GUI 的事件驱动模型破坏了顺序逻辑代码。

为了保持顺序逻辑,可以维护一个state,例如一个枚举:

enum State {
    PROMPTING,
    ASKING_TWO_FIELDS,
    ASKING_THREE_FIELDS,
    CALCULATING,
    DONE
};

private State state = State.DONE;

(这种显式抽象通常只需要从顺序逻辑的转换,或同一表单上的多个状态。)

然后按下按钮等更改状态并禁用/启用输入组件。

事件异步发生,甚至可能在不同的线程上。必须编写响应式代码。在准备事情时,将按下按钮时应该发生的事情联系在一起。这是非常零碎的。

解决这种混乱的一种方法是分成模型-视图-控制类。模型类包含数据,视图是 GUI 组件,一个控制器,即应用程序,从视图中调用,设置数据并控制视图。

从视图中调用是为了使用侦听器完成摆动。

一个食谱:

  • 制作一个主类作为控制器
  • 数据模型类
  • 顶部视图、GUI 类、JFrame (swing) 或 JavaFX 场景
  • 控制器将模型和视图保留为字段
  • 控制器将自身传递给视图
  • 将您的顺序逻辑映射到控制器中的枚举状态
  • 编写转换函数 switchState。
  • 无需等待,而是将 ActionListeners 添加到调用 ia switchState 的 butten (swing) / ButtonHandlers (JavaFX)。
  • 表达业务逻辑的最佳使用方法名称:(startTranslating在应用程序上放置的文本), manualTranslationDone(手动编辑后按下“翻译”按钮)。
于 2015-11-24T12:49:06.160 回答