Problème : éviter l'exécution prématurée de certaines l

Miklp Messages postés 3 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 14 avril 2003 - 13 avril 2003 à 22:39
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 - 14 avril 2003 à 15:27
Bonjour,

Je veux programmer un puissance 4 en Java (nom de la class : Jeu), où l'on peut choisir le nombre de lignes et le nombre de colonnes pour le tableau, mais mon problème s'étend à d'autres types de programmes, pas seulement à un puissance 4.
Pour que l'utilisateur choisisse ces 2 paramètres je crée une classe Options qui contient en attributs nbRow et nbCol (des entiers), des cases de texte, un bouton Ok et dont le constructeur crée une fenêtre d'options (on a donc class Options extends JFrame implements ActionListener).
La class Jeu a pour attribut (entre autres) Options opts;

Voici ce qui se passe quand on clique sur le bouton Ok d'une fenêtre Options :

public void actionPerformed(ActionEvent evt) {
nbRow = Integer.parseInt(text1.getText());
nbCol = Integer.parseInt(text2.getText());
}

Voici maintenant le constructeur de Jeu :

public Jeu() {
opts = new Options();
matJeu = new byte[options.nbRow][options.nbCol]; // MatJeu est un attribut de Jeu contenant la matrice de la partie en cours
nbCoups = 0;
}

Ce qui veut dire que une fois que la personne a cliqué sur Ok, il faudrait créer la matrice matJeu avec les paramètres de la classe Options.
Mais le problème est que les lignes d'après (matJeu = new byte[options.nbRow][ ......) s'exécutent tout de suite, sans que l'utilisateur n'ait encore cliqué sur Ok. D'où des erreurs dues au fait que opts.nbRow et opts.nbCol n'existent pas encore (ne sont pas initialisées).

Comment remédier à ce problème ? Comment attendre que la personne ait cliqué sur le bouton Ok pour exécuter la suite du constructeur de Jeu ?

Miklp
pubmikl@free.fr

4 réponses

cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
13 avril 2003 à 23:31
bonjour !

c'est simple:

Solution 1
Dans le constructeur Jeu() ne fais pas la construction du tableau, diffère cela dans ton gestionnaire du bounton OK

Solution2 :
Utilise une Collection à la place de ton tableau
Les collections sont redimensionnables
exemple, une ArrayList();
0
Miklp Messages postés 3 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 14 avril 2003
14 avril 2003 à 10:48
Merci de cette réponse. Je préfererais opter pour la solution 1, mais le problème à cette solution (qui serait donc de mettre matJeu = new byte[options.nbRow][options.nbCol]; dans la classe Options, dans le ActionPerformed) est que matJeu est un attribut de la classe Jeu, et non de la classe Options...
Mais je vais essayer de m'en sortir de cette manière, quite à changer les attributs de classe.
Merci encore,

Miklp
pubmikl@free.fr
0
Miklp Messages postés 3 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 14 avril 2003
14 avril 2003 à 10:56
Pour être plus clair dans l'explication de mon problème, je voudrais en quelque sorte reprogrammer une sorte d'InputDialog améliorée. En effet les InputDialog arrêtent le programme (les lignes d'après ne s'exécutent pas) tant que l'utilisateur n'a pas cliqué sur Ok.

Miklp
pubmikl@free.fr
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
14 avril 2003 à 15:27
bonjour,

OK, tu peux par exemple avoir une méthode publique
init(int x, int y)
ou bien createTableau(int x, int y)
pour faire le boulot
0
Rejoignez-nous