gpt4 book ai didi

java - 更改浏览器选项卡时,从 Applet 打开的模型对话框位于 Applet 后面

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:30 26 4
gpt4 key购买 nike

小程序由以下代码组成:

public class TestApplet extends Applet {
public TestApplet() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JDialog dialog = new JDialog();
dialog.setContentPane(new JLabel("Hello"));
dialog.setSize(new Dimension(300, 200));
dialog.setModal(true);
dialog.setVisible(true);
}
});
}}

当我在 Windows 7 上运行的 InternetExplorer 上打开它时,它工作正常:我更改浏览器选项卡,对话框始终保持在前面。

当我在运行 Red Hat Enterprise Linux Server Release 6.3、Java 1.7.0_07-b10 的 Firefox ESR 10.0.5 上打开它时,它会立即进入浏览器窗口,我必须最小化浏览器才能再次找到它。

我必须做什么才能使模态对话框始终位于 Applet 的前面?

更新:

将 JDialog 的创建更改为

JDialog dialog = new JDialog(javax.swing.SwingUtilities.getWindowAncestor(TestApplet.this));

没有区别。

最佳答案

最后,在尝试了很多事情之后,我找到了以下解决方法:

public class ModalDialog extends JDialog {

private boolean isClosing = false;

protected synchronized boolean isClosing() {
return isClosing;
}


protected synchronized void setClosing(boolean isClosing) {
this.isClosing = isClosing;
}

public ModalDialog() {
setSize(200, 300);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

addFocusListener(new FocusAdapter() {
public void focusLost(FocusEvent arg0) {
if (isClosing()) {
System.out.println("Returned because dialog is already closing");
return;
}
EventQueue.invokeLater(new Runnable() {
public void run() {
ModalDialog.this.setVisible(false);
ModalDialog.this.setVisible(true);
}
});
}
});
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("Dialog is closing");
setClosing(true);

}
});
}
}

关于java - 更改浏览器选项卡时,从 Applet 打开的模型对话框位于 Applet 后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12635531/

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