Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当setAlwaysOnTop不运行时';t工作,如何跟踪和切换到子窗口?_Java_Swing_Window_Awt - Fatal编程技术网

Java 当setAlwaysOnTop不运行时';t工作,如何跟踪和切换到子窗口?

Java 当setAlwaysOnTop不运行时';t工作,如何跟踪和切换到子窗口?,java,swing,window,awt,Java,Swing,Window,Awt,我有一个Java应用程序,它导入了AWT和Swing,它填充了整个屏幕,没有“装饰”,因此无法最小化它。在某些时候,它需要向用户显示一个帮助文件。它应该一直阻止,直到用户关闭窗口。下面是代码: fileview dlg = new fileview(this, title, filename, ""); dlg.setModal(true); //Makes it UI blocking! dlg.setResizable(false); dlg.setAlwaysOnTop(true); dl

我有一个Java应用程序,它导入了
AWT
Swing
,它填充了整个屏幕,没有“装饰”,因此无法最小化它。在某些时候,它需要向用户显示一个帮助文件。它应该一直阻止,直到用户关闭窗口。下面是代码:

fileview dlg = new fileview(this, title, filename, "");
dlg.setModal(true); //Makes it UI blocking!
dlg.setResizable(false);
dlg.setAlwaysOnTop(true);
dlg.setVisible(true);
fileview
扩展了
JDialog
,因此它成为了一个独立的窗口,只是当父窗口关闭时它会关闭

不幸的是,我发现在某些平台上,它尊重
setAlwaysOnTop(true)
,有时则不然。当不工作时,如果用户“单击离开”,输入焦点将移回父对象,但由于
setModal(true)
,它将挂起

同样不幸的是,我已经在这上面浪费了一周的时间,而我正处于一个巨大的时间紧迫期来完成这项工作,还有很多工作要做,所以我已经放弃了浪费时间来试图找出
setAlwaysOnTop
不起作用的原因。
(就在我要放弃的时候,我读到混合
AWT
Swing
可能与此有关,但既然
Swing
是建立在
AWT
之上的,我想知道该怎么想。)

相反,我不想
setModal
只跟踪创建的子项,然后在适当的时候将输入焦点切换回它,而不是创建大量丢失的子项。


因此,我尝试保存
文件视图
,我可以对其应用方法,但我不知道调用哪个方法使其显示在当前窗口的顶部并接受输入焦点。我尝试了
.setVisible(true)
.setAlwaysOnTop(true)
(希望哪怕是暂时都能实现!)没用……我查看了所有我认为可能有正确方法的继承类,但没有看到;什么方法我要应用吗?

在某个时候,它需要向用户显示一个帮助文件。它应该阻止,直到用户关闭窗口。
-使用模态JDialog并指定框架为父级。故事结束。不必担心总是在顶部。类名应该以大写字符开头。@camickr除非不是这样现在怎么办?你到底在说什么“类名应该”?你可以自由设置自己的命名标准。你是否尝试过使用JWindow而不是JDialog?(只是提出一个想法。JWindow的行为可能会有所不同)
但这不起作用。
-张贴您的演示问题。
您可以自由设置自己的命名标准。
-当您在论坛上寻求帮助时,您遵循社区的标准。论坛突出显示基于Java命名标准的张贴代码,以使代码更容易为每个人阅读。@GeorgeZougianos No、 George,我还没有,虽然我真的很想回答上面的问题,但camickr的评论让我思考,我找到了JDialog模式不起作用的原因:超级(父框架)被无意中删除,在某些平台上,它假定父对象正确,而在其他平台上则不正确!因此,在某些情况下,它需要向用户显示一个帮助文件。它应该阻止,直到用户关闭窗口。-使用模态JDialog并将框架指定为父对象。故事结束。无需担心关于始终在最上面。类名应该以大写字符开头。@camickr但这不起作用。现在怎么办?你到底在说什么“类名应该”?你可以自由设置自己的命名标准。你是否尝试过使用JWindow而不是JDialog?(只是提出一个想法。JWindow可能会有不同的行为)
但这不起作用。
-张贴您的演示问题。
您可以自由设置自己的命名标准。
-当您在论坛上寻求帮助时,您遵循社区的标准。论坛突出显示基于Java命名标准的张贴代码,以使代码更容易为每个人阅读。@GeorgeZougianos No、 George,我还没有,虽然我真的很想回答上面的问题,但camickr的评论让我思考,我发现了JDialog模式不起作用的原因:不知何故,super(parent_frame)被无意中删除了,在某些平台上它正确地假设了父对象,而在其他平台上则没有!所以,这就是。。。