如何在整个应用程序中引用顶级容器(例如 JFrame )而不使其成为单例?我问的原因是我试图避免单例反模式。

无论如何,我发现当我需要另一个顶级容器(例如 JDialog )向用户显示一条简单的消息时,我希望使用 JFrame 将此对话框直接放置在上述 setLocationRelativeTo(frame) 上。但我可以这样做的唯一方法(目前)是创建 JFrame 的单个实例并使用静态 getInstance 方法访问它。

那么,有没有一种方法可以引用顶级容器而不必求助于单例模式?如果有人需要更多信息,请告诉我!

谢谢。

最佳答案

如果您有对顶级窗口中保存的任何 Swing 组件的引用,例如可以从 Event 对象(例如 ActionEvent)的 getSource() 方法获取,您可以使用它通过 SwingUtilities 方法获取顶级窗口:

SwingUtilities.getWindowAncestor(anyComponent);

该类还有其他有用的类似方法,例如 windowForComponent(Component c) getDeepestComponentAt(...)getRoot(Component c)
否则,您始终可以通过构造函数或 setter 参数传递引用。

10-07 12:01