gpt4 book ai didi

java - 如何获取默认的Frame作为父组件?

转载 作者:行者123 更新时间:2023-12-01 12:37:40 25 4
gpt4 key购买 nike

就像在 JOptionPane 中一样,我想在发送 null 值作为组件父级时设置父级 Component

parentComponent: Defines the Component that is to be the parent of this dialog box. It is used in two ways: the Frame that contains it is used as the Frame parent for the dialog box, and its screen coordinates are used in the placement of the dialog box. In general, the dialog box is placed just below the component. This parameter may be null, in which case a default Frame is used as the parent, and the dialog will be centered on the screen (depending on the L&F).

这就是JOptionPane的工作原理,现在我想做同样的事情,但不知道如何获取默认框架并将其设置为父框架以显示通知。我正在使用 NotificationManager 来显示 WebLaF 中包含的通知L&F,但是当我尝试在 setVisible Frame 之前显示通知时,它会抛出此错误

“没有可见的窗口来显示通知”

它来自这里:NotificationManager 类:发送空组件作为父组件时获取窗口的方法

private static Window getDefaulShowForWindow ()
{
final Window activeWindow = SwingUtils.getActiveWindow ();
if ( activeWindow != null )
{
return activeWindow;
}
final Window[] allWindows = Window.getWindows ();
if ( allWindows != null && allWindows.length > 0 )
{
return allWindows[ 0 ];
}
throw new RuntimeException ( "There is no visible windows to display notification" );
}

SwingUtils 类:方法 getActiveWindow()

public static Window getActiveWindow ()
{
final Window[] windows = Window.getWindows ();
Window window = null;
for ( final Window w : windows )
{
if ( w.isVisible () && w.isActive () && w.isFocused () )
{
window = w;
break;
}
}
return window;
}

所以我想知道的是,当发送一个 null Component 作为父级时,JOptionPane 会做什么(在代码中)。

最佳答案

如果你看一下JOptionPane,它最终会出现在showOptionDialog(Component, Object, String, int, int, Icon, Object[], Object)

在此方法中,当 parentComponentnull 时,它会调用 getRootFrame。这做了一些有趣的工作。基本上,它与 SwingUtilities 一起“找到”合适的 Frame 来使用。如果不存在,它将构建一个“共享”引用...

这是通过 SwingUtilities.getSharedOwnerFrame 生成的,它将(最终)创建一个名为 SharedOwnerFrameFrame,它覆盖了 show 方法,使其永远无法显示...

这一切都是在包私有(private)级别内完成的,因此您无法自己调用任何此功能...

已更新

我应该指出,所有JOptionPane都使用同一个SharedOwnerFrame实例

关于java - 如何获取默认的Frame作为父组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25438732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com