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 :

Remplir une forme de plusieurs points


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Par défaut Remplir une forme de plusieurs points
    Salut à tous !

    Je veux créer un outil similaire au pot de peinture qu'on retrouve dans Paint (par ex), mais en plus complexe !

    Le but est de remplir une forme (non standard, càd pas un carré/rectangle/cercle) par une couleur.
    La forme est délimitée par plusieurs points : 3 au minimum (triangle) et une "infinité".

    Existe-t-il des méthodes pour pouvoir réaliser cela ?
    Ou le cas échéant, quelle est la meilleure technique pour le faire ?

    Merci

  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
    Il te faut faire du java2d en te basant sur la classe Graphics2D. Cette classe possède les méthode draw et fill qui prennent en paramètre un objet implémentant l'interface Shape. Il existe de fait des objets pré existants implémentant cette interface comme Rectangle2D, Ellpse2D, Line2D, Polygon, GeneralPath et autres.

    Il te suffit donc dans ton interface de stocker les formes déjà présentes dans ton dessin et leur emplacement, puis de récupérer la forme se trouvant au point de coordonnée (x,y) et de spécifier que la forme est remplie ou non.

    Genre avoir un objet de ce genre.

    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
     
     
    package swing.ui;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Point;
    import java.awt.Shape;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.List;
     
    import javax.swing.JComponent;
     
    public class MyShape {
     
        private Shape shape;
        private boolean filled;
        private Color fillColor;
     
     
        public MyShape(Shape shape, boolean filled, Color fillColor) {
            super();
            this.shape = shape;
            this.filled = filled;
            this.fillColor = fillColor;
        }
        /**
         * @return the shape
         */
        public Shape getShape() {
            return shape;
        }
        /**
         * @param shape the shape to set
         */
        public void setShape(Shape shape) {
            this.shape = shape;
        }
        /**
         * @return the filled
         */
        public boolean isFilled() {
            return filled;
        }
        /**
         * @param filled the filled to set
         */
        public void setFilled(boolean filled) {
            this.filled = filled;
        }
     
        /**
         * @return the fillColor
         */
        public Color getFillColor() {
            return fillColor;
        }
        /**
         * @param fillColor the fillColor to set
         */
        public void setFillColor(Color fillColor) {
            this.fillColor = fillColor;
        }
     
     
    }
    Et le composant associé:

    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
    package swing.ui;
     
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.geom.Rectangle2D;
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.JComponent;
    import javax.swing.JFrame;
     
    public class MyComponent extends JComponent implements MouseListener {
        private List<MyShape> shapes;
     
        public MyComponent() {
            this.addMouseListener(this);
            shapes = new ArrayList<MyShape>();
        }
     
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();
            for (MyShape myShape : shapes) {
                g2d.setColor(myShape.getFillColor());
                if (myShape.isFilled()) {
                    g2d.fill(myShape.getShape());
                } else {
                    g2d.draw(myShape.getShape());
                }
            }
            g2d.dispose();
        }
     
        @Override
        public void mouseClicked(MouseEvent arg0) {
            for (MyShape myShape : shapes) {
                if (myShape.getShape().contains(arg0.getX(), arg0.getY())) {
                    myShape.setFilled(true);
                    repaint();
                }
            }
     
        }
     
        @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 arg0) {
            // TODO Auto-generated method stub
     
        }
     
        @Override
        public void mouseReleased(MouseEvent arg0) {
            // TODO Auto-generated method stub
     
        }
     
        public void addShape(MyShape myShape) {
            shapes.add(myShape);
        }
     
        public static void main(String[] args) {
            MyComponent c = new MyComponent();
            c.addShape(new MyShape(new Rectangle2D.Float(20, 20, 60, 50), false, Color.RED));
            JFrame f = new JFrame();
            f.add(c);
            f.setSize(400, 300);
            f.setLocationRelativeTo(null);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setVisible(true);
        }
     
    }

    @+

Discussions similaires

  1. Remplir une table avec plusieurs formulaires
    Par morgane32 dans le forum IHM
    Réponses: 1
    Dernier message: 08/05/2009, 12h19
  2. Remplir une forme crée avec un polygon
    Par declencher dans le forum Débuter
    Réponses: 2
    Dernier message: 03/01/2009, 16h17
  3. [Psp ou Photoshop] texte pour remplir une forme
    Par pasq2004 dans le forum Imagerie
    Réponses: 0
    Dernier message: 17/11/2008, 13h33
  4. remplir une forme automatique en excel
    Par viaman dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/07/2007, 13h27
  5. Réponses: 3
    Dernier message: 23/02/2006, 15h17

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