1

アプレットは次のコードで構成されています。

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 リリース 6.3、Java 1.7.0_07-b10 で実行されている Firefox ESR 10.0.5 で開くと、すぐにブラウザ ウィンドウの背後に移動し、再度見つけるためにブラウザを最小化する必要があります。

モーダル ダイアログが常にアプレットの前面に表示されるようにするにはどうすればよいですか?

アップデート:

JDialog の作成を

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

違いはありません。

4

1 に答える 1

1

最後に、多くのことを試した後、次の回避策を見つけました。

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);

            }
        });
    }
}
于 2012-11-13T12:13:51.507 に答える