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 :

Pb d'affichage de bouton dans une fenetre (JFrame)


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Points : 23
    Points
    23
    Par défaut [Resolu] Pb d'affichage de bouton dans une fenetre (JFrame)
    Salut a tous,

    Voila j'ai un souci d'affichage de bouton. Je m'explique, je voudrais ouvrir une fenetre avec deux bouton sur le coté et de l'autre un message qui dit "BIENVENUE SUR YAM 1.0". ensuite, lorsqu'on clique sur le bouton commencer les numero dans les carre s'affiche en dessous.

    Voila l'idée et le programme

    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
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.lang.*;
     
     
    class yam extends JPanel implements ActionListener{
     
    	JPanel ardoise = new JPanel();
    	JPanel carre = new JPanel();
    	JButton b1 = new JButton ("Commencer");
    	JButton b2 = new JButton ("Quitter");
    	Font titre = new Font("TimesRoman",Font.BOLD,25);
    	Font mafonte = new Font("TimesRoman",Font.BOLD,25);	
     
    	yam() {
    		setLayout(new BorderLayout());
    		ardoise.add(b1);
    		ardoise.add(b2);
    		add(ardoise,BorderLayout.EAST);
    		add(carre,BorderLayout.WEST);
    		carre.setLayout(new BorderLayout());
    		carre.setPreferredSize(new Dimension(400, 300));
    		b1.addActionListener(this);
    		b2.addActionListener(this);
    	}
     
    	public void paint (Graphics g){
    		g.setFont(titre);
    		g.drawString("BIENVENUE SUR YAM 1.0",10,20);
    	}
     
    	public void afficheTitre(){
    		Graphics g = this.getGraphics();
    		g.setFont(titre);
    		g.drawString("BIENVENUE SUR YAM 1.0",10,20);
    	}
    	public void afficheChiffre(Graphics g){
    		String test = "3";
    		g.setColor(Color.black);
    		g.drawString(test,29,133);
    		g.drawString(test,89,133);
    		g.drawString(test,149,133);
    		g.drawString(test,209,133);
    		g.drawString(test,269,133);	
    	}	
    	public void actionPerformed (ActionEvent e){
    		Graphics g = carre.getGraphics();
    		System.out.println(carre);
    		if (e.getSource() == b1){
    			g.setFont(mafonte);
    			g.setColor(Color.red);
    			g.drawRect(10,100,50,50);
     
    			g.drawRect(70,100,50,50);
     
    			g.drawRect(130,100,50,50);
     
    			g.drawRect(190,100,50,50);
     
    			g.drawRect(250,100,50,50);
    			afficheChiffre(g);
    		}
    		if (e.getSource() == b2)
    			System.exit(0);
    	}
     
    	public static void main (String argv[]){
    		JFrame affiche = new JFrame();				
    		affiche.setContentPane(new yam());
    		affiche.pack();
    		affiche.setVisible(true); 
    		double i;
    		for (int j = 0 ; j < 10; j++){
    			i = Math.random() * Integer.parseInt(argv[0]) + 1;
    			System.out.println("le chiffre aleatoire est : " + (int)i);
    		}
    	}
    }
    Le probleme est que lorsque je lance le programme, ma fenetre s'ouvre avec le message que je veut bien mais les bouton n'apparaisse pas??? Il faut que je passe dessus avec mon curseur de souris pour qu'ils appraissent comme par magie?

    J'ai identifié le problème, et cela viendrait de la methode paint() parce que lorsque je ne l'utilise pas cela fonctionne. Mais le hic c'est que je ne sait pas comment sans cette methode je peut ecrire mon message au debut...

    Pourquoi cette methode paint(Graphics) me fou le dawa......

    Merci de vos reponses....

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Il te faut faire un Panel à part pour gérer ton affichage perso. Ta classe Yam se contentera d'agréger les boutons et le panel d'affichage. Tu peux ensuite surcharger à volonté la méthode "paint" de ton panel d'affichage perso.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Salut,

    Dsl mais je debute en java et je voit pas trop ce que tu veut que je fasse... Creer une nouvelle JPANEL qui contiendra juste mon message bienvenue sur yam 1.0? Si c'est ca je voit pas en quoi ca vas m'aider car la methode paint ne doit pas etre appele sinon ca me fou la merde... Faire une autre class juste pour cela avec ca propre methode paint???

    Sinon autre question : Je voudrais effacer les dessin que j'ai fais sur ma fenetre, y a t'il une methode qui s'occupe de ca?

    Merci pour tout

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    J'ai un peu bidouiller et pour ce qui est de l'effacement des drawString, on peut utiliser repaint de mon JPanel contenant les objet grahique. Le hic c'est que cela n'appelle pas la methode paint que j'ai defini...

    voila mon code : carre est mon JPanel. En fesant carre.repaint() j'efface bien tout mon JPanel carre mais qu'elle methode paint() cela appelle???

    J'ai un reel souci a comprendre le paint () et repaint().

    Merci d'eclairer ma lanterne.

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Bon je vpit qu'il n'y a pas grand monde pour m'aider.

    Je suis toujours sur mon problème et je vois vraiment pas comment cela fonctionne... Pourtant c'est simple ce que je veut faire et j'ai l'impression que java a zapper cette possibilité....

    Bon voilà ou j'en suis :

    En faite je veut faire un tirage aleatoire de 1-6 pour 5 chiffres. Les chiffres je veut ensuite les afficher sur une fenetre dans des carres dessiner avec la methodes drawRect et les chiffres avec la methode drawString. Le probleme, c'est qu'au depart cela fonctionne correctement au premier affichage. Mais ensuite, lorsque je lance un nouvelle envoie de 5 chiffres, les chiffres se superpose et ca devient un tas noir... Donc ma question est comment effacer les chiffres afficher pour les remplacer par d'autres ensuite sans se superposer?

    Pour cela, j'ai crée un JPanel carre contenant les dessin et les chiffres. Un JPanel ardoise qui contient les bouton de tirage et quitter. Maintenant le probleme et que lorsque je declare une methode paint() alors mes boutton ne sont pas dans ma fenetre a l'affichage et il faut que je passe avec ma souris dessus pour les faire apparaitre. (POURQUOI????)
    De plus, si je vire le paint() alors tout s'affiche normalement donc je clique sur mes bouton et lorsque j'utilise la methode repaint() alors cela ne fait rien. Il faut que j'utilise la methode carre.repaint() pour que cela s'efface mais voilà ca n'appelle pas la methode paint() declarer car ca appelle la methode paint() du Panel carre (Comment je peut l'atteindre celle la?????)

    Du coup je suis perdu et j'aimerais bien des explications sur le fonctionnement de paint et repaint parce que la je patoge serieux..

    Ah oui j'ai aussi essayé la methode paintComponent qui ne fonctionne que si on ne delcare pas paint() (POURQUOI???) Le hic c'est que dans cette methode des que je rentre dedans elle ne m'affiche rien de ce que je lui demande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void paintComponent(Graphics g){
    		super.paintComponent(g);
    		//g = carre.getGraphics();
    		g.setFont(titre);
    		g.drawString("BIENVENUE SUR YAM 1.0",10,50);
    		System.out.println("prob");
    		//afficheTitre(g);
    	}
    Voila comment elle est declarer et la seule chose qui est faite c'est l'affichage de prob dans ma fenetre Dos par contre le DrawString n'est pas effectuer (POURQUOI???)

    Voila le code complet :

    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
     
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.lang.*;
    import java.util.*;
     
     
    class yam extends JPanel implements ActionListener{
     
    	JPanel ardoise = new JPanel();
    	JPanel carre = new JPanel();
    	JPanel ensemble = new JPanel();
    	JButton b1 = new JButton ("Commencer");
    	JButton b3 = new JButton ("Tirage");
    	JButton b2 = new JButton ("Quitter");
    	Font titre = new Font("TimesRoman",Font.BOLD,25);
    	Font mafonte = new Font("TimesRoman",Font.BOLD,25);	
    	int coord [] = {29,89,149,209,269};
    	static Random r = new Random();
    	int i = 0;
     
    	yam() {
    		//setLayout(new FlowLayout());
    		setLayout(new BorderLayout());
    		ardoise.add(b1);
    		ardoise.add(b2);
    		ardoise.add(b3);
    		add(ardoise,BorderLayout.EAST);
    		add(carre,BorderLayout.WEST);
    		//add(ensemble);
    		carre.setLayout(new BorderLayout());
    		carre.setPreferredSize(new Dimension(400, 300));
    		//ensemble.setPreferredSize(new Dimension(700,500));
    		b1.addActionListener(this);
    		b2.addActionListener(this);
    		b3.addActionListener(this);
    	}
     
    	/*public void paint (Graphics g){
    		i++;
    		//g.setFont(titre);
    		//g.drawString("BIENVENUE SUR YAM 1.0",10,50);
    		//g.setFont(mafonte);
    		//g.setColor(Color.red);
    		//g.drawRect(10,100,50,50);
    		//g.drawRect(70,100,50,50);
    		//g.drawRect(130,100,50,50);
    		//g.drawRect(190,100,50,50);
    		//try {
    		//	Thread.sleep(500); 
    		//	} catch(InterruptedException f){ System.out.println("attention");} 
    		//g.drawRect(250,100,50,50);
    		//g.setColor(Color.black);
    		System.out.println(i);
    		//afficheChiffre(g,tirageChiffre());	
    	}*/
     
     
    	public void paintComponent(Graphics g){
    		//super.paintComponent(g);
    		//g = carre.getGraphics();
    		g.setFont(titre);
    		g.drawString("BIENVENUE SUR YAM 1.0",10,50);
    		System.out.println("prob");
    		//afficheTitre(g);
    	}
     
    	public void afficheTitre(Graphics g){
    		g.setFont(titre);
    		g.drawString("BIENVENUE SUR YAM 1.0",10,50);
    	}
     
    	public void afficheChiffre(Graphics g,int tab []){
    		g.setColor(Color.black);
    		g.setFont(mafonte);
    		for (int i = 0; i < 5; i++)
    			g.drawString(String.valueOf(tab[i]),coord[i],133);
     
    	}	
     
    	public int [] tirageChiffre (){
    		int chiffre [] = new int [5];
    		double tamp;
    		for (int i = 0; i < 5 ; i++){
    			tamp = Math.random() * 6 + 1;
    			chiffre[i] = r.nextInt(6) + 1;
    		}
    		return chiffre;
    	}		
     
    	public void actionPerformed (ActionEvent e){
    		Graphics g = carre.getGraphics();
    		if (e.getSource() == b1){
    			g.setColor(Color.red);
    			g.drawRect(10,100,50,50);
    			g.drawRect(70,100,50,50);
    			g.drawRect(130,100,50,50);
    			g.drawRect(190,100,50,50);
    			g.drawRect(250,100,50,50);
    			afficheChiffre(g,tirageChiffre());
    		}
    		if (e.getSource() == b2)
    			System.exit(0);
    		if (e.getSource() == b3) {
    			//repaint();
    			repaint(carre);
     
    		}
    	}
     
    	public static void main (String argv[]){
    		JFrame affiche = new JFrame();				
    		affiche.setContentPane(new yam());
    		affiche.pack();
    		affiche.setVisible(true); 
    	}
    }
    Si quelqu'un peut m'aider a comprendre ca serai cool car la je suis paumé de chez paumé....

    Merci

  6. #6
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    Salut,

    J'ai regardé ton code et j'ai fini par trouver, il est vrai que c'est bizarre l'histoire des boutons, voici le code corrigé :

    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 java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.lang.*;
    import java.util.*;
     
     
    class yam extends JPanel implements ActionListener{
     
    	JPanel ardoise = new JPanel();
    	JPanel carre = new JPanel();
    	JPanel ensemble = new JPanel();
    	JButton b1 = new JButton ("Commencer");
    	JButton b3 = new JButton ("Tirage");
    	JButton b2 = new JButton ("Quitter");
    	Font titre = new Font("TimesRoman",Font.BOLD,25);
    	Font mafonte = new Font("TimesRoman",Font.BOLD,25);	
    	int coord [] = {29,89,149,209,269};
    	static Random r = new Random();
    	int i = 0;
     
    	yam() {
    		setLayout(new BorderLayout());
    		b1.addActionListener(this);
    		b2.addActionListener(this);
    		b3.addActionListener(this);
    		ardoise.add(b1);
    		ardoise.add(b2);
    		ardoise.add(b3);
    		carre.setLayout(new BorderLayout());
    		carre.setPreferredSize(new Dimension(400, 300));
    		add(ardoise,BorderLayout.EAST);
    		add(carre,BorderLayout.WEST);
     
    	}
     
    	public void paint (Graphics g){
    		super.paint(g);
    		g.setFont(titre);
    		g.drawString("BIENVENUE SUR YAM 1.0",10,50);
    		g.setFont(mafonte);
    		g.setColor(Color.red);
    		g.drawRect(10,100,50,50);
    		g.drawRect(70,100,50,50);
    		g.drawRect(130,100,50,50);
    		g.drawRect(190,100,50,50);
    		try {
    			Thread.sleep(500); 
    			} catch(InterruptedException f){ System.out.println("attention");} 
    		g.drawRect(250,100,50,50);
    		g.setColor(Color.black);
     
    		afficheChiffre(g,tirageChiffre());	
    	}
     
     
    	public void afficheTitre(Graphics g){
    		g.setFont(titre);
    		g.drawString("BIENVENUE SUR YAM 1.0",10,50);
    	}
     
    	public void afficheChiffre(Graphics g,int tab []){
    		g.setColor(Color.black);
    		g.setFont(mafonte);
    		for (int i = 0; i < 5; i++)
    			g.drawString(String.valueOf(tab[i]),coord[i],133);
     
    	}	
     
    	public int [] tirageChiffre (){
    		int chiffre [] = new int [5];
    		double tamp;
    		for (int i = 0; i < 5 ; i++){
    			tamp = Math.random() * 6 + 1;
    			chiffre[i] = r.nextInt(6) + 1;
    		}
    		return chiffre;
    	}		
     
    	public void actionPerformed (ActionEvent e){
    		Graphics g = carre.getGraphics();
    		if (e.getSource() == b1){
    			this.paint(g);
    		}
    		if (e.getSource() == b2)
    			System.exit(0);
    		if (e.getSource() == b3) {
    			repaint();
     
    		}
    	}
     
    	public static void main (String argv[]){
    		JFrame affiche = new JFrame();				
    		affiche.setContentPane(new yam());
    		affiche.pack();
    		affiche.setVisible(true); 
    	}
    }

    Analyse des erreurs :

    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
     
    //Ton Paint
    	public void paint (Graphics g){
    		g.setFont(titre);
    		g.drawString("BIENVENUE SUR YAM 1.0",10,50);
    		g.setFont(mafonte);
    		g.setColor(Color.red);
    		g.drawRect(10,100,50,50);
    		g.drawRect(70,100,50,50);
    		g.drawRect(130,100,50,50);
    		g.drawRect(190,100,50,50);
    		try {
    		     Thread.sleep(500); 
    			} catch(InterruptedException f){              System.out.println("attention");} 
    		g.drawRect(250,100,50,50);
    		g.setColor(Color.black);
    		afficheChiffre(g,tirageChiffre());	
    	}
     
    J'ai ajouté super.paint(g) pour appeler le paint d'origine et là plus de problème de bouton
    public void paint (Graphics g){
    		super.paint(g);
    		g.setFont(titre);
    		g.drawString("BIENVENUE SUR YAM 1.0",10,50);
    		g.setFont(mafonte);
    		g.setColor(Color.red);
    		g.drawRect(10,100,50,50);
    		g.drawRect(70,100,50,50);
    		g.drawRect(130,100,50,50);
    		g.drawRect(190,100,50,50);
    		try {
    			Thread.sleep(500); 
    			} catch(InterruptedException f){ System.out.println("attention");} 
    		g.drawRect(250,100,50,50);
    		g.setColor(Color.black);
     
    		afficheChiffre(g,tirageChiffre());	
    	}
    Deuxième problème c'était tes chiffres qui se superposé :

    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
     
    		if (e.getSource() == b1){
    			g.setColor(Color.red);
    			g.drawRect(10,100,50,50);
    			g.drawRect(70,100,50,50);
    			g.drawRect(130,100,50,50);
    			g.drawRect(190,100,50,50);
    			g.drawRect(250,100,50,50);
    			afficheChiffre(g,tirageChiffre());
    		}
     
    En écrivant ça tu n'efface pas ce qu'il y avait avant il suffit de mettre
    		if (e.getSource() == b1){
    			this.paint(g);
    		}
    Voilà j'espère que tu réussira la suite de ton programme
    N'hésites pas à poser d'autres questions.

    A++

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Salut,

    je viens de tester et je te REMERCIE... Ca marche nickel.... Je me suis prit la tete pour 2 pauvres lignes

    Par contre j'aimerais bien comprendre le pourquoi du comment. La ligne super.paint(g) permet en faite d'appeler la fonction paint de la class JPanel? Pourquoi mon paint ne fesait pas la meme chose???

    En tout cas merci

  8. #8
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2008
    Messages : 43
    Points : 53
    Points
    53
    Par défaut
    Salut,

    En fait, la méthode paint non redéfinie "super.paint(g)", permet de redessiner les composant du contentPane, or quand tu redéfinis la méthode, tu ne redessines pas les composants "JButton" sans le "super.paint(g)".

    Alors pourquoi les boutons s'affiche quand on passe dessus?
    C'est simple la méthode paint() du bouton qui est actionné quand on passe la souris dessus et qui donc redessine le bouton.

    Voilà A++

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Ok merci pour la reponse

    Tchusss

Discussions similaires

  1. Problème d'affichage de boutons dans une Frame ayant une image en background
    Par felxio dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 13/08/2012, 14h35
  2. ajuster l'affichage des bouton dans une forme large
    Par tvcinq dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 30/09/2010, 17h56
  3. Affichage de logs dans une fenetre simple
    Par Dazdh dans le forum Tkinter
    Réponses: 1
    Dernier message: 05/12/2008, 12h09
  4. Affichage du graphisme dans une fenetre
    Par madiabd dans le forum Graphisme
    Réponses: 2
    Dernier message: 03/12/2008, 23h01
  5. Probleme d'affichage d'image dans une fenetre
    Par cgregueusse dans le forum MFC
    Réponses: 1
    Dernier message: 03/08/2005, 11h08

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