Problemy z fokusami w modalnych oknach java7 na mac osx

Sprawdzałem poprawność aplikacji swingującej działającej na aplecie dla Mac OSX.

Podczas tej weryfikacji znalazłem następujące problemy z dialogami modalnymi:

Gdy okno dialogowe jest otwarte i jest ustawione jako setModal (true), blokuje zawartość okna głównego, ale jeśli klikniesz gdzieś w oknie głównym, okno dialogowe przejdzie pod nim, ale powinno pozostać na górze okna głównego.Jeśli w oknie dialogowym znajduje się pole JTextInputField, nie otrzyma ono fokusa nawet po jego kliknięciu.

Dlatego stworzyłem mały program, aby pokazać problem. Czy możesz mi pomóc zrozumieć, co tu jest nie tak?

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

}

Użyj powyższego, aby utworzyć plik .jar (test.jar). Po zakończeniu utwórz plik html o następującej treści:

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

Po zakończeniu uruchom plik html. Zobaczysz aplet z szarym tłem i przyciskiem. Następnie spróbuj:

kliknij przycisk, aby otworzyć okno dialogowe. Następnie kliknij gdzieś na szarym obszarze: okno dialogowe znajduje się pod oknem przeglądarki, ale powinno pozostać na górze, prawda?kliknij przycisk, aby otworzyć okno dialogowe. Następnie kliknij pole tekstowe okna dialogowego i spróbuj coś napisać: dialog tekstowy nie jest aktywowany.

Więc co tu robię źle? Czy ktoś z komputerem Mac może to przetestować?

Dzięki

Okular:

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

browser        firefox 15

UWAGA: należy pamiętać, że dzieje się to tylko wtedy, gdy aplet działa w przeglądarce i tylko na Mac OSX.

questionAnswers(9)

yourAnswerToTheQuestion