我对摇摆或GUI设计一般都没有多少经验(大学里的一些WPF应用程序的高度很高),但是我的任务是重构摇摆遗留应用程序的一部分在工作。
我被要求重构的部分围绕一个弹出窗口,该窗口可以根据特定的值对象以三种不同的格式显示。这3种不同的格式都共享一些基本字段,然后有条件地确定其他格式。负责这个GUI元素的类长约5k,我认为它应该分成三个子类,基类中的共享内容都可以扩展。但是我完全不知道这是否是正确的方法。
有没有人可以强调一些用于处理不同摆动组件的策略,这些组件共享按钮/字段等元素?
此外,是否有可用于学习的大型OSS挥杆应用程序?
更多信息:我正在处理的应用程序是一个庞大的遗留应用程序,目前结构相当可怕。我是团队的新手(也是一个相当近的毕业生,因此在这个领域没有太多的经验)并且被要求尝试分解一个负责显示此弹出窗口的巨大课程更小的可维护组件。实际上,应用程序中有一个弹出窗口允许用户响应某些事件,这有三种不同的外观,具体取决于他们需要响应的请求的子类型。很大一部分GUI元素在所有三种子类型中是一致的,因此我很想知道继承是否是这里最好的方法还是有其他策略来处理这个?
答案 0 :(得分:15)
阅读评论,我想我可以回答这个问题。一个真正的答案需要一本书。
将GUI分解为尽可能多的嵌套JPanel
,以描述您的GUI。使用JPanel
的简单嵌套BorderLayout
优于使用JPanel
的复杂GridBagLayout
。要清楚,我不是批评GridBagLayout
。它在创建表单时很有用。但它并不是唯一的Swing布局管理器。
将每个嵌套的JPanel
放入自己的类中。
使用Swing组件时使用合成。当且仅当您的类将覆盖其中一个JComponent
方法时才使用继承。
每个JPanel
都有自己的JButton
,JLabel
等组件。 JBUtton
A为JPanel
A定义,JButton
B为JPanel
B定义,即使GUI的用户认为它们是相同的按钮。您可以通过创建包含标签和按钮文本的GUI模型来最小化重复。您必须通过编写ActionListener
A和JButton
B可以执行的公共JButton
来消除重复的操作代码(按下按钮时执行的代码)。
Swing应用程序必须以SwingUtilities.invokelater()
的调用开始。这可确保在事件调度线程(EDT)上定义和使用Swing组件。
在Swing应用程序中仅使用一个 JFrame
。
每个JPanel 必须定义了Swing布局管理器。
某些组件(如JList
和JTable
)在JScrollPane
中包含时效果更佳。
我确信我已经忘记了一些事情,但这应该是一个好的开始。
答案 1 :(得分:2)
如果您要设置一个创建50%共享代码的抽象类,然后从中扩展,该怎么办?
例如:
abstract class BasePopupPanel extends JPanel {
public void initialize() {
// Initialize all the shared code here.
// eg. add(new JButton("TEST");
}
}
现在你创建了实际的弹出式面板:
public class GiraffePopupPanel extends BasePopupPanel {
public void initialize() {
super.initialize();
// Here you do all the initializations for this class.
}
}
您可以根据需要创建尽可能多的这些内容。什么时候添加它们......
...假设您有一个名为displayPopup
的方法,那么签名将如下所示:
public void displayPopup(BasePopupPanel popup) {
// do stuff regarding JDialogs, etc.
// ...
popup.initialize();
// do more stuff...
}
我希望能为您提供一个关于如何重构课程的观点。