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 :

canvas ou jpanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 18
    Par défaut canvas ou jpanel
    bonjour,

    1)Est ce qu'il y a une différence entre un Canvas et JPanel mis a part que l'une est de awt et l'autre de swing , ce que je veut dire c'est que pour dessiner est ce qu'un jpanel est mieux qu'un canvas????

    2)dans un canvas pour écrire du texte récupérer à partir du clavier je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Graphics g = getGraphics ();
    g.drawString(s,X,Y+nbl) // s un string
    Comment faire la même chose dans un JPanel

    merci d'avance

  2. #2
    Membre chevronné
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    Par défaut
    JPanel a pour but de remplacer le Canvas de awt (il n'y a pas de JCanvas d'ailleurs).

    Pour dessiner dans un JPanel tu dois surcharger la méthode paintComponent (au lieu de paint dans le cas du canvas).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      ... //ce qu tu veux...
    }
    Pour ce qui est du dessin dans une JPanel, c'est exactement comme dans un Canvas. Par contre si c'est pour simplement une String j'utiliserais un JLabel (mais c'est personnel peut être)

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 18
    Par défaut
    Bonsoir,
    merci
    pour dessiner c'est ok mais pour écrire je ne voit toujours pas comment ???

  4. #4
    Membre chevronné
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    Par défaut
    Pour écrire c'est de la même manière qu'avec un Canvas, tu utilise la méthode drawString du graphics de ton composant...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    g.setColor(Color.black);
    g.setFont(new Font("SansSerif",Font.PLAIN,10));
    g.drawString("ton texte",x,y);

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Citation Envoyé par Orian Voir le message
    JPanel a pour but de remplacer le Canvas de awt (il n'y a pas de JCanvas d'ailleurs).
    Ah bon ? Depuis quand ?

    Le Canvas a toujours son utilité, à l'heure d'aujourd'hui. Et si on devait garder un seul élément de AWT, ce serait celui-là !

    Le Canvas fait pour qu'on dessine dessus. Pourquoi ? Parce que c'est le seul élément vide. Il n'a que les événements minimaux et ne contient rien du tout. C'est pour ne pas gaspiller la mémoire. Mais alors, quelle est la vraie utilité du Canvas ? Typiquement, c'est sur lui qu'on dessine un jeu en 2D. Dès qu'on souhaite faire du plein écran, on devrait se tourner vers lui. Dès qu'on cherche à dessiner toute une interface (sans réutiliser les éléments de AWT/Swing, entendons-nous), il est préférable d'utiliser un Canvas.

    Un JPanel est, lui, réellement destiné à recevoir d'autres éléments graphiques de Java Swing. C'est ce qu'on appelle un conteneur, là où Canvas est un élément final, comme un bouton, un ascenseur, etc.

    D'ailleurs, suffit de lire la doc :
    JPanel : « JPanel is a generic lightweight container. »
    Canvas : « A Canvas component represents a blank rectangular area of the screen onto which the application can draw or from which the application can trap input events from the user. »

  6. #6
    Membre chevronné
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    Par défaut
    Tu a mal saisi ce que je voulait dire : JPanel remplace Canvas pour SWING, c'est pour ça que je précise qu'il n'y a pas de JCanvas... Je ne dis en rien que le Canvas est à mettre à la décharge, il est utile, mais si on travaille en AWT.
    En effet, il est préférable je pense de ne pas mélanger AWT et SWING, donc Canvas si on travaille en AWT mais JPanel si on est en SWING.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Sauf que le Canvas n'a PAS d'équivalent en Swing, ce n'est pas un oubli car le Canvas est le seul composant AWT recommandé pour Swing. Hormis ce composant, il ne faut effectivement pas mélanger AWT et Swing.

    Il faut toutefois l'utiliser à bon escient.

    Le JPanel, lui n'est nullement destiné à être redessiné. C'est un conteneur, c'est tout.

    Edit : pourquoi le Canvas serait-il présent sur cette page officielle du site de sun aux côtés de composants swing et d'aucun autre AWT ?

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Hormis des besoins tres specifiques pour dessiner en Swing, tu surcharges JComponent ou JPanel, c'est suffisant pour 99% des cas et c'est comme ca, c'est tout. C'est la METHODE RECOMMANDEE pour dessiner en Swing.

    Et avant que tu ne repondes davantage, n'importe quel Component ou JComponent a pour vocation a pouvoir etre un conteneur, c'est comme ca (meme une Canvas) c'est dans leur conception : ils heritent tous de Container...

    Alors pourquoi c'est indique comme ca ?

    Pre-Made UI Components
    [...]
    Drawing areas (java.awt.Canvas)
    [...]
    Car avec une Canvas on peut creer une BufferStrategy qui est utile quand on veut directement dessiner dans la memoire de la carte video, ce qui est franchement utile dans 1% des cas. Et ca on ne peut pas le faire avec un JComponent (la methode existe dans Component mais est package protected, elle est uniquement publique dans Canvas).
    Mais, si tu sais correctement faire un rendu en Swing tu peux t'en passer.

    Encore une fois, GENERALEMENT, melanger AWT et Swing c'est MAL. CEPENDANT, et TRES RAREMENT, il est parfois necessaire de le faire.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Pourtant...

    Citation Envoyé par dingoth Voir le message
    Le JPanel, lui n'est nullement destiné à être redessiné. C'est un conteneur, c'est tout.
    En gros : JPanel = JComponent opaque + bonnes options d'accessibilite.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/06/2014, 16h26
  2. Insérer ChartPanel dans un Jpanel ou canvas ou Jlabel
    Par harris_macken dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 29/04/2008, 15h12
  3. Timage et Canvas??
    Par vanack dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/04/2007, 11h38
  4. [Canvas] Listbox, couleur et multiselect
    Par rbag dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/09/2002, 13h02
  5. Réponses: 2
    Dernier message: 17/05/2002, 20h37

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