Enfoque os problemas com os diálogos modais java7 no mac osx
Eu tenho validado um aplicativo swing que é executado em um applet para mac osx.
Durante esta validação, encontrei os seguintes problemas com os diálogos modais:
Quando uma caixa de diálogo é aberta e é setModal (true), ela bloqueia o conteúdo da janela raiz, mas se você clicar em algum lugar na janela raiz, a caixa de diálogo ficará abaixo dela, mas deverá permanecer na parte superior da janela raiz.Se o diálogo tiver um JTextInputField, ele não receberá o foco mesmo quando você clicar nele.Então eu criei um pequeno programa para mostrar o problema. Você pode por favor me ajudar a entender o que está errado aqui?
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);
}
}
}
Use o acima para criar um arquivo .jar (test.jar). Feito isso, crie um arquivo html com o seguinte conteúdo:
<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>
Quando isso for feito, execute o arquivo html. Você verá um applet com um fundo cinza e com um botão. Então tente:
clique no botão para abrir a caixa de diálogo. Depois disso, clique em algum lugar na área cinza: a caixa de diálogo fica sob a janela do navegador, mas deve permanecer na parte superior, certo?clique no botão para abrir a caixa de diálogo. Depois disso, clique no campo de texto da caixa de diálogo e tente escrever algo: o diálogo de texto não recebe foco.Então, o que estou fazendo errado aqui? Alguém com um computador mac pode testar isso, por favor?
obrigado
Especificações:
java.vendor Oracle Corporation
java.version 1.7.0_07
os.name Mac OS X
os.version 10.7.4
browser firefox 15
OBSERVAÇÃO: observe que isso ocorre apenas quando o applet é executado no navegador e apenas no mac osx.