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 :

Dessiner avec Stylo


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Par défaut Dessiner avec Stylo
    Bonjour,

    J'essaye de faire un outil pinceau dans un logiciel de dessin. J'ai réalisé ce petit code, je stocke tous les points de la fonction dragged dans une liste et j'affiche des que l'utilisateur relâche le clique droit de la souris.
    Le résultat est satisfaisant qd on bouge doucement la souris, par contre dès que c'est rapide les points sont très écartés.


    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
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.util.LinkedList;
    import java.util.List;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class WhiteBoard extends JPanel implements MouseMotionListener, MouseListener{
     
    	LinkedList<Point> list = new LinkedList<Point>();
    	List<String> actionsEffectuees = new LinkedList<String>();
     
     
    	public WhiteBoard(){		
    		setLayout(new BorderLayout());	
    		addMouseListener(this);
    		addMouseMotionListener(this);
     
    	}
     
    	@Override
    	public void paint(Graphics g) {
    		// TODO Auto-generated method stub
    		super.paint(g);
     
    		for (int i=0; i<list.size(); i++){				
    				Point p1 = (Point) list.get(i);
    				g.setColor(Color.BLACK);
    				g.drawLine(p1.x, p1.y, p1.x, p1.y);
    			}
    	}
     
    	@Override
    	public void mouseDragged(MouseEvent e) {
    		list.add(e.getPoint());
    	}
     
     
    	@Override
    	public void mouseMoved(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
     
    	@Override
    	public void mouseClicked(MouseEvent e) {
     
    	}
     
     
    	@Override
    	public void mouseEntered(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
     
    	@Override
    	public void mouseExited(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
     
     
    	@Override
    	public void mousePressed(MouseEvent e) {
    		// TODO Auto-generated method stub
    		list.add(e.getPoint());
    	}
     
     
     
    	@Override
    	public void mouseReleased(MouseEvent e) {
    		// TODO Auto-generated method stub
    		repaint();
    	}
     
    	private static void createAndShowGUI() {
     
     
    		JFrame fen = new JFrame("WhiteBoard");	
    		WhiteBoard wb = new WhiteBoard();
    		fen.add(wb);
    		fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		fen.setSize(new Dimension(800,600));
    		fen.setVisible(true);		
    		fen.setLocationRelativeTo(fen.getParent());
    	}
     
    	public static void main(String[] args) {	
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
    	}
    }
    Avez vous une idée?

    Merci

  2. #2
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    Salut,
    Le problème vient du fait que tu dessines des points et non pas des lignes. Essaye cette version de paint:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void paint(Graphics g) {
            // TODO Auto-generated method stub
            super.paint(g);
     
            for (int i=0; i<list.size() - 1; i++){                
                    Point p1 = (Point) list.get(i);
                    Point p2 = (Point) list.get(i+1);
                    g.setColor(Color.BLACK);
                    g.drawLine(p1.x, p1.y, p2.x, p2.y);
                }
        }
    et ajoute repaint à mouseDragged afin d'éviter de voir le dessin en différé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void mouseDragged(MouseEvent e) {
            list.add(e.getPoint());
                    repaint();
        }

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    Salut,
    voici un lien vers des TP de dessin
    http://users.info.unicaen.fr/~charnois/AP2A/

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Par défaut
    Bonjour,

    J'ai testé ce code et il fonctionne très bien mais j'ajouterai une petite remarque: une ligne se trace à partir du point où on lache la souris jusqu'au point où l'on réappuye sur la souris. Voici ma redéfinition de la méthode paint() avec une condition en plus afin que cette ligne n'apparaisse plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void paint(Graphics g) {
            // TODO Auto-generated method stub
            super.paint(g);
     
            for (int i=0; i<list.size() - 1; i++){  
                if (!actionsEffectuees.get(i+1).equals("press"))
                {
                    Point p1 = (Point) list.get(i);
                    Point p2 = (Point) list.get(i+1);
                    g.setColor(Color.BLACK);
                    g.drawLine(p1.x, p1.y, p2.x, p2.y);
                }
            }
        }

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