我正在开发一个显示图像并播放数据库声音的应用程序。我正在尝试确定是否使用单独的JFrame从GUI向数据库添加图像。
我只是想知道使用多个JFrame窗口是否是一种好习惯?
我只是想知道使用多个JFrame是否是一种好习惯?
坏习惯(坏习惯)。
有多种方法可以在一个GUI中显示许多元素,例如:
CardLayout
(简称演示。)。适用于:
JInternalFrame
/ JDesktopPane
通常用于 MDI 。
-
JTabbedPane
组件。 -
JSplitPane
显示两个组件,其中两个组件之间的重要性(大小)根据用户的操作而变化。 -
JLayeredPane
很多良好的分层组件。 -
JToolBar
通常包含一组动作或控件。可以在GUI上拖动,或完全根据用户需要将其关闭。如上所述,将根据父级的操作将其最小化/还原。 - 作为
JList
(以下简单示例)。 - 作为
JTree
。 - 嵌套版式。
但是,如果这些策略不适用于特定用例,请尝试以下方法。建立单个主JFrame
,然后具有 JDialog
或 JOptionPane
实例出现在其余自由浮动元素上,并使用框架作为对话框的父级。
许多图片
在这种情况下,如果多个元素是图像,则最好使用以下两种方法之一:
- 单个
JLabel
(位于滚动窗格的中央),以显示当时用户感兴趣的图像。如 ImageViewer
所示。
- 单行
JList
。如此答案所示。只有它们的尺寸相同时,"单行"部分才有效。或者,如果您准备即时缩放图像,并且它们的长宽比都相同(例如4:3或16:9)。
自从我开始对Swing应用程序进行编程以来,我已经实现了多种JFrame
方法。在大多数情况下,我在一开始就这样做了,因为我没有更好的了解。 但是,随着我作为开发人员的经验和知识日渐成熟,并开始在线阅读和吸收更多经验丰富的Java开发人员的意见,我尝试离开来自多个JFrame
方法(在当前项目和将来的项目中)的" strong>"仅适用于...得到此...来自客户的抵抗力!开始实现模态对话框来控制"子"窗口和单独组件的JInternalFrame
,我的客户开始抱怨!我很惊讶,因为我在做我想做的事情最佳实践!但是,正如他们所说,"幸福的妻子就是幸福的生活"。您的客户也一样。当然,我是承包商,因此最终用户可以直接与我(开发人员)联系,这显然不是常见情况。
因此,我将解释采用多种JFrame
方法的好处,以及神话般地破坏了其他人提出的一些弊端。
JFrame
,您可以使最终用户能够分散并控制其屏幕上的内容。该概念感到"开放"且不受限制。当您走向一个大的JFrame
和一堆JInternalFrame
s时,就会丢失此信息。JFrame
。但是,我希望数据输入屏幕是一个JDialog
,其父级是数据查看器。我进行了更改,然后立即收到来自最终用户的电话,该用户在很大程度上依赖于他可以最小化或关闭查看器并使编辑器打开的事实。他引用了程序的另一部分(或者我不记得一个网站)。他不是在多显示器上,因此他需要输入对话框为第一,而其他为第二,而数据查看器则完全隐藏。对于JDialog
,这是不可能的,对于JInternalFrame
,这当然也是不可能的。由于他的理智,我勉强将其改回为单独的JFrames
,但它教会了我一个重要的教训。JInternalFrame
比创建JFrame
会容易得多。实际上,以我的经验,JInternalFrames
提供的灵活性要差得多。我已经开发出一种系统的方法来处理我的应用程序中JFrame
的打开和关闭,这确实很好。我几乎完全从框架代码本身内控制框架。创建新框架,即SwingWorker
,该框架控制后台线程上的数据检索以及EDT上的GUI代码,如果用户尝试将其打开两次,则将其还原/带到该框架的前面,等等。打开我的JFrame
所需要的就是调用一个公共静态方法open()
和open方法,并结合一个windowClosing()
事件处理其余部分(框架已经打开了吗?它没有打开,但是正在加载吗?等),我将此方法用作模板,因此对于每个框架都很难实现。JFrame
比JInternalFrame
需要更多空间,但是即使您打开100个JFrame
,也有多少资源你真的会消费吗?如果您担心的是由于资源导致的内存泄漏:调用dispose()
会释放该帧用于垃圾回收的所有资源(我再次说,JInternalFrame
应该完全调用同样的关注。)我写了很多书,我觉得我可以写更多。无论如何,我希望我不要因为它是一个不受欢迎的观点而被否决。这个问题显然是一个有价值的问题,我希望我提供了一个有价值的答案,即使这不是普遍的看法。
每帧多个框架/单个文档( SDI )与一个帧/多个文档( MDI )是Microsoft Excel。 MDI的一些优点:
SDI(单文档界面,即每个窗口只能有一个文档):
MDI(多文档界面,即每个窗口可以有多个文档):
我想用我刚才涉及的一个例子来反驳"不友好用户"的说法。
在我们的应用程序中,我们有一个主窗口,用户可以在其中运行各种"程序"作为单独的选项卡。我们已尽可能尝试将应用程序保留在单个窗口中。
它们运行的"程序"之一显示了系统已生成的报告的列表,用户可以单击每行上的图标以弹出打开报告查看器对话框。该查看器正在显示与报告的纵向A4页面相同的图像,因此用户喜欢此窗口很大,几乎充满了他们的屏幕。
几个月前,我们开始收到客户的要求,以使这些报表查看器窗口变为无模式,以便他们可以同时打开多个报表。
一段时间以来,我拒绝了此请求,因为我认为这不是一个好的解决方案。但是,当我发现用户如何解决我们系统的这种"缺陷"时,我的想法改变了。
他们正在打开查看器,使用"另存为"功能将报告另存为PDF到特定目录,使用Acrobat Reader打开PDF文件,然后对下一个报告执行相同的操作。他们将拥有多个Acrobat Reader,并运行它们想要查看的各种报告输出。
因此,我放松了,并使查看器变得无模式。这意味着每个查看器都有一个任务栏图标。
上周向他们发布最新版本时,他们的压倒性反应是他们喜欢它。这是我们最近最流行的系统增强功能之一。
因此,您继续告诉用户他们想要的东西是不好的,但最终并不会给您带来任何好处。
一些注意事项:
ModalityType
而不是布尔型modal
参数的构造函数。这就是为这些对话框提供任务栏图标的原因。使jInternalFrame进入主框架并使其不可见。然后,您可以将其用于其他事件。
jInternalFrame.setSize(300,150);
jInternalFrame.setVisible(true);
自上次我接触秋千以来已经有一段时间了,但总的来说,这样做是一种不好的做法。想到的一些主要缺点:
更昂贵::您将不得不分配更多的资源来绘制JFrame,而不是其他类型的窗口容器,例如Dialog或JInternalFrame。
不友好:导航进入一堆粘在一起的JFrame并不容易,这看起来像您的应用程序是一组不一致且设计不良的应用程序。
易于使用的JInternalFrame 这是一种反驳,现在比通过桌面和JInternalFrame模式我们已经认为的更容易,其他人也更聪明(或有更多的空闲时间) ,所以我建议使用它。
绝对不正确的做法。一个原因是,由于每个JFrame
都显示一个新的任务栏图标,因此它不是非常"用户友好"的。控制多个JFrame
将使您脱颖而出。
我个人会为您的应用程序使用一个JFrame
。显示多种事物的方法取决于您,有很多。 Canvas
es,JInternalFrame
,CardLayout
,甚至是JPanel
。
多个JFrame对象=痛苦,麻烦和问题。
我认为使用多个Jframe
不是一个好主意。
相反,我们可以在同一JFrame
中使用JPanel
的多个或多个JPanel
。
我们也可以在这些JPanel
之间切换。因此,它使我们可以自由显示而不是在JFrame
中的东西上显示。
对于每个JPanel
,我们可以设计不同的东西,所有这些JPanel
可以一次显示在单个JFrame
上。
要在此JPanel
之间切换,请对每个JPanel
或'JButton 使用
JPanel`。JMenuBar
和JMenuItems
每个
一个以上的JFrame
不是一个好习惯,但是如果我们想要多个JFrame
,这没有错。
但最好是根据我们的不同需求更改一个JFrame
,而不要使用多个JFrame
。
如果框架将具有相同的大小,为什么不创建框架并通过该框架,然后将其作为对其的引用。
通过框架后,您可以决定如何填充框架。就像拥有一种用于计算一组图形平均值的方法一样。您会一遍又一遍地创建该方法吗?
这不是一个好习惯,但是即使您希望使用它,也可以使用单例模式。在我的大多数项目中,我都使用了单例模式。