Konzentrieren Sie sich auf Probleme mit modalen Java7-Dialogen unter Mac OSX

Ich habe eine Swing-Anwendung validiert, die auf einem Applet für Mac OSX ausgeführt wird.

Während dieser Validierung habe ich die folgenden Probleme mit den Modaldialogen festgestellt:

Wenn ein Dialogfeld geöffnet und setModal (true) ist, wird der Inhalt des Stammfensters blockiert. Wenn Sie jedoch auf das Stammfenster klicken, wird das Dialogfeld darunter angezeigt, es sollte jedoch oben im Stammfenster bleiben.Wenn der Dialog ein JTextInputField hat, erhält er keinen Fokus, selbst wenn Sie darauf klicken.

Also habe ich ein kleines Programm erstellt, um das Problem zu zeigen. Können Sie mir bitte helfen, zu verstehen, was hier falsch ist?

package com.macosx.tests;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class DialogExample extends JApplet{

    private static final long serialVersionUID = 1L;
    private JPanel panel;
    private JButton openDialogBtn;

    private void doStart() {
        panel = new JPanel();
        panel.setPreferredSize(new Dimension(500,500));

        openDialogBtn = new JButton("open dialog");
        openDialogBtn.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                ModalDialog dialog = new ModalDialog(panel, true);
                dialog.setVisible(true);
            }

        });
        panel.add(openDialogBtn);
        setContentPane(panel);
    }


    class ModalDialog extends JDialog {
        private static final long serialVersionUID = 1L;

        public ModalDialog(Component parent, boolean modal) {
            Dimension dimensionParentFrame = parent.getSize();
            setSize(new Dimension((parent == null) ? 300 : dimensionParentFrame.width / 2, 75));

            setModal(modal);
            setModalityType(ModalityType.APPLICATION_MODAL);

            JTextField txtField = new JTextField();
            add(txtField, BorderLayout.CENTER);
        }
    }


    @Override
    public void start() {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    doStart();
                }
            });
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

Verwenden Sie die obigen Anweisungen, um eine JAR-Datei (test.jar) zu erstellen. Erstellen Sie anschließend eine HTML-Datei mit dem folgenden Inhalt:

<html>
<head>
<title>Dialog test Applet</title>
</head>
<body>
<applet id="DialogTestApplet" height="800" width="600"
  code="com.macosx.tests.DialogExample"
  archive="test.jar">
</applet>
</div>
</body>
</html>

Wenn dies erledigt ist, führen Sie die HTML-Datei aus. Sie sehen ein Applet mit grauem Hintergrund und einer Schaltfläche. Dann versuchen Sie:

Klicken Sie auf die Schaltfläche, um den Dialog zu öffnen. Klicken Sie anschließend irgendwo auf den grauen Bereich: Der Dialog wird unter dem Browserfenster angezeigt, sollte aber oben bleiben, oder?Klicken Sie auf die Schaltfläche, um den Dialog zu öffnen. Klicken Sie danach auf das Textfeld des Dialogs und versuchen Sie, etwas zu schreiben: Der Textdialog erhält keinen Fokus.

Also, was mache ich hier falsch? Kann jemand mit einem Mac dies bitte testen?

Vielen Dank

Technische Daten:

java.vendor    Oracle Corporation
java.version   1.7.0_07
os.name        Mac OS X
os.version     10.7.4

browser        firefox 15

HINWEIS: Bitte beachten Sie, dass dies nur geschieht, wenn das Applet im Browser und nur unter Mac OSX ausgeführt wird.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage