Moi j'ai un autre problème de focus avec les boites de dialogues modale que je ne comprends pas.
Voici le code de Test que j'ai :
Code :
- import javax.swing.JFrame;
- import javax.swing.JDialog;
- import javax.swing.JButton;
- import java.awt.event.ActionListener;
- import java.awt.event.ActionEvent;
- import java.awt.FlowLayout;
- public class Test extends JFrame implements ActionListener
- {
- private JDialog jd;
- public Test()
- {
- super ("test" );
- setBounds(200, 100, 500, 500);
- setVisible(true);
- jd = new JDialog (this, true);
- jd.getContentPane ().setLayout(new FlowLayout ());
- JButton but = new JButton ("OK" );
- but.addActionListener(this);
- jd.getContentPane().add(but);
- JButton but2 = new JButton ("Annuler" );
- but2.addActionListener(this);
- jd.getContentPane().add(but2);
- jd.setBounds(200, 100, 400, 400);
- but2.setFocusable(true);
- jd.setVisible(true);
- //jd.show ();
- if (but2.requestFocusInWindow())
- System.out.println("Request possible" );
- else
- System.out.println("Request impossible" );
- //jd.setModal(true);
- }
-
- public void actionPerformed(ActionEvent e)
- {
- System.out.println("action performed" );
- jd.dispose();
- }
- public static void main(String[] args)
- {
- Test test1 = new Test();
- }
- }
|
Le but de cette classe et de mettre le focus sur le bouton Annuler.
Pour pouvoir mettre le focus sur un composant il faut que celui si soit visible, c'est pourquoi le code pour mettre le bouton Annuler est après la ligne jd.setVisible (true). Le problème c'est que si on fait ca sur une boite de dialogue modale, tout ce qui suit est bloqué tant qu'on a pas fait appel à dispose () ou hide ()... La ligne qui affiche soit request possible ou request impossible s'affiche qu'apres l'appel à action perfermed...
Donc comment faire pour afficher la boite de dialogue modale pour mettre le focus sur le bouton Annuler ??????
J'ai essayé de créer une boite non modale, de la mettre visible, de mettre le focus sur le bon bouton et apres faire appel à setModal (), mais la boite de dialogue reste non modale...
J'ai essayé plusieurs choses, je n'ai pas trouvé de solution, quelqu'un peut m'aider ???
Merci