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

 Java Discussion :

pb BufferedImage - programme dessin


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 69
    Par défaut pb BufferedImage - programme dessin
    Bonjour,

    J'ai fait un petit programme de Dessin basic et je souhaite utiliser un buffer pour eviter que quand je lance mon JColorChooser, ce qui a été dessiné soit éffacé.

    J'ai utiliser un BufferedImage avec paintComponent, mais cela ne fonctionne pas, de plus je le buffered image me fait une zone noir (volontairement définit à 300, 300 pour test ).

    Si quelqu'un pouvait m'aider a comprendre mon/mes erreur(s) .

    Merci d avance !

    voici le code :

    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.image.*;
     
    public class Dessin2 extends JFrame implements ActionListener {
     
     
      JMenuBar menuBar;
      JMenuItem couleur, effacer, quitter;
      Color defColor = Color.blue;
      static Color selectedColor;
      Graphics g;
     
     
      Dessin2(){
        super("Dessin2");
    		JPanel p = new JPanel();
    		p.setLayout(new BorderLayout());
    		Contenu contenu = new Contenu();
    		p.add(contenu);
    		getContentPane().add(p);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setSize(600, 600);
    		Dimension d1 = getToolkit().getScreenSize();
    		Dimension d2 = this.getSize();
    		setLocation(d1.width/2 - d2.width/2, d1.height/2 - d2.height/2);
    		setVisible(true);
     
     
       //barre de menu
       menuBar = new JMenuBar();
       this.setJMenuBar(menuBar);
     
       //menu Actions ( contener des autres menu et menuItems
       JMenu menu = new JMenu("Actions");
     
     
       //Menu 'Changer couleur'
       couleur = new JMenuItem("Changer couleur");
       couleur.addActionListener(this);
       menu.add(couleur);
     
       //Boutton Effacer
       effacer = new JMenuItem("Effacer");
       effacer.addActionListener(this);
       menu.add(effacer);
     
       //Boutton Quitter
       quitter = new JMenuItem("Quitter");
       quitter.addActionListener(this);
       menu.add(quitter);
     
       menuBar.add(menu);
      }
     
     
      //methode pour choisir la couleur
      public void chooseColor(){
       selectedColor = JColorChooser.showDialog(this, "Choose Background Color", defColor); 
      }
     
      //methode pour effacer le dessin
      public void efface(){
        repaint();
      }
     
      //Actions en fonctions des evenements
      public void actionPerformed(ActionEvent e){
        if(e.getSource().equals(this.couleur)) chooseColor();
        if(e.getSource().equals(this.effacer)) this.efface();
        if(e.getSource().equals(this.quitter)) System.exit(0);   
        }
     
      //---Methode Main---
      public static void main(String[] args){
      	Dessin2 dessin2 = new Dessin2();
     
      	}
     
    }
     
    //|| Class Contenu ||
     
    class Contenu extends JPanel implements MouseMotionListener {
     
    int xPrec, yPrec;
     
     // Buffering
      BufferedImage img = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB);
      Graphics imgGraph = img.getGraphics();
     
     // || Constructeur ||
      public Contenu(){
        addMouseMotionListener(this);
        setBackground(Color.white);   
        }
     
      //Listener d event de la souris
      public void mouseDragged(MouseEvent e){
       Graphics g = getGraphics();
       g.setColor(Dessin2.selectedColor);
       g.drawLine(xPrec, yPrec, e.getX(), e.getY());
     
       mouseMoved(e); 
      }
     
      //Listener de la position de la souris
      public void mouseMoved(MouseEvent e) {
       xPrec = e.getX();
       yPrec = e.getY(); 
      }
     
     
    //PaintComponent    
    public void paintComponent(Graphics g) {
      super.paintComponent(g);
    				g.drawImage(img, 0, 0, null);
    			}
    }

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 69
    Par défaut
    Personne pour m' aider ?
    J' ai encore cherche de mon cote mais sans resultats

    svp aidez moi. j' aimerais comprendre ce que je fais de faux

    P.S.
    (desole pour les accents mais je suis en clavier US en US int parfois les accents passent plus )

  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
    Lorsque tu crees une BufferedImage opaque, par defaut tous ses pixels sont noirs. Tu dois peindres ton fond en blanc (ou autre chose) apres sa creation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BufferedImage img = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB);
     
    ...
     
    Graphics2D g2d = img.createGraphics();
    try {
      g2d.setColor(Color.WHITE);
      g2d.fillRect(0, 0, img.getWidth(), img.getHeight());
    finally {
      g2d.dispose();
    }
    ou tu peux aussi creer une image transparente si tu preferes afficher la couleur de fond de ton panneau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage img = new BufferedImage(400, 300, BufferedImage.TYPE_INT_ARGB);
    Ensuite... bon... tu fais toujours un getGraphics() pour ton dessin donc tu ne dessines pas dans le Graphics que tu crois (deja avant ce n'etait pas la methode appropriee pour dessiner mais maintenant ca l'est encore moins...).

    Ne gardes pas non plus de reference sur le Graphics de l'image tu pourrait etre ammene a des fuites memoires...
    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
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 69
    Par défaut Merci !



    Merci beaucoup ! c'est exactement ce dont j avais besoin.

    Les explications et les détails code sont tip top

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

Discussions similaires

  1. Programme dessin automatisé sur AutoCAD
    Par Sapphire_chevrons dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/01/2014, 18h39
  2. Programme dessin automatisé sur AutoCAD
    Par FAZ_13 dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 07/07/2012, 18h16
  3. programme de dessin et paint()
    Par Lady dans le forum 2D
    Réponses: 6
    Dernier message: 07/11/2006, 02h28
  4. Réponses: 2
    Dernier message: 01/06/2006, 16h19
  5. Réponses: 10
    Dernier message: 31/01/2006, 11h36

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