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 :

rendre une image transparente


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 22
    Points : 16
    Points
    16
    Par défaut rendre une image transparente
    bonjour,

    je dispose d'une image en fond de JFrame(dans un JPanel) voici la classe qui me permet de créer une image elle hérite de JComponent;
    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
     
    import javax.swing.*; 
    import java.awt.*; 
    import java.awt.image.*; 
     
    public class JPanelImageBg extends JComponent
    {
     
    		private BufferedImage bufferedImage; 
     
     
    	JPanelImageBg( String fileName)
    	{
    		this.bufferedImage = this.toBufferedImage(Toolkit.getDefaultToolkit().getImage(fileName));
     
    	} 
     
    	public void paintComponent(Graphics g)
    	{	
    				g.setColor(this.getBackground());
    				g.fillRect(0,0,getWidth(), getHeight() );
    				g.drawImage(bufferedImage,(getWidth()-bufferedImage.getWidth())/2,(getHeight()-bufferedImage.getHeight())/2,null);
    	}
     
     
    	private BufferedImage toBufferedImage(Image image)
    	{	image = new ImageIcon(image).getImage(); 
     
    		BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); 
    		Graphics g = bufferedImage.createGraphics(); 
     
    		g.setColor(Color.black); 
    		g.fillRect(0, 0, image.getWidth(null), 
    		image.getHeight(null)); 
    		g.drawImage(image, 0, 0, null); 
    		g.dispose(); 
    		return bufferedImage; 
    	}
     
    }
    je n'ai plus qu'à ajouer une image à mon JPanel de la manière suivante:

    JPanelImageBg jpim= new JPanelImageBg("image.jpg");
    JPanel image = new JPanel(new BorderLayout());
    image.add(jpim,BorderLayout.CENTER);

    -> ok1 problème

    mais maintennat si je veux disposer sur cette image des icones ou des JButton, enfin, d'autres composants graphiques comment faire?

    j'avai penser ajouter mes autres composants :
    image.add(composants ou JPanel qui contient des composants,BorderLayout.CENTER)
    mais bien sur l'image n'est plus visible car j'ajoute par dessus un autre JPanel qui l'écrase

    Bref, tout en voyant l'image j'aimerais pouvoir utiliser mes JButton qui sont dessus.... je sais que cela est faisable sur une JFrame(en mettant l'image dans le contentPane et en ajoutant des JPanel comme on veut par dessus mais j'ai absolument besoin de le faire sur un JPanel car ce JPanel se trouve dans un JTabbedPane...
    Merci :-)

  2. #2
    iuz
    iuz est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Points : 110
    Points
    110
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monComposant.setOpaque(false);
    pour chaque composant sur l'image

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    marche pas j'avais déjà essayé ... :-(
    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
     
    import java.awt.BorderLayout;
    import javax.swing.*;
     
    public class Test extends JFrame
    {
    Test(String titre)
    	{	
    		super(titre);
     
     
    	  	    JPanelImageBg jpim= new JPanelImageBg("image.jpg");
    	  	    JPanel image = new JPanel(new BorderLayout());
    	  	    image.add(jpim,BorderLayout.CENTER);
     
    	        JButton b1 = new JButton("test");
    			b1.setOpaque(false);
    		   image.add(b1,BorderLayout.CENTER);
     
    		    this.getContentPane().add(image);
    		    this.setSize(1024,768);
    		    this.setVisible(true);
    		    this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);	
    		}
    	public static void main( String[] argv )
    	{	
    		Test jp= new Test("APPLI");
    	}
    }
     
    l'image est écrasée par le bouton :-(
    Est ce que quelqu'un peut me dire quele est l'erreur que je fai? :-(
    et je ne souhaite pas utiliser le setContentPane , ici je teste dnas une JFrame mais le but est de le faire dans un JPanel donc pas de ContentPane

    Merci

  4. #4
    Membre confirmé
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Points : 630
    Points
    630
    Par défaut
    Hello.

    Je pense qu'il te faut une image de type ARGB au lieu de RGB...

    ++
    Glob
    What would you do if you were not afraid?

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Merci Glog et iuz mais,

    j'ai modifié ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
    et malheuresement j'ai le même résultat...

  6. #6
    iuz
    iuz est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Points : 110
    Points
    110
    Par défaut
    il faut donner un layout à jpim, et placer ton bouton dedans, pas dans image
    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
    import java.awt.BorderLayout;
    import javax.swing.*;
     
    public class Test extends JFrame {
      Test(String titre) {
        super(titre);
     
        JPanelImageBg jpim= new JPanelImageBg("fondJoueurs.jpg"); 
        jpim.setLayout(new BorderLayout()); <------
        JPanel image = new JPanel(new BorderLayout()); 
        image.add(jpim,BorderLayout.CENTER); 
     
        JButton b1 = new JButton("test"); 
        b1.setOpaque(false); 
        jpim.add(b1,BorderLayout.CENTER); <------------
     
        this.getContentPane().add(image);
        this.setSize(1024,768);
        this.setVisible(true);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      }
     
      public static void main( String[] argv ) {
        Test jp= new Test("APPLI");
      }
    }

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Nickelchrome iuz!!

    Merci d'avoir trouvé mon erreur

    tu es mon sauveur :-) :-) :-)

    encore merci

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

Discussions similaires

  1. Comment rendre une picturebox transparente ?
    Par AsmCode dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 29/07/2006, 07h16
  2. rendre une image flottante
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/06/2006, 09h04
  3. Comment rendre une form transparente à certains endroits ?
    Par ludo5532 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 21/08/2005, 15h28
  4. rendre une image transparente
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 12/06/2005, 13h53

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