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

Agents de placement/Fenêtres Java Discussion :

Récuperation du contenu d'une variable dans un OptionPane avec balises HTML


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    973
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 973
    Points : 139
    Points
    139
    Par défaut Récuperation du contenu d'une variable dans un OptionPane avec balises HTML
    bonjour,

    J'ai crée un JoptionPane qui récupère le contenu d'une variable.
    Cette variable est incrémentée dans une boucle for et son contenu, de type String augmente à chaque passage dans cette boucle.
    Or, il se trouve que lorsque je formate le contenu de la variable récupérée avec des balises html, je ne vois que le résultat du premier passage dans la boucle for qui est bien formaté comme demandé avec les balises html.

    Pouvez vous me dire pourquoi?
    Peut être que le nombre de caractères maximal d'une variable de type String est limité pour pouvoir être récupéré et formaté

    Voici le code concerné

    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
    public void tirage_des_joueurs(){
    	
    	
    	for(int i =0; i<= tabJoueur.length-1;i++) //cette boucle for parcourt le tableau tabJoueur
    	{      
    		tabJoueur[i].tirageUnJoueur();        //appel de cette méthode pour chaque joueur du tableau
    		this.texte_final = texte_final + tabJoueur[i].get_texte_final_joueur()+ "\n";variable texte_final dont le contenu s'incrémente 		
    		//On récupère le score de chaque élément
    		//du tableau tabJoueur contenu dans la variable    texte_final_joueur de la classe joueur
    		
    		
    	}// fin de for
    	
    		
    	JOptionPane.showMessageDialog(null,"<html><center><body><FONT COLOR=\"YELLOW\"><FONT SIZE=5> les scores obtenus sont les suivants "+this.texte_final +"</FONT></FONT></body></center></html>" , "résultat de la partie", JOptionPane.INFORMATION_MESSAGE);	
    	}// fin de méthode tirage_des_joueurs
    Voici le code implémenté

    Pouvez-vous m'aider sur ce point car je tourne en rond depuis quelques jours.

    Merci beaucoup à vous de votre aide.

    Cordialement.
    Nathalie

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Salut,

    as-tu fais un System.out.println(texte_final); avant ton JOptionPane ?
    Le résultat est-il correcte ?

    Attention aussi au formatage de ce texte, car tu vas l'utiliser comme du texte html, il y a donc certains caractères qui risquent te gêner.

    Sinon quelques petites remarques :
    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
    // Ta boucle fonctionne, mais c'est un peu étrange
    for(int i =0; i<= tabJoueur.length-1;i++)
     
    // Préfère ça :
    for(int i = 0 ; i < tabJoueur.length ; i++)
    // ou ça :
    for(Joueur j : tabJoueur)
     
    // Tu fais aussi de la concaténation de texte dans une boucle, ce n'est top
    // Utilise plutôt :
    StringBuilder texte_final = new StringBuilder();
     
    // puis dans la boucle :
    texte_final.append(tabJoueur[i].get_texte_final_joueur());
    texte_final.append("\n");
     
    // En ce qui concerne cette dernière ligne, 
    // attention en HTML il faudra utiliser la balise <BR>

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    973
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 973
    Points : 139
    Points
    139
    Par défaut balises html dans Joptionpane
    Bonjour,

    Je viens de prendre connaissance de ton code ;
    J’ai donc déclaré la variable texte_final de type StringBuilder et pas simple String.
    J'ai une erreur de type NullPointer !exception qui est lancée quand je débugge le programme
    Pour que tu te repères bien Voici tout le code implémenté et pas seulement la partie présentée.
    Peut être pourras tu plus facilement revenir dessus.

    Tout d'abord la classe Joueur qui contient la variable d'instance texte_final_joueur ( méthode recuperer_score_joueur)dont le contenu sera récupéré dans la classe Partie

    Pour le code de la classe Partie ,seule la méthode tirage_des_joueurs() nous intéresse par rapport à notre problème


    Si tu pouvais m'aider sur ce point j'en serais la plus heureuse car je galère dessus depuis deux jours...

    Merci beaucoup à toi.

    Cordialement.

    Nathalie

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    import javax.swing.JOptionPane;
     
     
     
    public class Joueur {  // propriété=variable d'instance
    	private String nom ;           //propriété nom              
    	private int nbreTirage ;       //propriété nbreTirage 
    	private Carte[] tabCartes; //propriété tabCarte
    	private int totalPoint ;       //propriété totalPoint
    	private String texte_final_joueur="";// propriété texte_final_joueur;
    	private String texte_cartes_tirees="";// propriété texte_cartes_tirees
    	private int nbc_tirees_joueur;// propriété nbc_tirées qui recupère la valeur du paramètre nbre_tirages_partie 
    	// du constructeur de la classe partie
     
    	//si on laisse la possibilité à l'utilisateur de choisir le nombre de cartes tirées alors, on ajoute un paramètre au constructeur
    	//de la classe joueur cela qui permet de récupérer ce nombre de cartes tirées, par le troisème argument de la classe Partie
    	// nbre_tirages qui contient lui même le contenu de la variable nbre_cartes_tirees 
     
    	Joueur(String n, int nbre_tirages_partie){    // constructeur de la classe Joueur{
    		this.nom = n ;
    		this.nbreTirage =0;
     
    		nbc_tirees_joueur=nbre_tirages_partie;// on va avoir besoin de récuperer la valeur de la variable nbc_tirees pour 
    		//l'insérer dans le paramètre n de la méthode tirerCarte car une fois le constructeur fermé, on ne peut plus recuperer la valeur 
    		//du paramètre nbre_cartes_tirees
     
    		this.tabCartes= new Carte[nbre_tirages_partie];
     
    		//this.tabCartes = new ArrayList<Carte>();
     
    		//tableau de nbre_tirages_partie éléments
    		this.totalPoint = 0;
    		this.texte_final_joueur="";
    		this.texte_cartes_tirees="";
    		}// fin de constructeur de la classe Joueur
     
    	//getteur permettant de récupérer texte_final_joueur en dehors de cette classe.
    	public String get_texte_final_joueur(){
    		return texte_final_joueur;
    	}
     
    	public String get_nom(){
    		return nom;
    	}
    	public int get_totalPoint(){
    		return totalPoint;
    	}
     
    	public void tirerCarte(int n){  // méthode tirerCarte qui prend 
    								    //en argument un entier qui représente le nombre de cartes tirées
     
     
    			for(int i=1 ; i<= n ; i++)
    			{
    				tabCartes[nbreTirage]= Carte.PiocherCarte();
    				//tabCartes.add(Carte.PiocherCarte());
     
    				this.totalPoint= this.totalPoint+tabCartes[nbreTirage].calculer_points() ;   //Cette méthodes est dans la classe carte
    				//this.totalPoint= this.totalPoint+tabCartes.get(nbreTirage).calculer_points() ;
    				//Elle permet d'obtenir le nombre de points de chaque carte du tableau tabCarte
    				nbreTirage++ ; //elle est incrémentée de 1 à chaque passage. 
    			} // fin de for
     
    			} // fin de méthode tirerCarte
     
    	public void tirageUnJoueur(){    // méthode tirageJoueur 
    									//	qui appelle la méthode tirerCarte 
    		//on peut également créer un paramètre pour cette méthode;  il contiendrait le nombre de cartes tirées par chaque joueur
     
    		this.tirerCarte(nbc_tirees_joueur) ;   //pour permettre à un joueur de tirer un nombre entre 2 et 5 cartes, il faut recuperer cette valeur 
    		//1-dans la variable nbc_tirees_joueur 
     
    		this.recuperer_score_joueur();
     
    		}// fin de méthode tirageUnJoueur
     
    	public void recuperer_score_joueur(){   //cette méthode affiche pour chaque joueur le nombre de points cumulés
    		//System.out.println(this.nom);
    		for(int i =0;i<=nbreTirage-1;i++){
     
    			//La variable nbreTirage est égale à 2 après l'appel de la méthode tirerCarte(2),
    			//La méthode NommerCarte()est appellée 2 fois pour afficher les 2 cartes du tableau tabCarte du joueur en cours, 
    			//i commence à 0 et sa valeur maximale doit être 1. i doit donc être<=nbreTirage-1
     
    			// La variable nbreTirage est égale à 4 après l'appel de la méthode tirerCarte(4)etc...
    			//La méthode NommerCarte()est appellée 4 fois pour afficher les 4 cartes du tableau tabCarte du joueur en cours
    			//i commence à 0 et sa valeur maximale doit être 3. i doit donc être<=nbreTirage-1
     
    			this.texte_cartes_tirees=this.texte_cartes_tirees + " " + tabCartes[i].NommerCarte();
     
    		}//fin de for 
    		//System.out.println(totalPoint);
     
    		this.texte_final_joueur = " le joueur " + this.nom + " a obtenu " + this.totalPoint + " points avec les cartes " + this.texte_cartes_tirees+"\n";
    		JOptionPane.showMessageDialog(null,"<html><center><body><FONT COLOR =\"YELLOW\"><FONT SIZE=5>le joueur " + this.nom + " a obtenu " + this.totalPoint + " points avec les cartes " + this.texte_cartes_tirees+"</FONT></FONT></body></center></html>","Règle du jeu", JOptionPane.PLAIN_MESSAGE);
    	}// fin de méthode recupere_score_cartes_joueur
     
     
    }

    voici le code de la classe Partie concerné

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    
    import javax.swing.*;
    import java.awt.*;
    
    
    public class Partie {
    	
    	       // déclaration de la variable nbreJoueur de type int
    	private Joueur []tabJoueur;  // déclaration d’un tableau de nom tabJoueur qui contient des éléments de type Joueur
    	private Joueur joueur_principal ;     // déclaration de la variable joueur_principal de type Joueur
    	//private String texte_final;
    	private static String inputValue1="";
    	private static String inputValue2="";
    	private static String inputValue3="";
    	private StringBuilder texte_final;
    	
    	
    	
    	
    	//constructeur de la classe partie
    
    	Partie(int nbre, String nom_lanceur, int nbre_tirages_partie){
    	texte_final = new StringBuilder();
    		 
    this.tabJoueur= new Joueur[nbre];   //création d'un tableau d'un nombre d'éléments = contenu de la variable nombre_joueurs
    
    this.joueur_principal = new Joueur("joueur_principal", nbre_tirages_partie);   //création d'un joueur joueur_principal qui recoit toujours en paramètre le nom: joueur_principal.
    
    this.tabJoueur[0]= new Joueur(nom_lanceur,nbre_tirages_partie);
    		
    		for(int i=1; i<= tabJoueur.length-1;i++) //on commence à i=1 et non pas à i=0 car dans[0]il y a le joueur principal
    		{  
    		
    					
    tabJoueur[i]= new Joueur("Joueur"+i , nbre_tirages_partie);    //  //+i:c'est possible car il y a une conversion implicite du int en string.
    														       	
         }// fin de boucle for
    		
    		
    }// fin de constructeur de la classe Partie
    	
    	
    
    	
    	
    public void tirage_des_joueurs(){
    	
    	
    	for(int i =0; i<= tabJoueur.length-1;i++) //cette boucle for parcourt le tableau tabJoueur
    	{      
    		tabJoueur[i].tirageUnJoueur();        //appel de cette méthode pour chaque joueur du tableau
    		
    //this.texte_final = texte_final + tabJoueur[i].get_texte_final_joueur()+ "\n";
    //this.texte_final = texte_final + tabJoueur[i].get_texte_final_joueur();
     j'ai mis cette partie de code en commentaires pour pouvoir la remplacer par la tienne	
    	:
    texte_final.append(tabJoueur[i].get_texte_final_joueur());
    texte_final.append("\n"); c'est la nouvelle partie de code		 
    
    		
    		
    		//On récupère le score de chaque élément
    		//du tableau tabJoueur contenu dans la variable texte_final_joueur de la classe joueur
    		
    		System.out.println(tabJoueur[i].get_texte_final_joueur());
    		
    	}// fin de for
    	
    	joueur_principal.tirageUnJoueur();
    	//this.texte_final=texte_final + this.joueur_principal.get_texte_final_joueur()+ "\n";
    
    	//this.texte_final=texte_final + this.joueur_principal.get_texte_final_joueur();
    
    	
    j'ai également remplacé mon code ci-dessus par le tien ici
    texte_final.append(this.joueur_principal.get_texte_final_joueur());
    texte_final.append("\n");	 
    	JOptionPane.showMessageDialog(null,"<html><center><body><FONT COLOR=\"YELLOW\"><FONT SIZE=5> "+this.texte_final+"\n"+"</FONT></FONT></body></center></html>"  , "résultat de la partie", JOptionPane.INFORMATION_MESSAGE);	
    
    	}// fin de méthode tirage_des_joueurs
    
    
    public void jouer(){
    	this.tirage_des_joueurs();
    }
    
    
    
    
    
    	public static void main(String[] args) {
    		String inputValue1="";
    		int nombre_joueurs=0;
    		String nom_lanceur_partie="";
    		int nbre_cartes_tirees=0;
    		
    		
    		int temp=4; //temp peut prendre comme valeur 0(oui),1(non),2 et -1(annuler) et pour ne pas confondre avec le oui 
    		            //on ne l'initialise pas à 0 mais à 4
    		// création de quelques JOptionpane de type showMessagedialog qui énoncent la règle du jeu
    			
    		//Object.=UIManager.get("OptionPane.background");
    		UIManager.getColor("blue");
    		
    		//UIManager.get("Jframe.background");
    			UIManager.get("Panel.background");
    			
    		UIManager.put("OptionPane.background", Color.cyan);
    		UIManager.put("Panel.background", Color.blue);
    		//UIManager.put("JFrame.background", Color.blue);
    		
    do{
    		
    		
    try{
    
    		
     			
    			
    		inputValue1 = JOptionPane.showInputDialog(null,"<html><body><center><FONT COLOR =\"YELLOW\"><FONT SIZE=5>Veuillez saisir un nombre de joueurs concurrents du joueur principal </FONT></FONT></body></center></html>","saisie du nombre de concurrents",JOptionPane.QUESTION_MESSAGE);
    		
    		
    		test_nb_joueurs(inputValue1);
    		
    		
    		//si la personne a saisi une chaîne de caractères, la fonction parseInt convertit du String(1,2,3...) en int
    		//ne pourra pas fonctionner et cela renvoit au catch.
    		 nombre_joueurs=Integer.parseInt(inputValue1);//convertit en entier.
    		
    		 inputValue2 = JOptionPane.showInputDialog(null,"<html><body><center><FONT COLOR =\"YELLOW\"><FONT SIZE=5>Veuillez saisir votre nom</FONT></FONT></body></center></html> ","saisie du nom de l'initiateur de la partie ",JOptionPane.QUESTION_MESSAGE);
    		
    				
    		if(inputValue2==null){System.exit(0);}		
    				if (inputValue2.equals("") || inputValue2.equals(" ") ) throw new champ_de_saisie_vide();
    		test_caracteres_a_z_A_Z(inputValue2);
    		//if (inputValue2.matches("[a-zA-Z[ \t]]*")==false)throw new test_caracteres_az();
    		
    		System.out.println("la chaine  "+inputValue2+"  ne contient que les caractères alphabétiques de a à z ou de A à Z ou des espaces"  );
    		
    		nom_lanceur_partie=inputValue2;
    		
    		inputValue3=JOptionPane.showInputDialog(null, "<html><body><center><FONT COLOR =\"YELLOW\"><FONT SIZE=5>Veuillez saisir un nombre de cartes compris entre 1 et 5</FONT></FONT></body></center>", "saisie du nombre de cartes", JOptionPane.QUESTION_MESSAGE);
    		
    		
    		test_nb_cartes(inputValue3);
    	    
    		nbre_cartes_tirees=Integer.parseInt(inputValue3);// 
    		
    		Partie Partie1 =  new Partie(nombre_joueurs, nom_lanceur_partie, nbre_cartes_tirees);//ce sont les paramètres du constructeur
    		Partie1.jouer();//appel de la méthode jouer de la classe partie
    		Partie1.affichergagnant();
    		
    		}//fin de try
    		
    		catch(NumberFormatException NFex) //type et nom
    		{
    			JOptionPane.showMessageDialog(null, "<html><body><center><FONT COLOR =\"YELLOW\"><FONT SIZE=5> Vous avez saisi une valeur non numérique! </FONT></FONT></body></center>"  ,"type d'erreur commise", JOptionPane.ERROR_MESSAGE);		
    		    //null:s'affiche au milieu de la fenêtre parente par défaut cad l'écran.             TITRE                     ICONE
    		}
    		
    		catch(champ_de_saisie_vide csv) //type et nom
    		{
    			//csv.annoncererreur();
    			champ_de_saisie_vide.annoncererreur();
    		}
    		
    		catch(Exception ex) //ex est une variable de la classe exception qui va contenir l'adresse de l'erreur pour pointer dessus.
    		{	
    			//JOptionPane.showMessageDialog(null, "<html><body><center><FONT COLOR =\"YELLOW\"><FONT SIZE=5>Vous avez commis  ce type d'erreur </FONT></FONT></body></center></html>" +ex.toString() ,"type d'erreur commise", JOptionPane.ERROR_MESSAGE);
    			JOptionPane.showMessageDialog(null,"<html><body><center><FONT COLOR =\"YELLOW\"><FONT SIZE=5>Vous avez commis  ce type d'erreur " +ex.toString()+"</FONT></FONT></body></center></html>" ,"type d'erreur commise", JOptionPane.ERROR_MESSAGE);
    			//dans la classe exception qui est une classe de java il y a la méthode toString qui ramène le msg d'erreur
    			//de type string.
    		}// fin de catch 
    		
    				finally {if (temp!=1){
    			temp = JOptionPane.showConfirmDialog(null,"<html><body><center><FONT COLOR =\"YELLOW\"><FONT SIZE=5>Voulez vous faire une autre partie?</FONT></FONT></body></center></html>", "Rejouer ou pas", JOptionPane.YES_NO_OPTION);}// fin if 
    			System.out.println("la valeur de temp est "+temp);
    			}// fin de finally
    
    
    	}//fin de do
    	
    	while (temp ==JOptionPane.YES_OPTION ); //on effectue le code qu'il y a dans le do tant que temp=0 cad qu'on a cliqué sur OK.
    	
    	
    	}// fin de main
    		
    
    }

Discussions similaires

  1. Affichage du contenu d'une variable dans un formulaire
    Par arno15 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 31/03/2008, 07h51
  2. Affichage contenu d'une variable dans JS
    Par tangjuncn dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/05/2006, 13h38
  3. Réponses: 3
    Dernier message: 06/02/2006, 17h04
  4. PB récupérez le contenu d'une variable dans une balise titr
    Par crevettepourrie dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/01/2006, 17h41
  5. Réponses: 3
    Dernier message: 27/07/2005, 15h12

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