Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing桌面应用程序-如何组织我的代码_Java_Swing_Frameworks - Fatal编程技术网

Java Swing桌面应用程序-如何组织我的代码

Java Swing桌面应用程序-如何组织我的代码,java,swing,frameworks,Java,Swing,Frameworks,我们将在下一个项目中使用Swing,这将是一个轻量级桌面应用程序 我一直在阅读Oracle网站上的Swing教程,并已开始掌握其中的诀窍 有人告诉我,我需要在一个JFrame内工作,而不是切换JFrame,然后切换JPanels 我的问题如下 我可以在设计模式(WYSIWYG编辑器)中创建JPanel设计(或其模板)并调用jframe.setContentPane(nameOfJPanel)吗?还是以编程方式在代码中创建它们 其次,我如何构造我的代码。。。如果我动态添加新的JPanel并将其事件

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

我一直在阅读Oracle网站上的Swing教程,并已开始掌握其中的诀窍

有人告诉我,我需要在一个JFrame内工作,而不是切换
JFrame
,然后切换
JPanels

我的问题如下

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


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

我就是这样组织代码的:

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代码,都比计算机生成的所见即所得-应用程序代码要好。

是否为所见即所得 在最好的情况下,这是一个有争议的问题

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

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

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

结构 考虑责任的界限,重用和减少策略

你不想要的是一个能做任何事情的大型大师级课程。它将很难维护和更新(我每天都生活在这种恐惧中)

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

识别相似的工作,并尽可能将其建模为接口和抽象类。基本上,在哪里开始考虑应对代码可能是一个很好的指示,你的设计是关闭的,你应该考虑实现抽象类覆盖重叠。 利用
Action
API复制常用概念(复制和粘贴就是一个例子。您可能需要菜单项、可能的工具栏项甚至弹出项,这些都可以由相同的
Action
类处理)

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

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


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

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

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

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

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

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

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

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

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


我建议您在开始项目之前,先找一本关于这个主题的书,并找一些开源swing应用程序来研究它是如何构造的。

您是否有机会将applicationFrame作为参数发送给JPanel,以便执行frame.addComponent(panel)操作不是。我一个接一个地实例化JPanel,然后根据需要切换到它们。我不会将applicationFrame对象作为参数发送给JPanel。