Ho convalidato un'applicazione swing che viene eseguita su un'applet per mac osx.Problemi di messa a fuoco con le finestre di dialogo modale java7 su mac osx
Durante questa convalida ho trovato i seguenti problemi con le finestre di dialogo modali:
- Quando una finestra di dialogo è aperta ed è setModal (true) blocca il contenuto della finestra principale, ma se si fa clic da qualche parte sulla finestra di root, la finestra di dialogo va sotto, ma dovrebbe rimanere nella parte superiore della finestra di root.
- Se la finestra di dialogo ha un JTextInputField, non riceve l'attivazione anche quando si fa clic su di esso.
Così ho creato un piccolo programma per mostrare il problema. Potete per favore aiutarmi a capire cosa c'è di sbagliato qui?
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);
}
}
}
Utilizzare quanto sopra per creare un file .jar (test.jar). Una volta fatto ciò, creare un file html con il seguente contenuto:
<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 questo è fatto, eseguire il file html. Vedrai un'applet con uno sfondo grigio e con un pulsante. Quindi provare a:
- fare clic sul pulsante per aprire la finestra di dialogo. Successivamente, fai clic in qualche punto nell'area grigia: la finestra di dialogo va sotto la finestra del browser ma dovrebbe rimanere in alto, giusto?
- fare clic sul pulsante per aprire la finestra di dialogo. Dopo di che fai clic sul campo di testo della finestra di dialogo e prova a scrivere qualcosa: la finestra di testo non riceve il focus.
Quindi, cosa sto facendo di sbagliato qui? Qualcuno con un computer Mac può testare questo per favore?
Grazie
Spec:
java.vendor Oracle Corporation
java.version 1.7.0_07
os.name Mac OS X
os.version 10.7.4
browser firefox 15
NOTA: si prega di notare che questa è solo accadendo quando l'applet viene eseguito sul browser e solo su Mac OSX.
Impossibile riprodurre su 10.5/1.6. – trashgod
Per me, usando 10.7/1.6.0_33 vedo ancora il problema modale (1) ma non il problema di messa a fuoco (2). –
Problema simile ma su ubuntu [stackoverflow] (http://stackoverflow.com/questions/12373140/java-applet-jtextfield-inaccesible-after-jdialog-on-ubuntu). – user1307657