关于Java Swing的一般问题

时间:2009-12-26 10:58:20

标签: java swing

我制作了一个功能相当简单的Swing应用程序。然而,在我看来,它所包含的代码变得相当大而且非常混乱。所有swing组件和操作都在一个文件中。因此,例如,如果我要创建一个具有更多功能的更大的应用程序,那么代码将很难通过。

所以我的问题是如何建立一个良好的代码结构。或者,如果有一个很好的网页,我可以阅读它,如果可能的话,一些代码示例。我查看了Sun关于Swing的教程,但是他们已经展示了这些相当简单的例子。

更新:我已经思考了一段时间并检查了一些例子。我不知道我的MVC模式是否正确。无论如何,我的想法是将每个JFrame分隔到他们自己的类文件中。之后我有一个MainFrame,它是应用程序的主窗口。从那个JFrame我创建了每个JFrame的一个实例。并使用Actions从MainFrame调用这些框架。我不知道这是不是一个好主意。然而,无论如何,它使代码更容易阅读。

以下是我的意思

的例子
class Main implements ActionListener {

    private JFrame frame = new JFrame();
    private JButton button1 = new JButton();
    private JPanel panel = new JPanel();

    private FirstFrame frame1 = new FirstFrame();
    private SecondFrame frame2 = new SecondFrame();
    private ThirdFrame frame3 = new ThirdFrame();

    public Main() {
        button1.addActionListener(this);
    }

    public createGUI() {
        frame.setTitle("Main");
        frame.setSize(400,300);
        panel.add(button);

        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
    }

    public static void main(String args[]) {
        new Main().createGUI();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == button1)
        {
            frame1.enable();
        }
    }
}

4 个答案:

答案 0 :(得分:8)

使用Model-View-Controller design pattern.它处理将用户界面代码与业务逻辑分离。

编辑:

由于OP正在寻找有组织的代码而不是灵活的设计,我已从我的答案中删除了NetBeans UI Designer部分。

答案 1 :(得分:5)

考虑到每个应用程序都有相同的问题,组织任何重要大小的用户界面代码都是一个令人惊讶的小问题。有一些技术可以提供帮助:

  1. 重构 - 在代码不整洁后进行清理。
  2. 模型视图控制器模式 - 用于区分关注点。
  3. OO设计 - 使用许多小型合作类而不是大块代码。
  4. “在事件执行操作” - 用于将操作与视图分开的习惯用法。
  5. UML组件模型 - 可视化类级别以上的设计概念。
  6. 依赖性倒置原则 - 组织代码依赖性。
  7. 基本设计技术已经存在很长时间了,并且很好理解,但是应用更大规模的技术似乎是为每个应用程序单独设计的。

    我看到有效应用的一种方法是将事件,监听器,操作等分离到它们自己的类中,并按类型将它们组织成包,或者在包之间使用一致的命名约定,以便组件及其组件相关类很容易识别(XDialog,XDialogMouseListener,XDialogCancelAction等)。

    另一种方法是查看一些大型开源应用程序(Eclipse,Firefox,...),并了解它们如何组织GUI代码。

答案 2 :(得分:2)

我倾向于尽可能多地从Swing组件中提取非GUI相关功能。这意味着你有一些额外的间接性。但是:

  1. Swing层除了GUI交互之外什么都不做
  2. 业务功能更容易测试并因此维护
  3. 我不一定在谈论一个完整的MVC模型(虽然这不是坏事)。它更像是一个类/包组织问题。

答案 3 :(得分:1)

保持头脑的是,UI编程就像其他类型的编程一样。不要认为这是特殊的,你可以忽略合理的做法。不幸的是,大多数教程代码非常糟糕,生产中的代码可能会更糟糕。

关键点:

  • 使用分层设计。这不仅仅是持久性 - 业务 - ui。拆分更精细。例如,布局图层不应该创建组件(布局除外,通常是JPanel)。
  • 首选组合继承。对JFrameJPanel之类的内容进行子类化很少,所以不要这样做。
  • 保持用户界面薄。例如,渲染器中的逻辑非常少。首先,这使得测试变得更加容易(这是自动化测试,手工大规模测试会适得其反)。