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

AWT/Swing Java Discussion :

[Composant] Problème d'affichage avec une classe héritant de JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 18
    Points
    18
    Par défaut [Composant] Problème d'affichage avec une classe héritant de JPanel
    Bonjour,

    Je connais certaines bases d'AWT/SWING depuis un certain temps et j'ai essayé d'approfondir le côté graphique.

    Voici donc le code simplifié des deux classes sur lesquelles je m'entraîne.

    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
    import java.awt.*;
    import javax.swing.*;
     
    public class TestJFrame extends JFrame
    {
    	private TestJPanel testJPanel;
     
    	public TestJFrame()
    	{
    		setTitle("TestJFrame");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setResizable(false);
     
    		testJPanel = new TestJPanel(400,300);
     
    		JPanel panneauAffichage = new JPanel(new GridLayout(1,1));
    		panneauAffichage.add(testJPanel);
     
    		getContentPane().add(panneauAffichage);
    		pack();
    		setVisible(true);
    	}
     
    	public static void main(String[] args)
    	{
    		TestJFrame test = new TestJFrame();
    	}
    }
    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
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import javax.swing.*;
     
    public class TestJPanel extends JPanel implements ActionListener
    {
    	private int tailleX;
    	private int tailleY;
    	private JPanel panneauGraphique;
    	private Button boutonRepaint;
     
    	public TestJPanel(int tailleX,int tailleY)
    	{
    		this.tailleX = tailleX;
    		this.tailleY = tailleY;
     
    		panneauGraphique = new JPanel();
    		panneauGraphique.setPreferredSize(new Dimension(tailleX,tailleY));
     
    		boutonRepaint = new Button("Repaint");
    		boutonRepaint.addActionListener(this);
     
    		setLayout(new BorderLayout());
    		add(panneauGraphique);
    		add(boutonRepaint,BorderLayout.SOUTH);
    	}
     
    	public void actionPerformed(ActionEvent e)
    	{
    		repaint();
    	}
     
    	public void paint(Graphics graphique)
    	{
    		super.paint(graphique);
     
    		Graphics2D graphiquePanneau = (Graphics2D) panneauGraphique.getGraphics();
    		Rectangle2D rectangleTexte = graphiquePanneau.getFont().getStringBounds("Panneau Test",graphiquePanneau.getFontRenderContext());
    		Point pointMilieuGraphe = new Point(tailleX,tailleY);
     
    		graphiquePanneau.setColor(Color.BLACK);
    		graphiquePanneau.drawString("Panneau Test",tailleX/2-(int)rectangleTexte.getWidth()/2,tailleY/2-(int)rectangleTexte.getHeight()/2);
    		graphiquePanneau.dispose();
    	}
    }
    Mon problème est que lorsque j'exécute la classe TestJFrame, la fenetre s'affiche bien mais pas le texte "Panneau Test" !

    Appuyer sur le bouton "Repaint" ne permet pas non plus l'affichage du texte.

    En fait, pour que le texte s'affiche, il faut cacher la fenetre sur les côtés de l'écran puis la remonter...

    J'ai déjà essayé de remplacer paint par paintComponent et d'ajouter ou non l'appel à la méthode surchargée : toujours pas de texte !

    Je ne comprends pas ce qui ne va pas dans mon code, j'ai vraiment besoin de votre aide.

    Merci.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 279
    Points
    279
    Par défaut
    Déjà, une petite chose, dans ton actionPerformed(), tu souhaites faire un repaint() du JPanel quand tu appuies sur le bouton je suppose. Dans ce cas, utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void actionPerformed(ActionEvent e) {
            Object s = (JButton)e.getSource();
    	if((JButton)s == boutonRepaint)
    	{
                repaint();
    	}
        }
    Ca t'aidera peut être un peu.

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par womannosky Voir le message
    Déjà, une petite chose, dans ton actionPerformed(), tu souhaites faire un repaint() du JPanel quand tu appuies sur le bouton je suppose. Dans ce cas, utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void actionPerformed(ActionEvent e) {
            Object s = (JButton)e.getSource();
        if((JButton)s == boutonRepaint)
        {
                repaint();
        }
        }
    Ca t'aidera peut être un peu.
    Rien à voir, fils unique, dans le cas présent le problème n'est pas du tout là. (et accessoirement ce test ne changerait bien, vu qu'il n'y a un seul bouton)

    Il réside dans le fait que tu utilises dans la méthode paint (tu devrais plutôt redéfinir la méthode paintComponent vu que tu fais du Swing, la méthode paint ne devant pas être redéfinie sauf exception) des graphics obtenus par la méthode getGraphics au lieu de ceux présents en paramètres de la méthode.

    En l'occurrence quand tu fais de la customisation de composant Swing il ne fait jamais utiliser les Graphics fournis par la méthode getGraphics, mais ceux fournis en paramètre de la méthode paintComponent.

    ++
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    J'avais jamais vraiment fait attention à ce paramètre puisque cette méthode getGraphics() avait l'air de marcher tout le temps.

    Enfin, j'ai testé et ça marche impec' : merci beaucoup sinok !

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

Discussions similaires

  1. Problème d'affichage avec une nouvelle librairie
    Par reito dans le forum Struts 1
    Réponses: 0
    Dernier message: 22/07/2010, 12h22
  2. [WPF] Problème de binding avec une classe perso
    Par JuTs dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 12/04/2010, 18h45
  3. Problème d'héritage avec une classe abstraite
    Par Ph.denis dans le forum C++
    Réponses: 7
    Dernier message: 22/03/2008, 10h37
  4. Problème d'affichage avec une liste à puces
    Par Maxence45 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 09/07/2007, 21h09
  5. Réponses: 8
    Dernier message: 16/10/2006, 12h28

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