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

标签 java linux firefox applet modal-dialog

小程序由以下代码组成:

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/

相关文章:

java - 为什么按位与给出不同的字节?

java - 如何查找一条线是否在 JTS 中与自身相交?

python - 在 Python 中设置硬件时钟?

linux - 针对 lex 和 yacc 中的小错误的建议

javascript - OnFocus 和 OnBlur 样式更改在 Firefox 中有效,但在 IE 中无效

JavaFX - 无法加载外部 CSS 主题

java - 增加分配给jdk的内存

c - 如何处理来自 Linux 内核模块中已经具有不可共享处理程序的 PCI 设备的中断?

html - 网站在 Chrome/Firefox 中工作但在 Internet Explorer 中不工作

html - 为什么 Firefox 和 Chrome 中的行高不同?