我有一个JPanel
,我想响应鼠标点击,然后打开一个JDialog
.该JDialog
构造函数需要的实例JFrame
,而不是JPanel
-我该如何解决此问题?
您应该尝试将JDialog附加到父对话框或框架,特别是如果您想要它是模态的(通过传递父窗口,对话框将附加到您的窗口并且使父对象也将带来子对话框).否则,用户体验确实会出错:丢失对话框,阻止窗口而不看模态对话框等...
要找到您的JPanel父窗口,您只需要以下代码:
JPanel panel = new JPanel();
Window parentWindow = SwingUtilities.windowForComponent(panel);
// or pass 'this' if you are inside the panel
Frame parentFrame = null;
if (parentWindow instanceof Frame) {
parentFrame = (Frame)parentWindow;
}
JDialog dialog = new JDialog(parentFrame);
...
Run Code Online (Sandbox Code Playgroud)
如果您不知道自己是否在Frame或Dialog中,请对这两个类进行"instanceof"测试.
有一个不需要参数的构造函数:
JDialog dialog = new JDialog();
Run Code Online (Sandbox Code Playgroud)
如果您想要使对话框模式化,也许您可以获得主 JFrame 的静态引用,例如:
JDialog dialog = new JDialog(MyMainJFrame.getInstance());
Run Code Online (Sandbox Code Playgroud)