He estado validando una aplicación swing que se ejecuta en un applet para mac osx.Problemas de foco con los diálogos modales java7 en mac osx
Durante esta validación He encontrado los siguientes problemas con los cuadros de diálogo modales:
- Cuando un cuadro de diálogo está abierto y es setModal (verdadero) que bloquea el contenido de la ventana raíz, pero si hace clic en algún lugar de la ventana raíz, el cuadro de diálogo va debajo de ella, pero debe permanecer en la parte superior de la ventana raíz.
- Si el cuadro de diálogo tiene un JTextInputField, no recibe el foco incluso cuando hace clic en él.
Así que creé un pequeño programa para mostrar el problema. ¿Puedes ayudarme a entender qué está mal aquí?
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);
}
}
}
Utilice lo anterior para crear un archivo .jar (test.jar). Una vez hecho esto, crear un archivo HTML con el siguiente contenido:
<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>
Cuando se hace esto, ejecute el archivo html. Verá un applet con un fondo gris y con un botón. Luego intente:
- haga clic en el botón para abrir el cuadro de diálogo. Después de eso, haga clic en algún lugar del área gris: el cuadro de diálogo se encuentra debajo de la ventana del navegador, pero debe permanecer en la parte superior, ¿no?
- haga clic en el botón para abrir el cuadro de diálogo. Después de eso, haga clic en el campo de texto del cuadro de diálogo e intente escribir algo: el texto del diálogo no recibe el foco.
Entonces, ¿qué estoy haciendo mal aquí? ¿Alguien con una computadora Mac puede probar esto por favor?
Gracias
Especificaciones:
java.vendor Oracle Corporation
java.version 1.7.0_07
os.name Mac OS X
os.version 10.7.4
browser firefox 15
NOTA: tenga en cuenta que esto sólo ocurre cuando el applet se ejecuta en el navegador y sólo en Mac OSX.
No se pudo reproducir en 10.5/1.6. – trashgod
Para mí, usando 10.7/1.6.0_33 Todavía veo el problema modal (1) pero no el problema de enfoque (2). –
Problema similar pero en ubuntu [stackoverflow] (http://stackoverflow.com/questions/12373140/java-applet-jtextfield-inaccesible-after-jdialog-on-ubuntu). – user1307657