【发布时间】:2013-03-03 06:39:52
【问题描述】:
我的问题似乎与How to hide JDialog from JApplet when user switch browser tab? 非常相关,但它没有提供有效的解决方案。
我开发了一个使用 JWS/JNLP 部署的小程序。它首先显示“新游戏”对话框。
private class NewGameDialog extends CustomDialog implements ActionListener {
...
public NewGameDialog () {
super(topContainer, "NEW GAME", modalityType);
System.out.println(topContainer + " " + modalityType);
//prints JApplet and DOCUMENT_MODAL
...
CustomDialog 只是扩展了JDialog:
public class CustomDialog extends JDialog implements WindowListener {
public CustomDialog(Container cont, String title, ModalityType modalityType) {
super(windowForComponent(cont), title, modalityType);
}
public static Window windowForComponent(Component c) {
if (c instanceof Window) return (Window) c;
return SwingUtilities.windowForComponent(c);
}
...
这是从 GUI 类调用 JDialog 的方式:
public void requestNewGame () {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
NewGameDialog dialog = new NewGameDialog();
dialog.setVisible(true);
}
});
}
我使用了How to Use Modality in Dialogs 中描述的不同类型的模态。目标是在用户切换到浏览器中的另一个选项卡时隐藏JDialog。但似乎没有一个选项不起作用。该对话框一直浮动在所有选项卡上方。
请告诉我如何在用户移动到另一个选项卡时隐藏对话框并在用户返回我的小程序选项卡后再次显示?
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖SSCCE。
-
注意:添加 JavaScript 标记是因为我认为无法使用纯 Java 提供功能,而现有的解决方案是通过 JS。
标签: java javascript swing jdialog japplet