如何构建Swing应用程序

我对摇摆或GUI设计一般都没有多少经验(大学里的一些WPF应用程序的高度很高),但是我的任务是在工作中重构部分循环遗留应用程序。

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

任何人都可以强调一些用于处理不同摆动组件的策略,这些组件共享按钮/字段等元素吗?

此外,是否有任何大型OSS挥杆应用程序可用于学习?

更多信息:我正在处理的应用程序是一个庞大的遗留应用程序,目前相当可怕的结构。 我是团队的新手(也是一个相当近的gradle生,因此在这方面没有太多的经验)并且被要求尝试打破其中一个负责显示此弹出窗口的巨大课程更小的可维护组件。 基本上,应用程序中有一个弹出窗口允许用户响应某些事件,这有三种不同的外观,具体取决于他们需要响应的请求的子类型。 很大一部分GUI元素在所有三个子类型中都是一致的,因此我很想知道inheritance是否是最好的方法,还是有其他策略来处理这个问题?

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

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

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

  3. 使用Swing组件时使用组合。 当且仅当您的类将覆盖其中一个JComponent方法时才使用inheritance。

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

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

  6. Swing应用程序中只使用一个 JFrame

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

  8. 某些组件(如JListJTable在封装在JScrollPane时效果更好。

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

如果您要设置一个创建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... } 

我希望能给你一个关于如何重构课程的观点。