用于用户操作验证的 Java Swing GUI 设计技术 (MVC-FSM)

2024-01-11

我已经使用 Swing 实现了 GUI,并且总是尽可能地遵循 MVC 模式。
但我想知道 MVC 是否不是这个难题的唯一部分。
GUI 的设计中也使用了 FSM 吗?
我从未在 GUI 中使用过 FSM,我的方法是:在操作时,调用控制器的相应方法,最终更新模型,最后更新视图。
通常,根据用户操作触发的请求,我使用一些简单的检查来确保用户应该能够执行此类操作:是否启用了特定组件?或者这种标签是可见的吗? ETC。
到目前为止,这似乎有效,但我不得不承认我很“幸运”,不需要构建太复杂或复杂的 GUI。
我之前已经构建过 FSM(在不同类型的应用程序中 - 主要是在 C++ 中),并且我开始怀疑 GUI 中的 FSM 是否实际上用作一种模式,以及我的方法,即检查 ActionListeners 代码、用户看到的内容以及哪些组件启用或禁用等以确定用户是否应该看到一些错误消息而不是能够执行特定操作,例如对于成熟的 GUI 应用程序来说,按钮承诺实际上是一个坏主意。
那么,当开始设计 GUI 时,除了如何实现 MVC 之外,您还会在设计中安装/关联 FSM 吗?
UPDATE:
在回顾了 Dhruv Gairola 的评论文章后,我仍然对此感到困惑。
该文章提到构建一个 FSM,尽管它实际上绑定到计算器实现,这意味着即使计算器实现为在没有 GUI 的情况下通过命令行获取用户输入,仍然需要 FSM。
我仍然不确定验证用户在每个时间点的操作的 FSM 是否是流行或有效的设计。
看起来这可能需要花费太多精力,并且需要完全提前设计 GUI,并且所有可能的用户操作都已根据特定状态映射到特定结果。
鉴于没有任何评论,只有一个回复,我倾向于认为可能实际上没有使用 FSM(验证用户对控件的操作)。

非常欢迎对此提出任何意见。
谢谢。


让我们这样说——设计模式主要是不同设计原则的阐述,例如封装变化的内容,对接口进行编程,而不是实现,等等,因此您不必使用模式或任何东西,基本上确保您的编程方式符合良好的设计原则。如果将 FSM 用于特定设计具有设计意义,我建议您采用它。通常鼓励使用模式,以便其他程序员能够理解您的逻辑,并根据他们对模式的了解轻松地对其进行扩展。没有严格的规则说你必须使用 MVC,你必须使用等等等等。结论:只要你应用的模式符合良好的设计原则,(或者即使你没有使用特定的模式) ),确保它的设计足够好,足以让其他人轻松扩展和理解它。这就是我的两分钱的价值..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于用户操作验证的 Java Swing GUI 设计技术 (MVC-FSM) 的相关文章

  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐