如何在整个应用程序中引用顶级容器(例如 JFrame
)而不使其成为单例?我问的原因是我试图避免单例反模式。
无论如何,我发现当我需要另一个顶级容器(例如 JDialog
)向用户显示一条简单的消息时,我希望使用 JFrame
将此对话框直接放置在上述 setLocationRelativeTo(frame)
上。但我可以这样做的唯一方法(目前)是创建 JFrame
的单个实例并使用静态 getInstance
方法访问它。
那么,有没有一种方法可以引用顶级容器而不必求助于单例模式?如果有人需要更多信息,请告诉我!
谢谢。
最佳答案
如果您有对顶级窗口中保存的任何 Swing 组件的引用,例如可以从 Event 对象(例如 ActionEvent)的 getSource()
方法获取,您可以使用它通过 SwingUtilities 方法获取顶级窗口:
SwingUtilities.getWindowAncestor(anyComponent);
该类还有其他有用的类似方法,例如
windowForComponent(Component c)
getDeepestComponentAt(...)
和 getRoot(Component c)
否则,您始终可以通过构造函数或 setter 参数传递引用。