java - 如何构建 Swing 应用程序

标签 java swing user-interface

我在 swing 或一般 GUI 设计方面真的没有太多经验(大学里的一些 WPF 应用程序大约是它的高度),但是我的任务是重构 swing 遗留应用程序的一部分在工作中。

我被要求重构的部分围绕一个弹出窗口展开,该窗口可以根据特定的值对象以三种不同的格式显示。这 3 种不同的格式都共享一些基本字段,然后有条件地确定其他字段。负责这个 GUI 元素的类大约有 5k 长,我认为它应该分成三个子类,它们都扩展了基类中的共享内容。但是我完全不知道这是否是正确的方法。

谁能强调一些用于处理共享按钮/字段等元素的不同 swing 组件的策略?

另外,有没有大型的OSS swing应用可以借鉴?

更多信息:我正在处理的应用程序是一个大型遗留应用程序,目前它的结构非常糟糕。我是团队的新手(而且是刚毕业的新人,所以在这方面没有太多经验)并且被要求尝试分解目前负责显示此弹出窗口的庞大类之一成更小的更易于维护的组件。本质上,应用程序中有一个弹出窗口,允许用户响应某些事件,根据他们需要响应的请求的子类型,它具有三种不同的外观。大部分 GUI 元素在所有三种子类型中都是一致的,因此我很想知道继承是否是这里的最佳方法,或者是否有其他策略来处理这个问题?

最佳答案

看了评论,我想我可以回答这个问题了。真正的答案需要一本书。

  1. 将您的 GUI 分成尽可能多的嵌套 JPanel 来描述您的 GUI。使用 BorderLayout 的简单嵌套 JPanel 优于使用 GridBagLayout 的复杂 JPanel。需要明确的是,我并不是在批评 GridBagLayout。它在创建表单时很有用。但它不是唯一的 Swing 布局管理器。

  2. 将每个嵌套的 JPanel 放入其自己的类中。

  3. 在使用 Swing 组件时使用组合。当且仅当您的类将覆盖 JComponent 方法之一时才使用继承。

  4. 每个JPanel都有自己的JButtonJLabel等组件。 JBUtton A 是为 JPanel A 定义的,而 JButton B 是为 JPanel B 定义的,即使用户GUI 认为它们是同一个按钮。您可以通过创建包含标签和按钮文本的 GUI 模型来最大程度地减少重复。您必须通过编写 JButton A 和 JButton 的通用 ActionListener 来消除操作代码(按下按钮时执行的代码)的重复B可以执行。

  5. Swing 应用程序必须以调用 SwingUtilities.invokelater() 开始。这可确保在事件调度线程 (EDT) 上定义和使用 Swing 组件。

  6. 只有 JFrame 在 Swing 应用程序中使用。

  7. 每个 JPanel 必须定义一个 Swing 布局管理器。

  8. 某些组件,如 JListJTable,在包含在 JScrollPane 中时工作得更好。

我确定我忘记了一些事情,但这应该是一个好的开始。

关于java - 如何构建 Swing 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14565599/

相关文章:

java - Spring Data JPA 实体图不适用于 Spring Boot

java - 由于安全异常,无法在浏览器上访问我的小程序

java - 加速度计错误报告

java - BorderLayout.CENTER 不居中

mysql - 在 mysql 工作台中按 ctrl+w 会导致 ETB

user-interface - 在 MVP 界面模式中划分已经变得太大的演示者的好做法是什么?

java - 链表和抛出异常

java - Java 在图像和显示方面是否存在任何已知问题

swing - scala 的鼠标事件有效吗?如何?

java - Java 中的属性表