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

2D Java Discussion :

[Graphic] Dessiner et transparence


Sujet :

2D Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut [Graphic] Dessiner et transparence
    Bonjour,
    Voilà mon problème. J'ai un JPanel dans lequel je dessine. Mon JPanel se trouve dans une JFame avec un JSlider.
    Jusque là pas de problème.
    Seulement je voudrais que mon JSlider puisse modifier la transparence.
    Exemple : je décine un cercle bleu et je joue avec mon JSlider pour le faire apparaitre, disparaitre, apparaitre...

    J'ai déjà trouver des idées sur le forum mais elle passe par l'utilisation d'un image (png ou gif). Ce qui n'est pas pratique.

    Si quelqu'un peut m'aider

  2. #2
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 102
    Points : 156
    Points
    156
    Par défaut
    Facile :
    si on définit transparency comme un float autorisé à aller de 0 à 1.0 : pour 0, transparence totale : le cercle est invisible;
    pour 1.0f, aucune transparence : le cercle est plein. Il ne reste plus qu'à associer la variable à ton slider.

    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
     
    float transparency ;
    public void paint(Gaphics g)
    {
       Graphics2D g2 = (Graphics2D) g ;
       g.setComposite(java.awt.AlphaComposite.getInstance(
                    java.awt.AlphaComposite.SRC_OVER,Math.min(
                        transparency,
                        1.0f ) )) ;
     
      g.draw(...);
     
     
      // Restaurer la transparence par défaut.
     
      g.setComposite(java.awt.AlphaComposite.getInstance(java.awt.AlphaComposite.SRC_OVER,1.0f));
     
    }
    A+
    Hery

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Merci pour ta réponse je vais essayé ca tout de suite. Si ca marche (je suppose). Je ferai signe

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    C'est encore moi, bon l'idée est très bonne mais j'ai encore un problème. En fait j'affiche une image (screen.jpg 400*400 pixels) et un rectangle que je dessine. Et ca marche à moitier. Le rectangle apparait et disparait quand je joue avec mon JSlider. Seulement l'image... NON ! Et il y a un bug d'affichage avec mon JSlider.
    Le problème doit venir en partie dans la manière dont je construis et affiche mon image mais en Graphics2D je ne suis pas très à l'aise (je ne m'en suis jamais servi).
    Si quelqu'un peut me dire ce qui ne va pas dans mon code j'en serais ravi
    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
     
    import javax.swing.*;
    import java.awt.*;
    import javax.swing.event.*;
     
     
     
    public class Transparence extends JFrame implements ChangeListener {
     
    		MonPanel panel = new MonPanel();
    		Container con = new Container();
    		GridBagLayout border = new GridBagLayout();
    		GridBagConstraints constraints = new GridBagConstraints();
    		JSlider slide;
     
    	public Transparence () {
     
    		this.setTitle("Transparence");
     
    		slide = new JSlider(JSlider.HORIZONTAL,0,10,2);
    		slide.setMajorTickSpacing(5);
    		slide.setMinorTickSpacing(1);
    		slide.setPaintTicks(true);
            slide.addChangeListener(this);
     
    		con = this.getContentPane();
    		con.setLayout(border);
     
    		constraints.gridx = 0;
    		constraints.gridy = 0;
    		constraints.fill = constraints.HORIZONTAL;
    		border.setConstraints(slide,constraints);
    		con.add(slide);
     
    		constraints.gridx = 0;
    		constraints.gridy = 1;
    		constraints.fill = constraints.NONE;
    		border.setConstraints(panel,constraints);
    		con.add(panel);
     
    		this.pack();
    		this.setResizable(false);
    		this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
    		this.show();
     
    		panel.revalidate();
     
     
    	}
     
    	public void stateChanged(ChangeEvent e) {
     
    		float num = (new Integer(slide.getValue()).floatValue())/10;
    		System.out.println(num);
    		panel.transparency = num;
    		panel.revalidate();
    		panel.repaint();
     
    	}
     
    	public static void main (String args[]) {
     
    		try {
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    		    }
    		catch (Exception ee) {}
    		new Transparence();
     
    	}
     
    }
     
    class MonPanel extends JPanel {
     
    	private Image image = null;
    	public float transparency = 0.1f;
     
    	public MonPanel () {
     
    		super();
    		image = Toolkit.getDefaultToolkit().getImage("./screen.jpg");
    		MediaTracker tracker=new MediaTracker(this);
    		tracker.addImage(image,0);
    		try{
    			tracker.waitForID(0);
    		}
    		catch(Exception e){}
    		this.setPreferredSize(new Dimension(400,400));
     
    	}
     
     
    	public void paint(Graphics g)
    	{
    		Graphics2D g2 = (Graphics2D) g;
    		g2.setComposite(java.awt.AlphaComposite.getInstance(java.awt.AlphaComposite.SRC_OVER,Math.min(transparency,1.0f)));
    	  	g2.draw(new Rectangle(100,100,20,20));
    	  	g2.drawImage(image,0 ,0, image.getWidth(null), image.getHeight(null), null);
     
    		// Restaurer la transparence par défaut.
    	  	//g2.setComposite(java.awt.AlphaComposite.getInstance(java.awt.AlphaComposite.SRC_OVER,1.0f));
    	}
     
    }

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Bon amen ca marche j'ai modifier deux trucs et ca marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void stateChanged(ChangeEvent e) {
         float num = (new Integer(slide.getValue()).floatValue())/10;
         System.out.println(num);
         panel.transparency = num;
         this.repaint();
    }
    et aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void paint(Graphics g) {
         Graphics2D g2 = (Graphics2D) g;
         g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,Math.min(transparency,1.0f)));
         g2.drawImage(image,new AffineTransform(),null);
         g2.draw(new Rectangle(100,100,20,20));
    }
    Pour la méthode paint j'ai compris mon erreur en relisant l'API. Par contre je ne vois pas pour quoi je dois appeler "this.repaint()" au lui de "panel.repaint()". Là j'aimerai bien avoir une petite lecon de java avant de clore ce sujet

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Ok je viens de comprendre le this.repaint()... La fatigue surement

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

Discussions similaires

  1. Graphics - Dessiner sur une image
    Par Theka dans le forum C#
    Réponses: 6
    Dernier message: 12/11/2009, 12h19
  2. [Asphyre] Dessiner en transparence
    Par chipster45 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 22/01/2008, 20h30
  3. [mapEditor] [graphic] dessiner une grille
    Par krokmitaine dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 25/05/2006, 09h18
  4. [Graphic] Dessiner des hachures
    Par sylverspoon dans le forum 2D
    Réponses: 7
    Dernier message: 22/03/2006, 21h46
  5. Réponses: 2
    Dernier message: 16/07/2005, 08h12

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