IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Convertir projet Java en Applet


Sujet :

Développement Web en Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut Convertir projet Java en Applet
    Bonjour,

    Désirant afficher mon projet JAVA (création d'un jeu), sur une page HTML , j'ai décidé de convertir mon projet en Applet, pour pouvoir utiliser la balise <Applet> (solution qui paraissait être la plus simple). Après quelques recherches, j'ai suivi les instructions : supprimer ma classe Main, modifier ma classe qui héritait de JFrame, pour qu'elle hérite de JApplet ( suppression du constructeur de la classe et création de la méthode init() ).

    Résultat: mon jeu s'affiche correctement sur ma page HTML. Petit problème: l'interaction avec la souris ne fonctionne pas. Je ne peux donc pas jouer.

    Si je ne me trompe pas, toutes les interactions avec la souris (actionlistener) doivent se trouver dans la classe héritant de JApplet (elle s'appelle FenetreJeu). Cela me pose problème.

    En effet, j'ai implémenté ma classe CaseMorpionGraphique de manière à ce que dès que l'utilisateur clique sur une case , la méthode jouerPartie() ( la méthode principale qui permet de jouer un coup) se lance. En fait, tout se passe dans le constructeur de la classe CaseMorpionGraphique:
    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
    17
    18
    19
    20
    21
    22
     
    public CaseMorpionGraphique(int ident, MorpionGraphique m){
    		super(ident);
    		caseGraphique = new JButton(String.valueOf(getId()+1));
     
    		// Propriétés graphique du bouton
    		caseGraphique.setBorder(new LineBorder(Color.BLACK,1));
    		caseGraphique.setBackground(Color.WHITE);
    		caseGraphique.setMinimumSize(new Dimension(20,20));
    		caseGraphique.setPreferredSize(new Dimension(30,30));
    		caseGraphique.setVisible(true);
     
    		morpionG=m; 
    		// Interception des actions de l'utilisateur grâce au clic de la souris
    		 caseGraphique.addActionListener(new ActionListener(){
     
                public void actionPerformed(ActionEvent e){                   
                        morpionG.jouerPartie(getId());       
                }
     
    		});
    	}
    Je ne vois donc pas comment pouvoir lancer le "ActionListener' sur les cases à partir de la classe FenetreJeu.

    Quelqu'un aurait une idée? Je précise que c'est la première fois que je crée une Applet..

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Azumii Voir le message
    Si je ne me trompe pas, toutes les interactions avec la souris (actionlistener) doivent se trouver dans la classe héritant de JApplet (elle s'appelle FenetreJeu). Cela me pose problème.
    Y a pas de raisons, un ActionListener c'est juste une classe qui implémente un interface précisé. Quand aux addActionListener, ils se mettent sur les composants que tu veux écouter.

    Tu n'as aucune erreur dans ta console java?

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Y a pas de raisons, un ActionListener c'est juste une classe qui implémente un interface précisé. Quand aux addActionListener, ils se mettent sur les composants que tu veux écouter.
    Ah oui? J'étais persuadée que le problème venait de là. C'est ce que j'avais compris, au détour de discussion sur des forums. Au départ, avant que j'essaie de convertir mon projet Java en Applet, tout fonctionnait bien. Je l'ai même extrait en .jar et l'application fonctionne. Souhaitant exécuter ce .jar sur une page HTML, je me suis rendue compte (de ce que j'ai pu lire) que la seule manière était de créer une applet. Voici les changements que j'ai fait :
    FenetreJeu (avant)
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    public class FenetreJeu extends JFrame {
     
    	JPanel joueur1;
    	JPanel joueur2;
     
    	MorpionGraphique partieEnCours;
    	// JButton : les boutons
        JButton newPartie=new JButton("Nouvelle partie");
     
        //JLabel : composant pour afficher du texte 
        JLabel warning = new JLabel("Joueur 1, à toi de commencer", JLabel.CENTER);
     
        public FenetreJeu (MorpionGraphique morpionG) {
        	super("Morpion");
        	partieEnCours=morpionG;
    		joueur1= new JoueurPanel(partieEnCours.getJoueur(0));
    		joueur2= new JoueurPanel(partieEnCours.getJoueur(1));
    		this.setSize(400, 240);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setResizable(false);
     
    		// On définit le layout à utiliser 
    		this.setLayout(new BorderLayout());
    		warning.setPreferredSize(new Dimension(400,40));
    		newPartie.setPreferredSize(new Dimension(400,30));
    		this.getContentPane().add(warning, BorderLayout.NORTH);
    		this.getContentPane().add(newPartie, BorderLayout.SOUTH);
    		this.getContentPane().add(joueur1, BorderLayout.WEST);
    		this.getContentPane().add(joueur2, BorderLayout.EAST);
    		this.getContentPane().add(partieEnCours.getPlateau().getPlateauDeJeu(), BorderLayout.CENTER);
     
    		this.setVisible(false);
     
    		newPartie.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                        restart();
                }
        });
     
        }
     
        public void restart(){
    		partieEnCours.restart();
    		warning.setText(partieEnCours.getJoueurCourant() + " à toi de commencer");
    	}
     
        public void setWarning(String w){
            warning.setText(w);
     
        }
     
    }
    FenetreJeu (après) : j'ai mis en gras les changements
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    public class FenetreJeu extends JApplet    {
    	
    	JPanel joueur1;
    	JPanel joueur2;
    	JPanel container = new JPanel();
    
    	MorpionGraphique partieEnCours;
    	// JButton : les boutons
        JButton newPartie=new JButton("Nouvelle partie");
    	
        //JLabel : composant pour afficher du texte 
        JLabel warning = new JLabel("Joueur 1, à toi de commencer", JLabel.CENTER);
        
        public void init() {
        	super.init();
        	partieEnCours=new MorpionGraphique(); 
    		joueur1= new JoueurPanel(partieEnCours.getJoueur(0));
    		joueur2= new JoueurPanel(partieEnCours.getJoueur(1));
    
    		// On définit le layout à utiliser 
    		this.setLayout(new BorderLayout());
    		warning.setPreferredSize(new Dimension(400,40));
    		newPartie.setPreferredSize(new Dimension(400,30));
    		this.getContentPane().add(warning, BorderLayout.NORTH);
    		this.getContentPane().add(newPartie, BorderLayout.SOUTH);
    		this.getContentPane().add(joueur1, BorderLayout.WEST);
    		this.getContentPane().add(joueur2, BorderLayout.EAST);
    		this.getContentPane().add(partieEnCours.getPlateau().getPlateauDeJeu(), BorderLayout.CENTER);
    		newPartie.addActionListener(new ActionListener(){
    			
                public void actionPerformed(ActionEvent e){                   
                        partieEnCours.restart();       
                }
    			
    		});
    		this.setVisible(true);	
    		
        }
        
        public void setWarning(String w){
            warning.setText(w);
    
        }
    }
    Et j'ai donc supprimé ma classe Main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class MainGraphique {
    	public static void main(String args[]){
            MorpionGraphique m = new MorpionGraphique();
     
     
    }
    }
    Et suite à cela , la fenêtre avec tous les éléments ( plateau de jeu, cases etc.) s'affichent mais dès que je clique sur une case, rien ne se passe.
    Mais je n'ai aucune erreur dans mon console (je travaille sous Eclipse).
    Si jamais vous connaissez une autre méthode, sans passer par une Applet, pour exécuter mon projet .jar sur une page html, ça me convient très bien aussi.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ton public FenetreJeu (MorpionGraphique morpionG) il était appelé comment avant? Je ne vois pas l'appel ni comment il a été transformé. Quand tu dis que rien ne se passe. Si tu met un System.out.println dans tes actionPerformed, le message n'apparait pas?

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Tu as complètement raison tchize_. J'ai essayé de mettre un system.out.println dans le actionPerformed de ma classe CaseMorpionGraphique, et il s'affiche dans la console dès que je clique sur une case.

    Voici (une partie de) ma classe MorpionGraphique ( ma classe principale qui gère la partie ) avant l'applet :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    public class MorpionGraphique extends Morpion {
     
    	private FenetreJeu fenetreJeu;
    	private FenetreAccueil fenetreAccueil;
    	private boolean partieEnCours=true;
    	private Boolean humainPeutJouer=false;
    	private int identity=0;
    	private CaseMorpion caseVientEtreJoue;
     
     
     
    	public MorpionGraphique(){
    	      super();
    	      joueurs[0] = new HumanGraphique(0, Color.RED);
    	      plateau=new PlateauMorpionGraphique(this);
    	      fenetreAccueil=new FenetreAccueil(this);   
    	}
     
     
    	public void start() {
    		if(getIdentity()==2) {
    			joueurs[1]=  new IAGraphique(1, Color.BLUE);
    		}
    		else joueurs[1]= new HumanGraphique(1, Color.BLUE); 
    		initJoueurs();
     
    		fenetreAccueil.setVisible(false);
    		fenetreJeu = new FenetreJeu(this);
    		fenetreJeu.setVisible(true);
    		humainPeutJouer=true;
    	}
     
     
    	// Fonction permettant au joueur courant de jouer un coup
    	public void jouerPartie(int caseId){
    		 if(partieEnCours& humainPeutJouer){
    				 try{
     
    					 	getJoueurCourant().setCaseChoisie(getPlateau().getCases(caseId));
    					 	caseVientEtreJoue=getJoueurCourant().getCaseChoisie();
    					 	getJoueurCourant().placerCoup(getPlateau(), caseVientEtreJoue);
                         	changerJoueurCourant();
                         	fenetreJeu.setWarning("A "+joueurCourant+" de jouer");
                         	siFinPartie();
                         	iaToPlay(caseVientEtreJoue);                    	
    				 }catch(CoupInvalideException e){
    					 	fenetreJeu.setWarning("Attention case invalide. "+joueurCourant+" essaie encore !");
     
    				 }
    		 }
    		 siFinPartie();
     
    	}
     
    	 public PlateauMorpionGraphique getPlateau(){
             return (PlateauMorpionGraphique) plateau;
         }
     
    	 public JoueurMorpionGraphique getJoueur(int id){
    	       return (JoueurMorpionGraphique) joueurs[id];
    	 }
     
    	 public void setIdentity(int i){
    		 identity=i;
    	 }
     
    	 public int getIdentity() {
    		 return identity;
    	 }
     
    	 public void iaToPlay(CaseMorpion c) {
     
    		 if (partieEnCours){
    			 if(getIdentity()==2){
    					boolean problem=false;
    					do {
    						try{
    						problem=false;
    						getJoueurCourant().placerCoup(getPlateau(), c); 
    					 }catch(CoupInvalideException e){
    					 		problem=true;
    					 }
    				 }while(problem);
    					changerJoueurCourant();
    					fenetreJeu.setWarning("A "+getJoueurCourant()+" de jouer");
    					humainPeutJouer=true;
    			 }
    		 }
    	 }
    Avant j'avais deux fenêtre: fenêtreJeu et fenetreAccueil. La première qui s'affichait était fenetreAccueil , elle demandait à l'utilisateur de choisir entre un adversaire humain ou joueur. Dès que le choix était fait fenetreJeu s'affichait. Pour le passage à l'applet j'ai décidé de supprimer fenetreAccueil, étant donné que je ne peux avoir qu'une fenetre. C'est un autre problème que je devrais régler plus tard.

    Normalement, quand on clique sur la case, la méthode jouerPartie(int) de MorpionGraphique se lance.

    Voici le code de MorpionGraphique maintenant:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    public class MorpionGraphique extends Morpion {
     
    	private FenetreJeu fenetreJeu;
    	private boolean partieEnCours=true;
    	private Boolean humainPeutJouer=false;
    	private int identity=0;
    	private CaseMorpion caseVientEtreJoue;
     
     
     
    	public MorpionGraphique(){
    	      super();
    	      joueurs[0] = new HumanGraphique(0, Color.RED);
    	      joueurs[1]=  new IAGraphique(1, Color.BLUE);
    	      plateau=new PlateauMorpionGraphique(this);
    	      initJoueurs();
     
    	}
     
     
    	// Fonction permettant au joueur courant de jouer un coup
    	public void jouerPartie(int caseId){
    		 if(partieEnCours& humainPeutJouer){
    				 try{
     
    					 	getJoueurCourant().setCaseChoisie(getPlateau().getCases(caseId));
    					 	caseVientEtreJoue=getJoueurCourant().getCaseChoisie();
     
    					 	getJoueurCourant().placerCoup(getPlateau(), caseVientEtreJoue);
                         	changerJoueurCourant();
     
                         	fenetreJeu.setWarning("A "+joueurCourant+" de jouer");
                         	siFinPartie();
                         	iaToPlay(caseVientEtreJoue);                    	
    				 }catch(CoupInvalideException e){
    					 	fenetreJeu.setWarning("Attention case invalide. "+joueurCourant+" essaie encore !");
     
    				 }
    		 }
    		 siFinPartie();
     
    	}
    C'est vrai qu'en y pensant, je n'ai pas passé le paramètre de la fenetreJeu créé à ma classe MorpionGraphique, peut être que le problème vient de la.
    (Je viens de modifier le constructeur de MorpionGraphique afin qu'il puisse prendre un paramètre de type fenetreJeu , mais ça ne fonctionne toujours pas.)

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    J'ai trouvé le problème ! Comme j'avais enlevé la partie ou le joueur pouvait choisir son adversaire , j'avais oublié de mettre le boolean "humainPeutJouer" à vrai, du coup mon code ne pouvait pas s’exécuter.

    Une dernière petite question , auriez-vous une idée de comment je pourrai faire , sur une seule fenetre donc (en l’occurrence l'applet) pour demander à mon utilisateur de choisir son adversaire (j'avais utilisé un JCheckBox je crois) , et seulement une fois le choix fait afficher le plateau de jeu ?

    Merci.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Finalement, j'y suis arrivée en utilisant deux JPanel.

    Une toute dernière question : dans mon jeu (dans ma classe Applet ) , j'ai un bouton "newPartie" et lorsque l'utilisateur clique dessus, la partie recommence. Cela fonctionne sous Eclipse, mais sur mon site cela ne fonctionne pas, est ce normal?

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ce n'est pas parce que tu es dans une applet que tu ne peux pas créer de JFrame au passage

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Merci , je n'ai désormais plus de problèmes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir un projet java en un projet Maven
    Par Islemkarmous dans le forum Maven
    Réponses: 6
    Dernier message: 20/05/2014, 15h24
  2. Convertir une application Java en applet ?
    Par Nitroman_70 dans le forum Applets
    Réponses: 4
    Dernier message: 04/06/2008, 09h52
  3. Transformer un projet Java en applet
    Par iesnbold dans le forum Langage
    Réponses: 2
    Dernier message: 17/05/2007, 22h48
  4. [APPLET] convertire une application JAVA en applet
    Par wickramben dans le forum Applets
    Réponses: 1
    Dernier message: 13/04/2006, 10h01
  5. Comment eviter de dedoubler projet c++ et projet java/applet
    Par buzzz dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 13/10/2004, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo