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

Composants Java Discussion :

[JLabel]fond transparent et probleme paintComponent


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut [JLabel]fond transparent et probleme paintComponent
    Bonjour,

    j'ai fais une application genre paint de window, quand je dessine un carré(je le dessine avec Graphics2D en faisant un drawnrect) et que je met un JLabel a coté, ca m'efface un bout du carré(celui qui est sur la meme ligne que mon JLabel). est ce que c'est possible de mettre un fond transparent a un JLabel? ou ca vient d'un autre probleme ?

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,
    Tu peux controler la transparence des couleurs, mais moi j'ai toujours eu des problèmes à donner une couleur de fond à mes JLabel.
    Essaie toujours de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monJLabel.setBackground(new Color(0, 0, 0, 0));      // un des deux est "noir totalement opaque"
    monJLabel.setBackground(new Color(0, 0, 0, 255));        // l'autre est "noir totalement transparent"
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    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 904
    Billets dans le blog
    54
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monLabel.setOpaque(false)
    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

  4. #4
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    bouye a raison, il ne faut jamais donner une couleur semi-transparente au fond d'un composant Swing sans preciser setOpaque(false). Dans le cas contraire tu auras de curieux artefacts visuels.

  5. #5
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    j'ai essayer de faire comme vous dites, mais ca ne marche tjs pas. je commence a croire que c'est a cause de mon dessin du rectangle, car quand je change de fenetre et que je reviens sur mon appli, il a disparu. (question bonus) vous savez comment faire pour qu'il ne parte pas?

    je le dessine comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Graphics2D g = (Graphics2D)getGraphics();
    g.drawRect(x, y, larg, haut);
    ma fenetre hérite de JPanel.

    j'ai pris un screenshot de mon appli : le dessin



    et quand je met le text :



    je met une largeur de 250 a mon JLabel, ca peut aussi venir de ca, mais comme le text plus etre plus ou moin grand et que je ne connais pas de moyen de regler la longueur du JLabel par rapport au text qu'il y a dedant, j'ai mis assez large.

  6. #6
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Il faut placer le dessin du rectangle dans la methode paintComponent(). Dans ton cas le dessin est efface car ta fenetre disparait en partie et Swing en redessine un bout avec paintComponent() qui elle ne connait pas ton rectangle.

  7. #7
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    Citation Envoyé par Gfx
    Il faut placer le dessin du rectangle dans la methode paintComponent(). Dans ton cas le dessin est efface car ta fenetre disparait en partie et Swing en redessine un bout avec paintComponent() qui elle ne connait pas ton rectangle.
    j'avais déja essayer de le mettre dans paintComponent(), mais ca ne m'affichais rien et j'ai trouver ce bout de code et ca marchais, donc j'ai pas chercher plus loin..

    j'ai ressayer avec paintComponent(), mais ca ne marche tjs pas. voici mon code en très abrégé :

    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
    public class Ecran extends JPanel implements MouseListener{
    	public Ecran(Etat etat, Grandeur grandeur, Envoi envoi, MainAppli app) {
    	}
    	public void mouseClicked(MouseEvent arg0) {
    		switch(choix){
    		case 'r' :
    			if(x == 0){
    				x = arg0.getX();
    				y = arg0.getY();
    				app.removeListener();
    			}
    			else{
    				xf = arg0.getX();
    				yf = arg0.getY();
    				app.ajoutListener();
    				add(new Rectangle());
    			}
    			break;
    		}
    	}
    	class Rectangle extends JPanel{
    		public void paintComponent(Graphics g){
    			super.paintComponent(g);
    			System.out.println("coucou");
    			g.setColor(Color.BLACK);
    			setVisible(true);
    			g.drawRect(x, y, xf-x, yf-y);
    		}
    	}
    }
    ca n'entre jamais dans mon paintComponent.

  8. #8
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    personne ne voit le probleme ?? j'ai toujours pas trouver..

  9. #9
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    c'est possible de mettre un JPanel dans un JPanel? peut etre ca vient de ca mon bug..

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Encore heureux que ce soit possible, sinon vois la misère que ce serait pour dev

  11. #11
    Membre éclairé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Par défaut
    salut Bacon

    Au lieu de mettre un JLabel pkoi tu ne dessines pas ton texte dans paintComponent() ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.drawString(String str, int x, int y)

  12. #12
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    Citation Envoyé par saod
    salut Bacon

    Au lieu de mettre un JLabel pkoi tu ne dessines pas ton texte dans paintComponent() ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.drawString(String str, int x, int y)
    salut chrichri !

    c'est que dès que je presse sur une touche, j'ajoute une lettre a mon JLabel. avec drawString j'avais essayer mais pas dans paintComponent(). mais j'arrive déja pas a entrer dans mon paintComponent pour faire un rectangle, donc voila.. si t'as un solution chrichri...

    tu me manques tu sais..

  13. #13
    Membre éclairé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Par défaut
    Citation Envoyé par ehmppowa
    tu me manques tu sais..
    lol... moi aussi je me manque !



    Citation Envoyé par ehmppowa
    mais j'arrive déja pas a entrer dans mon paintComponent pour faire un rectangle, donc voila.. si t'as un solution chrichri...
    Tu le fais comment ton rectangle alors ? dans paint(Graphics g) ??

  14. #14
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    Citation Envoyé par ehmppowa
    j'ai ressayer avec paintComponent(), mais ca ne marche tjs pas. voici mon code en très abrégé :

    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
    public class Ecran extends JPanel implements MouseListener{
    	public Ecran(Etat etat, Grandeur grandeur, Envoi envoi, MainAppli app) {
    	}
    	public void mouseClicked(MouseEvent arg0) {
    		switch(choix){
    		case 'r' :
    			if(x == 0){
    				x = arg0.getX();
    				y = arg0.getY();
    				app.removeListener();
    			}
    			else{
    				xf = arg0.getX();
    				yf = arg0.getY();
    				app.ajoutListener();
    				add(new Rectangle(x, y, xf, yf, envoi, ecran));
    			}
    			break;
    		}
    	}
    }
     
    class Rectangle extends JPanel{
    	int x, y, xf, yf;
    	Envoi envoi;
    	Ecran ecran;
    	public Rectangle(int x, int y, int xf, int yf, Envoi envoi, Ecran ecran){
    		this.x = x;
    		this.y = y;
    		this.xf = xf;
    		this.yf = yf;
    		this.envoi = envoi;
    		this.ecran = ecran;
    	}
    	public void paintComponent(Graphics g){
    		super.paintComponent(g);
    		System.out.println("coucou");
    		g.setColor(Color.BLACK);
    		setVisible(true);
    		g.drawRect(x, y, xf-x, yf-y);
    	}
    }
    ca n'entre jamais dans mon paintComponent.
    comme ca j'ai fait.. j'vois vraiment pas c'qui va pas.. m'enerve

  15. #15
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    Citation Envoyé par saod
    Citation Envoyé par ehmppowa
    mais j'arrive déja pas a entrer dans mon paintComponent pour faire un rectangle, donc voila.. si t'as un solution chrichri...
    Tu le fais comment ton rectangle alors ? dans paint(Graphics g) ??
    ah au début je faisais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Graphics2D  = getGraphics();
    g.drawRect(x, y, larg, haut);
    mais a cahque fois que je revenais sur ma fenetre, ca me l'enlevais.. c'est pour ca que je veux le mettre dans paintComponent.

  16. #16
    Membre éclairé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Par défaut
    Je pige pas trop ton code !!! il me semble bizard !!!



    Moi je ferais plutot comme ca:

    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
     
    /*
    *
    * Cette classe est le composants sur le quel
    * sera dessiner toutes tes formes
    *
    */
     
     
    public class Ecran extends JComponent {
     
        private ArrayList objAdessiner = new ArrayList();
     
     
        public void addObj(Dessine d) {
            objAdessiner.add(d);
            repaint();
        }
     
     
        public void paintComponent(Graphics g){
     
            super.paintComponent(g);
     
            for(int x=0; x<objAdessiner.size(); x++) {
     
                ((Dessine) objAdessiner.get(x)).dess(g);
            }
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public interface Dessine {
        public void dess(Graphics g);
    }

    Et pour dessiner quelque chose tu te crée un objet qui implemente Dessine... exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class UnCarrer implements Dessine {
     
        public void dess(Graphics g) {
     
            g.drawRect(x,y,l,h);
        }
    }

    Et pour introduire le carrer dans Ecran du utilise la méthode addObj(Dessine d) de la class Ecran...


    A tester... y a peut etre des erreurs, j'ai pas compilé !!!

  17. #17
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut


    oui...... j'ai pas tout compris.. mais j'vais essayer d'faire ca dans une ptite classe a coté pour voir c'que ca donne.. Merci mon chrichri..

  18. #18
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    Citation Envoyé par saod
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public interface Dessine {
        public void dess(Graphics g);
    }
    ca fait quoi ca?? ca sert a quoi? j'capte plus rien...

  19. #19
    Membre éclairé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Par défaut
    en gros: quand tu as une classe qui implements Dessine ca oblige a cette classe d'avoir la méthode dess(Graphics g) !!!

    comme ca dans la fonction Ecran.addObj(Dessine d) tu es certains que tout les objets que tu ajoutes auront la fonction dess(Graphics g) !!!

  20. #20
    Membre confirmé Avatar de ehmppowa
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 114
    Par défaut
    ah d'accord ! Merci, tout est clair maintenant. Merci

    Bisous

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Probleme avec drawstring sur fond transparent
    Par kakrocq dans le forum Framework .NET
    Réponses: 5
    Dernier message: 23/05/2008, 23h00
  2. Image avec fond transparent
    Par Virgile59 dans le forum Access
    Réponses: 3
    Dernier message: 16/09/2005, 11h48
  3. Rendre le fond transparent dans une picturebox
    Par fun31 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/01/2005, 18h17
  4. Image GIF a fond transparent dans un formulaire ?
    Par Coquelicot dans le forum IHM
    Réponses: 4
    Dernier message: 25/10/2004, 12h08
  5. [JButton] avec un fond transparent
    Par Tiercel dans le forum Composants
    Réponses: 6
    Dernier message: 23/09/2004, 09h19

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