Java Swing应用程序中的窗口管理设计模式


9

我刚刚开始创建我的第一个小型Java Swing应用程序。程序打开时,将弹出一个简单的窗口,其中包含标签和几个按钮。单击这些按钮之一应该可以擦除欢迎屏幕,并用完全不同的面板替换它。

我不确定创建该功能的最佳方法是什么。一种方法是将我JFrame作为参数传递给...几乎所有其他组件,但这对我来说很棘手。或者,使每个面板都兼作动作侦听器,但这似乎也不对。

我应该在这里应用一种设计模式吗?“替换主窗口(仅主窗口)的内容”必须是一个合理的常见操作。为模式命名就足够了;我可以从那里独自使用Google。(不过,我不会拒绝更长的解释。)


这是有关实际编程技术的问题,您可能会在Stack Overflow上获得更多答案。
Alex Feinman

Answers:


6

在构建Swing应用程序时,我通常基于Mediator模式。在这种模式下,Mediator类(通常是主JFrame)处理不同的GUI部分(通常是JPanels,JMenus ...),并负责它们之间的通信。

例如,如果JPanel1中发生了事件,则JPanel1会通知中介器(JFrame)。然后,JFrame通过修改JPanel2采取措施。

仅供参考:我的所有项目都是中小型GUI应用程序,因此我不确定这种模式能否很好地扩展。但是,如果您可以设计适当的体系结构,那么介体模式可以成为坚实的基础。


4

您可以让main方法显示一个JDialog。关闭对话框后,将创建并显示主JFrame。

JDialog为您提供了易于使用的静态方法,该方法显示带有自定义内容和按钮的对话框,并返回被单击的按钮的代码。通过测试该值,您的main方法可以决定显示主要框架还是退出(或其他任何东西)。请阅读Javadoc。

与某些较旧的UI框架不同,Swing应用程序未绑定到特定的框架或窗口。您可以根据需要创建任意多个窗口。该应用程序在所有线程结束时结束,而不是在所有窗口都结束后结束。这通常是通过System.exit(0)实现的。

我不知道这种情况下是否有特定的设计模式。我推荐Java Swing教程。


1
-1。这是一个设计模式问题。建议更改我给的规格并以“我不知道是否存在特定的设计模式”结尾不能解决问题。
流行

2
他的回答很准确。您没有设计模式的问题,您需要先学习表单和对话框的工作方式。
Alex

2

许多UI框架对于“主”或“活动”窗口都有不同的规则。一种管理这种复杂性的方法是,将控制主消息循环的主窗口设置为不可见的窗口(或小而无铬的1像素小窗口,对于烦人的框架不在屏幕上)。然后让所有其他窗口和对话框成为该窗口的子级。

此方法具有许多优点,尤其是在处理全局按键单击和鼠标事件以及顶级日志记录和异常处理时。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.