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