我在 swing 或一般 GUI 设计方面真的没有太多经验(大学里的一些 WPF 应用程序大约是它的高度),但是我的任务是重构 swing 遗留应用程序的一部分在工作中。
我被要求重构的部分围绕一个弹出窗口展开,该窗口可以根据特定的值对象以三种不同的格式显示。这 3 种不同的格式都共享一些基本字段,然后有条件地确定其他字段。负责这个 GUI 元素的类大约有 5k 长,我认为它应该分成三个子类,它们都扩展了基类中的共享内容。但是我完全不知道这是否是正确的方法。
谁能强调一些用于处理共享按钮/字段等元素的不同 swing 组件的策略?
另外,有没有大型的OSS swing应用可以借鉴?
更多信息:我正在处理的应用程序是一个大型遗留应用程序,目前它的结构非常糟糕。我是团队的新手(而且是刚毕业的新人,所以在这方面没有太多经验)并且被要求尝试分解目前负责显示此弹出窗口的庞大类之一成更小的更易于维护的组件。本质上,应用程序中有一个弹出窗口,允许用户响应某些事件,根据他们需要响应的请求的子类型,它具有三种不同的外观。大部分 GUI 元素在所有三种子类型中都是一致的,因此我很想知道继承是否是这里的最佳方法,或者是否有其他策略来处理这个问题?
最佳答案
看了评论,我想我可以回答这个问题了。真正的答案需要一本书。
将您的 GUI 分成尽可能多的嵌套
JPanel
来描述您的 GUI。使用BorderLayout
的简单嵌套JPanel
优于使用GridBagLayout
的复杂JPanel
。需要明确的是,我并不是在批评GridBagLayout
。它在创建表单时很有用。但它不是唯一的 Swing 布局管理器。将每个嵌套的
JPanel
放入其自己的类中。在使用 Swing 组件时使用组合。当且仅当您的类将覆盖
JComponent
方法之一时才使用继承。每个
JPanel
都有自己的JButton
、JLabel
等组件。JBUtton
A 是为JPanel
A 定义的,而JButton
B 是为JPanel
B 定义的,即使用户GUI 认为它们是同一个按钮。您可以通过创建包含标签和按钮文本的 GUI 模型来最大程度地减少重复。您必须通过编写JButton
A 和JButton
的通用ActionListener
来消除操作代码(按下按钮时执行的代码)的重复B可以执行。Swing 应用程序必须以调用
SwingUtilities.invokelater()
开始。这可确保在事件调度线程 (EDT) 上定义和使用 Swing 组件。只有
JFrame
在 Swing 应用程序中使用。每个 JPanel 必须定义一个 Swing 布局管理器。
某些组件,如
JList
和JTable
,在包含在JScrollPane
中时工作得更好。
我确定我忘记了一些事情,但这应该是一个好的开始。
关于java - 如何构建 Swing 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14565599/