Graphique à partir d'un projet existant
Alex44c
Messages postés
33
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour à tous,
Ce que j'ai écrit est long, mais ma question finale est simple.
Je suis débutant en java, mais j'ai déjà coder en C, donc éviter, s'il vous plaît, les termes trop techniques.
J'ai récemment créé un jeu de cartes qui est composé :
_ d'un tapis de 5 cartes
_ de 2 joueurs qui ont chacun :
-un nom(String)
-une main de 5 cartes (pile de carte)
-un score(int)
Mon programme marche très bien.
Seulement, maintenant j'aimerais le passer en graphique, donc en utilisant ce que j'ai codé.
J'ai donc créé un nouveau package (que j'ai appeler graphique), dans lequel j'ai créé une classe Accueil (JFrameForm) et une classe FCartes (JDialogForm).
J'ai importé le package du programme déjà codé dans les 2 classes et j'ai créé tous les boutons et autres éléments dans leur "design".
DANS Accueil, j'ai créé un bouton "jouer" qui permet de créer 2 joueurs et le "jeu"(qui permet de mettre en place le jeu : mélange des cartes, ditribuer les cartes aux joueurs, créer le tapis...). Je l'ai testé en essayant d'afficher les noms, score, première carte de la main des joueurs, ça marche.
Mais quand je veux utiliser ces éléments dans la classe FCartes (celle qui permet de jouer au jeu, avec le tapis, les mains des joueurs...), je n'arrive pas à les utiliser. Voici ce que j'ai écrit: (pour le bouton poser une carte, dans FCartes)
jeu.pioche.AjouterCarte((Carte)joueur_1.main.get(0),pioche);//On ajoute la carte du joueur à la pioche
et voici le message de netBeans : package jeu does not exist
package joueur does not exist
et voici ma classe FCartes:
public class FCartes extends javax.swing.JDialog {
/** Creates new form FCartes */
public FCartes(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
//Icarte_a_poser.setVisible(false);
}
il n'y a pas de jeu ni de joueur, c'est de là qu'est le problème je pense.
Mais comment utiliser le "jeu" que j'ai créer dans Accueil?
Ce que j'ai écrit est long, mais ma question finale est simple.
Je suis débutant en java, mais j'ai déjà coder en C, donc éviter, s'il vous plaît, les termes trop techniques.
J'ai récemment créé un jeu de cartes qui est composé :
_ d'un tapis de 5 cartes
_ de 2 joueurs qui ont chacun :
-un nom(String)
-une main de 5 cartes (pile de carte)
-un score(int)
Mon programme marche très bien.
Seulement, maintenant j'aimerais le passer en graphique, donc en utilisant ce que j'ai codé.
J'ai donc créé un nouveau package (que j'ai appeler graphique), dans lequel j'ai créé une classe Accueil (JFrameForm) et une classe FCartes (JDialogForm).
J'ai importé le package du programme déjà codé dans les 2 classes et j'ai créé tous les boutons et autres éléments dans leur "design".
DANS Accueil, j'ai créé un bouton "jouer" qui permet de créer 2 joueurs et le "jeu"(qui permet de mettre en place le jeu : mélange des cartes, ditribuer les cartes aux joueurs, créer le tapis...). Je l'ai testé en essayant d'afficher les noms, score, première carte de la main des joueurs, ça marche.
Mais quand je veux utiliser ces éléments dans la classe FCartes (celle qui permet de jouer au jeu, avec le tapis, les mains des joueurs...), je n'arrive pas à les utiliser. Voici ce que j'ai écrit: (pour le bouton poser une carte, dans FCartes)
jeu.pioche.AjouterCarte((Carte)joueur_1.main.get(0),pioche);//On ajoute la carte du joueur à la pioche
et voici le message de netBeans : package jeu does not exist
package joueur does not exist
et voici ma classe FCartes:
public class FCartes extends javax.swing.JDialog {
/** Creates new form FCartes */
public FCartes(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
//Icarte_a_poser.setVisible(false);
}
il n'y a pas de jeu ni de joueur, c'est de là qu'est le problème je pense.
Mais comment utiliser le "jeu" que j'ai créer dans Accueil?
A voir également:
- Graphique à partir d'un projet existant
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Changer carte graphique - Guide
- Filigrane projet - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Gant projet - Télécharger - Gestion de projets
10 réponses
AjouterCarte c'est une méthode de quelle classe ?
Si tu dis jeu.pioche.AjouterCarte(...), Java cherche à résoudre ce que sont jeu et pioche, il s'attend donc principalement à avoir l'un de ces deux codes :
1) Méthode statique de la classe pioche dans le package jeu
2) Méthode de l'objet pioche, attribut de l'objet jeu
Dans ton cas, vu que tu n'as pas d'objet jeu comme dans le deuxième code, il cherche la méthode static dans le package jeu comme dans le premier code...
Tu dis avoir créer le jeu dans l'accueil, quel est l'objet que tu obtiens ? De quelle classe ?
Question annexe : tu appelles AjouterCartes, mais où l'as tu défini ? Dans quelle classe ?
La confiance n'exclut pas le contrôle
Si tu dis jeu.pioche.AjouterCarte(...), Java cherche à résoudre ce que sont jeu et pioche, il s'attend donc principalement à avoir l'un de ces deux codes :
1) Méthode statique de la classe pioche dans le package jeu
package jeu;
class pioche
{
public static void AjouterCartes(...)
}
jeu.pioche.AjouterCartes();
2) Méthode de l'objet pioche, attribut de l'objet jeu
class P
{
public void AjouterCartes(...)
}
class J
{
public P pioche;
}
J jeu = new J();
jeu.pioche.AjouterCartes();
Dans ton cas, vu que tu n'as pas d'objet jeu comme dans le deuxième code, il cherche la méthode static dans le package jeu comme dans le premier code...
Tu dis avoir créer le jeu dans l'accueil, quel est l'objet que tu obtiens ? De quelle classe ?
Question annexe : tu appelles AjouterCartes, mais où l'as tu défini ? Dans quelle classe ?
La confiance n'exclut pas le contrôle
Mon projet a deux packages : "Cartes" où j'ai créé le jeu sans graphique
et "Graphique" que j'ai ajouté pour le faire en graphique
J'ai importé "Cartes" dans "Graphique".
Dans "Graphique" j'ai Accueil 'JFrameForme" et JCartes "JDialogForm".
Donc dans Accueil j'ai créé un bouton jouer où j'ai écrit :
Jeu jeu=new Jeu(Joueur_1,Joueur_2);
Donc là j'ai les joueurs qui ont leurs mains, le tapis qui est mis en place, les scores initialisés...
Puis j'ai écrit : (toujours dans le bouton poser)
fichCartes.setVisible(true); // permet d'ouvrir FCartes, donc la fenêtre de dialogue avec tous les éléments que j'y ai mis.
Seulement, là est mon problème, quand je veux utiliser l'objet jeu créé dans Accueil, j'ai le message que j'ai mis précedement. Je ne sais pas comment envoyer l'objet jeu à FCartes, ni quoi mettre dans sa classe(faut-il y mettre un public Jeu jeu ?)
et "Graphique" que j'ai ajouté pour le faire en graphique
J'ai importé "Cartes" dans "Graphique".
Dans "Graphique" j'ai Accueil 'JFrameForme" et JCartes "JDialogForm".
Donc dans Accueil j'ai créé un bouton jouer où j'ai écrit :
Jeu jeu=new Jeu(Joueur_1,Joueur_2);
Donc là j'ai les joueurs qui ont leurs mains, le tapis qui est mis en place, les scores initialisés...
Puis j'ai écrit : (toujours dans le bouton poser)
fichCartes.setVisible(true); // permet d'ouvrir FCartes, donc la fenêtre de dialogue avec tous les éléments que j'y ai mis.
Seulement, là est mon problème, quand je veux utiliser l'objet jeu créé dans Accueil, j'ai le message que j'ai mis précedement. Je ne sais pas comment envoyer l'objet jeu à FCartes, ni quoi mettre dans sa classe(faut-il y mettre un public Jeu jeu ?)
Classe Jeu :
public class Jeu {
public Pioche pioche;
public Tapis tapis;
public Joueur joueur1,joueur2; // Instances nécéssaire au jeu : pioche tapis et joueurs
public Jeu(Joueur j1,Joueur j2){//constructeur
this.joueur1=j1;
this.joueur2=j2;// Initialisation des deux joueurs
this.pioche=new Pioche();
pioche.Melanger();// Appel de la fonction permettant de mélanger la pioche
for(int i=0;i<5;i++){// Cinq éxécutions des actions siovantes :
j1.AjouterCarte(j1,pioche); // Ajout d'une carte au joueur 1
j2.AjouterCarte(j2,pioche); // Ajout d'une carte au joueur 2
} // Affecte sa main à chaque joueur
this.tapis=new Tapis(pioche);// Initialisation du tapis
}
Classe Pioche :
public class Pioche {
public List liste_Carte;//la pioche est est une liste de carte
AjouterCartes est une méthode se trouvant dans Pioche
Donc oui il y a accès.
En fait je veux savoir comment utiliser jeu dans FCartes et s'il faut mettre quelque chose de particulier dans sa classe comme public Jeu jeu;
public class Jeu {
public Pioche pioche;
public Tapis tapis;
public Joueur joueur1,joueur2; // Instances nécéssaire au jeu : pioche tapis et joueurs
public Jeu(Joueur j1,Joueur j2){//constructeur
this.joueur1=j1;
this.joueur2=j2;// Initialisation des deux joueurs
this.pioche=new Pioche();
pioche.Melanger();// Appel de la fonction permettant de mélanger la pioche
for(int i=0;i<5;i++){// Cinq éxécutions des actions siovantes :
j1.AjouterCarte(j1,pioche); // Ajout d'une carte au joueur 1
j2.AjouterCarte(j2,pioche); // Ajout d'une carte au joueur 2
} // Affecte sa main à chaque joueur
this.tapis=new Tapis(pioche);// Initialisation du tapis
}
Classe Pioche :
public class Pioche {
public List liste_Carte;//la pioche est est une liste de carte
AjouterCartes est une méthode se trouvant dans Pioche
Donc oui il y a accès.
En fait je veux savoir comment utiliser jeu dans FCartes et s'il faut mettre quelque chose de particulier dans sa classe comme public Jeu jeu;
Si tu créés ton Jeu jeu dans la classe Accueil et que tu veux t'en servir dans la classe FCartes, il faudrait que tu puisses passer la valeur de l'un à l'autre, soit dans un paramètres par exemple du constructeur FCartes(Accueil a) auquel cas tu peux faire a.jeu, soit mais ce n'est pas très élégant ici, passer jeu en static et utiliser Accueil.jeu (enfin si bien sûr j'ai bien compris le problème ^^)
Voici ce que j'ai fait, ton conseil à l'air de marcher, merci bcp.
public class FCartes extends javax.swing.JDialog {
public Jeu jeu;
/** Creates new form FCartes */
public FCartes(java.awt.Frame parent, boolean modal, Jeu j) {
super(parent, modal);
initComponents();
this.jeu=j;
//Icarte_a_poser.setVisible(false);
}
Seulement je ne sais pas quoi ajouter dans la parenthèse de la deuxième ligne:
public void run() {
FCartes dialog = new FCartes(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
Le message d'erreur qui y correspond est :
constructor FCartes in class graphique.FCartes cannot be applied to given types;
required: java.awt.Frame,boolean,package_carte.Jeu
found: javax.swing.JFrame,boolean
reason: actual and formal argument lists differ in length
public class FCartes extends javax.swing.JDialog {
public Jeu jeu;
/** Creates new form FCartes */
public FCartes(java.awt.Frame parent, boolean modal, Jeu j) {
super(parent, modal);
initComponents();
this.jeu=j;
//Icarte_a_poser.setVisible(false);
}
Seulement je ne sais pas quoi ajouter dans la parenthèse de la deuxième ligne:
public void run() {
FCartes dialog = new FCartes(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
Le message d'erreur qui y correspond est :
constructor FCartes in class graphique.FCartes cannot be applied to given types;
required: java.awt.Frame,boolean,package_carte.Jeu
found: javax.swing.JFrame,boolean
reason: actual and formal argument lists differ in length
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Dans le bouton jouer de Accueil, j'ai rajouté :
fichCartes=new FCartes(this,false,jeu);
fichCartes.setVisible(true); //pour ouvrir la fenêtre de jeu
En mettant Jeu jeu comme ceci:
public void run() {
FCartes dialog = new FCartes(new javax.swing.JFrame(), true,Jeu jeu);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
le message d'erreur est :
')' expected
';' expected
not a statement
cannot find symbol
symbol: variable Jeu
Mais je ne vois pas où j'ai fait l'erreur.
fichCartes=new FCartes(this,false,jeu);
fichCartes.setVisible(true); //pour ouvrir la fenêtre de jeu
En mettant Jeu jeu comme ceci:
public void run() {
FCartes dialog = new FCartes(new javax.swing.JFrame(), true,Jeu jeu);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
le message d'erreur est :
')' expected
';' expected
not a statement
cannot find symbol
symbol: variable Jeu
Mais je ne vois pas où j'ai fait l'erreur.
J'avais essayé mais en mettant uniquement jeu, le message d'erreur est :
non-static variable jeu cannot be referenced from a static context
non-static variable jeu cannot be referenced from a static context
Oui, il y a u new FCartes dans la méthode run() de FCartes, mais ça s'est inscrit tout seul, lorsque j'ai créé mon JDialogForm FCartes.
Est-ce qu'il ne faudrait pas plutôt utiliser this ?
Je ne sais pas, je suis débutant en Java, je connais pas trop bien encore.
Et pourquoi tu as une méthode run() dans un JDialog ?
Ca s'est écrit tout seul aussi. Je viens de faire un essai en recréant un JDialog bidon, et ça s'inscrit aussi.
Est-ce que tu pourrais mettre les lignes de codes qui correspondent au message d'erreur ?
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
FCartes dialog = new FCartes(new javax.swing.JFrame(), true, jeu);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
Est-ce qu'il ne faudrait pas plutôt utiliser this ?
Je ne sais pas, je suis débutant en Java, je connais pas trop bien encore.
Et pourquoi tu as une méthode run() dans un JDialog ?
Ca s'est écrit tout seul aussi. Je viens de faire un essai en recréant un JDialog bidon, et ça s'inscrit aussi.
Est-ce que tu pourrais mettre les lignes de codes qui correspondent au message d'erreur ?
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
FCartes dialog = new FCartes(new javax.swing.JFrame(), true, jeu);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
Accueil me sert juste à récupérer le nom des 2 joueurs et créer le jeu. Et aussi à ouvrir le JDialog qui lui va me permettre de joueur au jeu mais ce coup ci avec des cartes virtuelles (qui seront des JPanel).
Le main s'est créé tout seul, là encore j'ai recréer une classe bidon pour tester et elle a bien un main aussi.
Le main s'est créé tout seul, là encore j'ai recréer une classe bidon pour tester et elle a bien un main aussi.
C'est quoi que tu utilises comme logiciel pour te générer ton code ?
Si tu débutes en Java il vaudrait peut-être mieux que tu t'en passes pour l'instant...
Il n'y a qu'un seul main qui est appelé par programme. En toute logique ce devrait être celui d'Accueil, dans ce cas tu dois pouvoir supprimer le main de FCartes, et c'est au moment où tu ouvres le JDialog dans l'Accueil qu'il faut mettre ton code new FCartes(new JFrame(), true, jeu);
D'ailleurs le new JFrame() doit très certainement correspondre à ton Accueil, donc si tu appelles ce code dans Accueil tu dois faire new FCartes(this, true, jeu);
Si tu débutes en Java il vaudrait peut-être mieux que tu t'en passes pour l'instant...
Il n'y a qu'un seul main qui est appelé par programme. En toute logique ce devrait être celui d'Accueil, dans ce cas tu dois pouvoir supprimer le main de FCartes, et c'est au moment où tu ouvres le JDialog dans l'Accueil qu'il faut mettre ton code new FCartes(new JFrame(), true, jeu);
D'ailleurs le new JFrame() doit très certainement correspondre à ton Accueil, donc si tu appelles ce code dans Accueil tu dois faire new FCartes(this, true, jeu);