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 :

Réafficher le dessin avec un booléen


Sujet :

2D Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Par défaut Réafficher le dessin avec un booléen
    Bonjour à tous,

    mon 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
        PointSouris = new Point2D.Float(sourisXdetect, sourisYdetect);
        Shape ShapeDetect;
        boolean survol=false;
    try{
        for (int i=0; i<=ListDetectionElements.size()-1;i++){
              ShapeDetect=(Shape)ListDetectionElements.get(i);
           if(ShapeDetect.contains(PointSouris)){
               Dessin.AfficherDessin();// affichage du dessin d'origine
               NumeroPLusProche=i;
               g2c.fill(ShapeDetect); //affichage shape trouvee
               survol=true;
               break;
           }
           else{ survol=false;
           }
         }//du for i
     
        if (survol){Dessin.AfficherDessin();// affichage du dessin d'origine
                       survol=false;}
     
        g2c.dispose(); gc.dispose();
      }catch(Exception err) {System.out.println(err); err.printStackTrace();}
    je détecte une ligne à l'écran par un simple survol de ma souris.

    le dessin d'origine est affiché et la ligne trouvée est affichée.

    je souhaiterai que mon dessin d'origine se réaffiche dès qu'il n'y a pas de ligne sous la souris.
    je pourrai réafficher dans mon "else" mais c'est très lourd, réafficher le dessin à chaque déplacement.
    c'est pourquoi, j'ai pensé à un "boolean" mais la ligne s'affiche et disparait
    normal car mon survol est à true.

    auriez-vous une idée ?

    Amicalement,
    DMF

  2. #2
    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
    Sur quoi dessines tu?

    D'où viennent les graphics que tu utilises?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Par défaut
    Bonjour Sinok,

    Je dessine sur un canvas.

    Mon "dessin d'origine" est un fichier png que je viens afficher dans mon canvas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    Image = ImageIO.read(new File("./data/dessin.png"));
                    Image.flush();
                    g2c.drawImage(Image, 0, 0, canvas1);
    merci pour ton aide,
    DMF

  4. #4
    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
    Comment l'affiches tu sur ton canvas?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Par défaut
    Simplement avec le bout de code que je viens de mettre.

  6. #6
    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
    Il se trouve dans quelle méthode ce bout de code?

    Si tu ne me fournis pas assez d'infos je vais avoir du mal à t'aider...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Par défaut
    Dans le mousemove du canvas, j'ai le premier code.

    J'accède à l'affichage du dessin en appelant la class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dessin.AfficherDessin();
    qui contient le 2ème code

    Je mis prend surement mal.

    DMF

  8. #8
    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
    Alors, pour faire simple.

    Toute opération de dessin dans un composant Swing (héritant de JComponent) doit être réalisée dans sa méthode paintComponent

    Toute opération de dessin dans un composant AWT(héritant de Component) doit être réalisée dans sa méthode paint

    Donc on doit créer une classe héritant du composant sur lequel on veut dessiner, et redéfinir la méthode adéquate. En utilisant bien sûr les Graphics fournis en paramètre de la méthode.

    Exemple pour un JPanel avec une image de fond et sur lequel on dessine une ligne horizontal à chaque clic:

    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
     
    package swing.painting;
     
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Shape;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.geom.Line2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class ImagePanel extends JPanel{
     
    	private BufferedImage im;
    	private List<Shape> shapes;	
    	private Color lineColor = Color.yellow.brighter().brighter();
     
    	public ImagePanel(BufferedImage im) {
    		super();
    		this.im = im;
    		shapes = new ArrayList<Shape>();
    		this.addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				// TODO Auto-generated method stub
    				super.mouseClicked(e);
    				int verticalPosition = e.getPoint().y;
    				shapes.add(new Line2D.Float(0,verticalPosition,getWidth(),verticalPosition));
    				repaint();
    			}		
    		});
    	}
     
    	@Override
    	public Dimension getPreferredSize() {
    		// TODO Auto-generated method stub
    		return new Dimension(im.getWidth(),im.getHeight());
    	}
     
     
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		g.drawImage(im,0,0,null);
    		//Creation d'un contexte graphique temporaire
    		Graphics2D g2d = (Graphics2D) g.create();
    		g2d.setPaint(lineColor);
    		for(Shape s : shapes) {
    			g2d.draw(s);
    		}
    		//finalisation du contexte temporaire
    		g2d.dispose();
    	}
     
    	public static void main(String[] args) {
    		try {
    			BufferedImage im = ImageIO.read(ImagePanel.class.getResource("/res/img/bubble/bubble.png"));
    			ImagePanel p = new ImagePanel(im);
    			JFrame f = new JFrame();
    			f.add(p);
    			f.pack();
    			f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    			f.setLocationRelativeTo(null);
    			f.setVisible(true);
     
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    	}
    }

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Par défaut
    Merci Sinok,

    je vais regarder ton exemple

    DMF

Discussions similaires

  1. Dessiner avec wxWidgets
    Par SuperPat dans le forum wxWidgets
    Réponses: 5
    Dernier message: 24/02/2009, 00h06
  2. Le dessin avec VC dans une fenetre windows
    Par ccensam dans le forum MFC
    Réponses: 3
    Dernier message: 03/11/2005, 23h40
  3. Création dessin avec données saisies
    Par javajay dans le forum 2D
    Réponses: 5
    Dernier message: 26/10/2005, 02h55
  4. Réponses: 1
    Dernier message: 26/02/2005, 12h55

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