Bonjour à tous !
Je développe une SingleFrameApplication avec Netbeans.
A tout moment l'utilisateur peut faire apparaitre une boîte de dialogue dans laquelle il entre un chaîne de caractères. Il valide ensuite son entrée ce qui a pour effet de masquer la boîte de dialogue.
Une méthode appelée getChaine() est présente dans la classe Box (représentant la boîte de dialogue) afin de récupérer la chaîne entrée par l'utilisateur depuis la méthode de la classe principale qui affiche la boîte de dialogue.
Voici la méthode appelée pour afficher le JDialog :
Et voici un résumé de la classe Box :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Action public void showBox() { if (box == null) { JFrame mainFrame = App.getApplication().getMainFrame(); boite = new Box(mainFrame); boite.setLocationRelativeTo(mainFrame); } App.getApplication().show(boite); boite.getChaine(); }
La méthode valider de la classe Box permet de masquer la boîte de dialogue (modale) ce qui a pour effet la poursuite de l'exécution du programme au sein de la méthode appelante (showBox()) et donc de l'exécution de la ligne boite.getChaine();.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class Box extends JDialog { public Box(Frame parent) { super(parent); initComponents(); } public String getChaine() { return chaine; } @Action public void valider() { setVisible(false); } }
Malheureusement, le code ainsi écrit n'est pas compilable, car la ligne boite.getChaine(); renvoit une erreur :
cannot find symbol
symbol: method getChaine()
location: class javax.swing.JDialog
Si j'interprète bien cette erreur, boite est considéré comme une instance de la classe JDialog mais pas de la classe Box, alors que j'ai pourtant bien écrit public Box extends JDialog...
Je ne vois vraiment pas d'où vient le problème ! Le seul moyen que j'ai trouvé pour le contourner est de rendre public et static la variable chaine, mais je doute que ce soit une bonne solution dans mon cas...
A l'aide !
Merci d'avance !
Axel
Partager