3

我们将在我们的下一个项目中使用 Swing,这将是一个轻量级桌面应用程序。

我一直在阅读 Oracle 网站上的 Swing 教程并开始掌握它。

有人告诉我,JFrame我需要在一个 JFrame 和 switch 中工作,而不是切换JPanels

我对你的问题如下。

我可以在设计模式(所见即所得编辑器)中创建 JPanel 设计(或其模板)并调用jframe.setContentPane(nameOfJPanel)还是以编程方式在代码中执行它们?

其次,我如何构建我的代码......如果我动态添加新的 JPanel 并将它们的事件绑定到事件处理程序......我所有的逻辑和代码都将在一个拥有数十种方法的巨大类中。我只是不知道如何继续,我在互联网上找不到一个包含多个(比方说超过 6 个)面板的示例。

4

3 回答 3

4

所见即所得或不所见即所得

在最好的情况下,这是一个值得商榷的问题。

我鼓励我所有的初级开发人员开始手动编写 UI,因为它教给他们有关如何使用布局管理器和如何处理复合布局的重要基础知识。

这往往需要更长的时间,因为您需要在每次更改时验证布局。

我个人使用 Netbeans 中的表单编辑器来完成我的大部分日常工作,但会手动调整 UI

结构

考虑责任边界、重用和减少策略。

你不想要的是什么都能做的大型大师班。维护和更新将很困难(我每天都生活在这种恐怖中)。

相反,确定不同的责任区域,并使用 getter 和 setter 或模型在应用程序中移动数据。您可以将代码解耦得越多,更新和修改就越容易。

尽可能识别类似的工作并将其建模为接口和抽象类。基本上,无论您何时开始考虑应对代码,都可能很好地表明您的设计已关闭,您应该考虑实现抽象类以覆盖重叠。

利用ActionAPI 来复制常用概念(复制和粘贴就是一个示例。您可能需要菜单项、可能的工具栏项,甚至可能是弹出项,这些都可以由同一个Action类处理)。

将数据与视图分开。正如我之前所说,利用模型。数据不应该关心它是如何收集或修改的,只要它可以。同样,视图不应该关心数据是如何管理的,只关心它是如何管理的。

如果可能,请在应用程序的不同区域之间定义接口。通过这种方式,您可以进一步解耦应用程序,并且没有任何部分依赖于任何一种实现(你好,我的世界:P)

不要试图简单地挖掘组件层次结构来访问该字段,如果您需要更改代码,它将产生一场噩梦!

于 2012-10-18T09:42:08.790 回答
3

JFrame 将是您的应用程序的主窗口,面板将是组成它的砖块。

您应该在自己的类中创建每个面板,并且可以按包中的功能排列它们。您将拥有用于保存应用程序逻辑部分内容的面板和包含真实内容的面板。逻辑面板可以是主视图和菜单栏。应用程序面板可以是表单、菜单、画布……

您必须将应用程序面板放在逻辑面板中,并根据用户的操作更改逻辑的内容。

您应该研究布局是如何工作的,以便在 JFrame 内构成视图并在面板内布局组件。

例如,在定义应用程序的主要区域时,BorderLayout 是经典的: - 顶部的菜单和工具栏 - 左侧的浏览器 - 底部的状态栏 - 中心的主面板

您可以使用 WYSIWYG 编辑器,但避免在同一个类中进行所有设计。否则你将有一个可怕的巨大的类。在单独的类中创建面板并在主视图中组合它们。
您可以使用空面板作为占位符来帮助您创建应用程序的结构。

您必须将域数据绑定到视图,以免将两层混合在一起。绑定意味着您将编写一种从 java bean 到表单的方法,反之亦然。基本绑定是手写的,但存在一些工具可以做到这一点。如果它是一个小型应用程序,那么手写所有内容可能会更好。

构建 Swing 应用程序可能非常棘手(您必须了解事件调度线程、布局管理、事件管理、小部件(标签很简单,但 JTable 处理起来可能非常复杂);

我建议在开始项目之前找一本关于该主题的书,并找到一些开源的 Swing 应用程序来研究它的结构。

于 2012-10-18T09:46:44.503 回答
2

这就是我组织代码的方式:

class Panel1 extends JPanel{
   //code for panel1 and its Components
}

class Panel2 extends JPanel{
   //code for panel2 and its components
}
// and it follows. 
class ApplicationFrame extends JFrame{
    /// LOGIC to switch between panels
}

class Main{
  //contains main() function
}

任何手工制作的 GUI 代码都比计算机生成的 WYSIWYG -APP 代码更好。

于 2012-10-18T09:34:16.383 回答