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 :

Fonction pour dessiner un rectangle


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Par défaut Fonction pour dessiner un rectangle
    Bonjour,

    J'aimerais dessiner plusieurs rectangles dans ma JFrame pour créer une frise.
    Après quelques recherches sur google, j'ai trouvé un code assez intéressant qui m'a permis de faire (presque) ce que je voulais :
    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
     
    import javax.swing.*;
    import java.awt.*;
    public class JCanvas extends JPanel {
     
            public void paint(Graphics g) {
     
                Color c = g.getColor();
     
                g.setColor(Color.GREEN);
                g.fillRect(0,0,1000,100); // x,Y,largeur,hauteur
     
                g.setColor(Color.BLUE);
                g.fillRect(100,0,10,100);
     
                g.setColor(c);
     
            }
     
    }
    Ce code me dessine donc bien mes rectangles mais je suis obligé de les rentrer "en dur" dans cette méthode. Or j'aimerais pouvoir créer mes rectangles au cas par cas.

    Je m'explique : Pour créer ma frise, je parcours un vecteur et pour chaque élément du vecteur je regarde le type et selon le type je crée un rectangle à une position donnée et d'une certaine couleur.

    Est il possible de créer une fonction dont on donne en paramètres la couleur du rectangle et ses coordonées et qui nous le dessine ?

    Merci de m'aider parce que je suis un peu paumé la

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (Foo foo : fooList) {
      Color color = ... // calcul de la couleur en fonction de foo.
      Rectangle rect = ... // calcul de la position et de la taille du rectangle en fonction de foo.
      g.setColor(color);
      g.fill(rect);
    }
    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

  3. #3
    Invité de passage
    Inscrit en
    Février 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 1
    Par défaut dessiner et deplacer une ligne
    salut
    je veux dessiner et deplacer une ligne dans une JPanel en java, qulqu'un peut m'aider.
    je sui perdue,
    merci d'avance.

  4. #4
    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
    Tout d'abords, ce n'est pas la peine d'ecire en gras et en super-gros pour qu'on remarque ton post et encore moins pour qu'on y reponde. Il te suffit d'ecrire correctement et simplement si besoin dans un nouveau topic approprie.

    Ensuite la classe suivante peut servir de squelette a etendre pour ce genre d'operations :

    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
    import java.swing.*
    import java.awt.*;
     
    public class DrawingPanel extends JPanel {
     
      /** Program entry point.
       * @param args Arguments from the command line.
       */
      public static void main(String... args) {
        SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            JFrame frame = new JFrame("Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new BorderLayout());
            frame.add(new DrawingPanel(), BorderLayout.CENTER);
            frame.setSize(500, 500);
            frame.setVisible(true);
          }
        });
      }
     
      /** {@inheritDoc}
       */
      @Override protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Dimension size = getSize();
        Insets insets = getInsets();
        int width = size.width - (insets.left + insets.right);
        int height = size.height - (insets.top + insets.bottom);
        Graphics2D g2d = (Graphics2D)g.create(insets.left, insets.top, width, height);
        try {
          drawSomething(g2d, width, height);
        }
        finally {
         g2d.dispose();
        }
      }
     
      /** Render what you want onscreen.
       * @param g The graphics context in which to draw.
       * @param width The width of the drawing area.
       * @param height The height of the drawing area.
       */
      private void drawSomething(Graphics2D g, int width, int height) {
        g.setColor(Color.BLUE);
        g.fillRect(50, 50, 100, 100);
        g.setColor(Color.RED);
        g.drawRect(100, 100, 100, 100);
      }
    }
    Pour le reste il te faudra lire la javadoc des classes et des methodes de rendu primitives contenues dans Graphics, Graphics2D ; la javadoc de classes du package java.awt.geom , et en option celles de java.awt.image (quand tu commenceras a connaitre le sujet). Dans un premier temps recherche des didacticiels, docs et livres sur Java2D.

    Pour dessiner une ligne deux choix :
    - la methode drawLine(int x1, int y1, int x2, int y2) de la classe Graphics.
    - la methode draw(shape forme) de la classe Graphics2D appliquee a une Line2D .

    Il est possible de recuperer les evenements de la souris sur le JPanel en y ajoutant un MouseListener et un MouseMotionListener (les classes Swing peut utiliser MouseInputListener a la place).

    Quand un clic est detecte dans le panel (mouseClicked()), il faut :
    - verifier si on a clique sur la ligne ou a proximite (comme la ligne n'a a priori qu'une seule dimension, il faut se laisser une marge d'erreur).
    - si on a clique dessus, sauvegarder le point de depart comme reference.

    Si la souris est deplacee (mouseMoved() ou mouseDragged()) et qu'il existe un point de reference :
    - calculer un differenciel de mouvement entre le point actuel et le point de reference.
    - Appliquer ce differenciel a la droite ou ses coordonnees (suivant ce qu'on utilise).
    - Repeindre le JPanel (en appelant repaint()).
    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

Discussions similaires

  1. Problème pour dessiner un rectangle
    Par acheo dans le forum C#
    Réponses: 2
    Dernier message: 15/06/2012, 12h11
  2. Classe pour dessiner un rectangle
    Par sohafarhat dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 15/06/2009, 17h46
  3. Afficher des pixels pour dessiner une fonction
    Par Sandro Munda dans le forum Linux
    Réponses: 7
    Dernier message: 13/05/2007, 11h58
  4. [debutant] Probleme pour dessiner un simple cube
    Par scorpiwolf dans le forum DirectX
    Réponses: 6
    Dernier message: 02/07/2003, 20h29
  5. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17

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