我正在开发一个显示图像的应用程序,并从数据库中播放声音。我正在尝试决定是否使用单独的JFrame从GUI向数据库添加图像。
我只是想知道使用多个JFrame窗口是否是好的实践?
我只是想知道使用多个jframe是否是好的实践?
糟糕的做法。
在一个GUI中显示多个元素的方法有很多,例如:
CardLayout
JTabbedPane
JLayeredPane
JToolBar
JList
JTree
但是如果这些策略不适用于特定的用例,请尝试以下方法。建立一个单独的主JFrame,然后让JDialog或JOptionPane实例出现在其余的自由浮动元素中,使用框架作为对话框的父元素。
JFrame
JDialog
JOptionPane
在这种情况下,多个元素都是图像,最好使用以下任何一种:
JLabel
ImageViewer
< img src = " https://i.stack.imgur.com/q8hEl.jpg " >
将jInternalFrame放入主框架中,并使其不可见。然后您可以将它用于进一步的事件。
jInternalFrame.setSize(300,150); jInternalFrame.setVisible(true);
绝对是坏习惯。一个原因是它不是很“用户友好”的事实,每个JFrame显示一个新的任务栏图标。控制多个# eyz0会让你抓狂。
就我个人而言,对于您这种类型的应用程序,我会使用one# EYZ0。显示多个东西的方法取决于你,有很多。Canvases, JInternalFrame, CardLayout,甚至JPanels也有可能。
Canvas
JInternalFrame
JPanel
多个JFrame对象=痛苦、麻烦和问题。
这是一段时间以来,我最后一次接触摇摆,但一般是一个坏的做法,这样做。我想到的一些主要缺点是:
这是更昂贵的:你将不得不分配更多的资源来绘制JFrame,其他类型的窗口容器,如Dialog或JInternalFrame。
导航到一堆粘在一起的JFrame是不容易的,它看起来就像你的应用程序是一组不一致的应用程序和糟糕的设计。
这是一种反驳,现在它更容易,其他人更聪明(或有更多的空闲时间)比我们已经通过桌面和JInternalFrame模式思考,所以我建议使用它。
自从我开始编写Swing应用程序以来,我就一直在实现多个JFrame方法。在大多数情况下,我一开始就这么做了,因为我不知道有什么更好的办法。然而,随着我作为一名开发人员的经验和知识的成熟,以及开始阅读和吸收网上许多更有经验的Java开发人员的意见,我试图从多个JFrame方法中转变(无论是在当前的项目中还是在未来的项目中),只遇到了……得到这个……当我开始实现模态对话框来控制“子”窗口和单独的组件时,我非常惊讶,因为我正在做我认为最好的实践!但是,正如他们所说,“一个幸福的妻子就是幸福的生活。”你的客户也一样。当然,我是一个承包商,所以我的终端用户可以直接访问我这个开发人员,这显然不是一个常见的场景。
因此,我将解释多种JFrame方法的好处,以及打破其他人提出的一些缺点。
JFrames
JInternalFrames
SwingWorker
open()
windowClosing()
dispose()
我写了很多,我觉得我还能写更多。不管怎样,我希望我不会因为这是一个不受欢迎的观点而被否决。这个问题显然很有价值,我希望我提供了一个有价值的答案,即使它不是普遍的观点。
多帧/每帧一个文档(SDI) vs单帧/每帧多个文档(MDI)的一个很好的例子是Microsoft Excel。MDI的一些好处:
SDI (single - document Interface,即每个窗口只能有一个文档):
MDI(多文档接口,即每个窗口可以有多个文档):
我想用一个我刚刚涉及到的例子来反驳“不友好”的论点。
在我们的应用程序中,我们有一个主窗口,用户在其中运行不同的“程序”作为单独的选项卡。我们已经尽可能地将应用程序保持在这个单一窗口中。
他们运行的一个“程序”显示了系统生成的报告列表,用户可以单击每行上的图标弹出一个报告查看器对话框。这个查看器显示的内容相当于报告的A4页,所以用户喜欢这个窗口非常大,几乎填满了他们的屏幕。
几个月前,我们开始收到客户的请求,要求将这些报表查看器窗口变成非模态的,这样他们就可以同时打开多个报表。
有一段时间,我拒绝了这个要求,因为我认为这不是一个好的解决方案。然而,当我发现用户如何绕过我们系统的“缺陷”时,我的想法改变了。
他们打开一个查看器,使用“另存为”功能将报告保存为PDF文件到特定目录,使用Acrobat Reader打开PDF文件,然后他们会对下一个报告做同样的操作。他们将使用多个Acrobat reader运行他们想要查看的各种报告输出。
所以我妥协了,让观众变得无模态。这意味着每个查看器都有一个任务栏图标。
上周,当最新版本发布给他们时,他们压倒性的反应是他们喜欢它。这是我们最近对系统最受欢迎的改进之一。
所以你继续告诉你的用户,他们想要的东西是不好的,但最终它不会给你任何好处。
一些注意事项:
ModalityType
modal
如果这两个帧的大小是相同的,为什么不创建一个帧,然后把它作为引用传递给它呢?
当你通过这个框架时,你可以决定如何填充它。这就像有了一种计算一组数字平均值的方法。你会一遍又一遍地创建这个方法吗?
这不是一个好的实践,但即使你希望使用它,你也可以使用单例模式。我在我的大部分项目中都使用了单例模式,这很好。
我认为使用多个# eyz0不是一个好主意。
相反,我们可以在同一个JFrame中使用JPanels而不是一个或多个JPanel。
我们也可以在JPanels之间切换。所以它给了我们在JFrame中显示更多东西的自由。
对于每个JPanel,我们可以设计不同的东西,所有这些JPanel可以显示在单个JFrameone一次。
要在# eyz0之间切换,请使用JMenuBar和JMenuItems为每个# eyz0或'JButtonfor eachJPanel '。
JMenuBar
JMenuItems
for each
多于一个JFrame并不是一个好的实践,但是如果我们想要多于一个JFrame也没有错。
但是根据我们不同的需求改变一个JFrame比有多个JFrame更好。