Java 如何在整个应用程序中引用顶级容器而不使其成为单个容器?
如何在整个应用程序中引用顶级容器(例如Java 如何在整个应用程序中引用顶级容器而不使其成为单个容器?,java,swing,singleton,containers,Java,Swing,Singleton,Containers,如何在整个应用程序中引用顶级容器(例如JFrame),而不使其成为单例?我问这个问题的原因是我试图避免使用单例反模式 无论如何,我发现当我需要另一个顶级容器(例如JDialog)向用户显示简单消息时,我希望使用setLocationRelativeTo(frame)将此对话框直接放置在前面提到的JFrame上。但是,我唯一能做到的方法(目前),是创建JFrame的单个实例,并使用静态getInstance方法访问它 那么,有没有一种方法可以引用顶级容器而不必求助于单例模式?如果有人需要更多信息,
JFrame
),而不使其成为单例?我问这个问题的原因是我试图避免使用单例反模式
无论如何,我发现当我需要另一个顶级容器(例如JDialog
)向用户显示简单消息时,我希望使用setLocationRelativeTo(frame)
将此对话框直接放置在前面提到的JFrame
上。但是,我唯一能做到的方法(目前),是创建JFrame
的单个实例,并使用静态getInstance
方法访问它
那么,有没有一种方法可以引用顶级容器而不必求助于单例模式?如果有人需要更多信息,请告诉我
谢谢。如果您有对顶层窗口中保存的任何Swing组件的引用,例如可以从事件对象(例如ActionEvent)的
getSource()
方法中获取,则可以使用此方法通过以下方法获取顶层窗口:
此类还有其他有用的类似方法,例如windowForComponent(组件c)
getDeepestComponentAt(…)
和getRoot(组件c)
否则,您可以始终通过构造函数或setter参数传递引用。您可以使用指定的父对象创建对话框(JDialog),这样您可以存储对父对象的引用,查看JDialog构造函数:
public JDialog(Frame owner)
1)当前JVM实例可以返回顶级容器的数组,包括
Window[] allWindows = Window.getWindows();
默认情况下,所有顶级容器都可以访问并准备好重新使用
2) JFrame
可以返回所有child,包括disposed,注意是否有第2个或更多JFrame,然后返回所需用法getWindows()
如果单身汉是你想要的行为,那么单身汉没有任何问题。当您实现一个单例时,只有一个全局变量,并且开始到处使用它们时,问题就出现了。(只是一个合理性检查)如果
JPanel
上有一个JButton
位于JFrame
上,如果我在JButton
上调用此方法,它会返回JFrame
?我想答案应该是肯定的,因为JPanel
不是一个窗口,但我想问问专家也没什么坏处D@mre:是的,它将返回顶层窗口,在您的情况下,该窗口将是JFrame。另请参阅+1用于指向gWA()
-我当天的学习项目的指针。:)@mKorbel:谢谢你的帮助。我刚才已经+1你了。
Window[] allWindows = Window.getWindows();
Window[] allWindows = Window.getOwnedWindows();