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