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 :

Insérer un cercle sur un dessin


Sujet :

2D Java

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2017
    Messages : 35
    Par défaut Insérer un cercle sur un dessin
    Bonjour groupe. Je travaille avec NetBeans et j'aimerais afficher un cercle noir (50 pixels x 50 pixels) sur une carte géographique en cliquant sur le bouton #1 (voir exemple ci-dessous).

    Nom : exemple1.jpg
Affichages : 981
Taille : 116,2 Ko

    J'ai trouvé plein du tuto qui me fait apparaître mon cercle partout et je comprend le fonctionnement. Malheureusement, pas capable d'afficher un cercle dans ma fenêtre. Voici 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
    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
     
     
    import java.awt.*;
    import javax.swing.*;
     
    public class fenetre extends javax.swing.JFrame {
     
        public fenetre() {
            initComponents();
     
        }
     
     
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            jButton1 = new javax.swing.JButton();
            jButton2 = new javax.swing.JButton();
            jButton3 = new javax.swing.JButton();
            jLabel1 = new javax.swing.JLabel();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setTitle("Insérer un cercle");
            setPreferredSize(new java.awt.Dimension(1148, 768));
            setResizable(false);
            setSize(new java.awt.Dimension(0, 0));
            getContentPane().setLayout(null);
     
            jButton1.setText("Afficher la ville #1");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });
            getContentPane().add(jButton1);
            jButton1.setBounds(920, 20, 200, 60);
     
            jButton2.setText("Afficher cercle #2");
            getContentPane().add(jButton2);
            jButton2.setBounds(920, 100, 200, 60);
     
            jButton3.setText("Afficher cercle #3");
            jButton3.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton3ActionPerformed(evt);
                }
            });
            getContentPane().add(jButton3);
            jButton3.setBounds(920, 180, 200, 60);
     
            jLabel1.setIcon(new javax.swing.ImageIcon("P:\\Essm_Codage_prof\\Travaux\\Stéphan\\comptearebours\\insertCercle\\src\\images\\canada56.gif")); // NOI18N
            jLabel1.setText("jLabel1");
            getContentPane().add(jLabel1);
            jLabel1.setBounds(0, -180, 1140, 920);
     
            pack();
            setLocationRelativeTo(null);
        }// </editor-fold>                        
     
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
        }                                        
     
        private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            // TODO add your handling code here:
        }                                        
     
     
        public static void main(String args[]) {
     
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(fenetre.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(fenetre.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(fenetre.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(fenetre.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
     
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new fenetre().setVisible(true);
                }
            });
        }
     
        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JButton jButton2;
        private javax.swing.JButton jButton3;
        private javax.swing.JLabel jLabel1;
        // End of variables declaration                   
    }

    Où mettre ce 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
     
    class Cercle 
    { 
       Point centre; 
       int rayon; 
     
       Cercle(int x, int y, int r) 
       { 
            centre = new Point(200,200); 
            rayon = 25; 
       } 
     
       void dessiner(Graphics g) 
      1 
      { 
            g.drawOval(centre.x - rayon, centre.y - rayon, 2*rayon, 2*rayon); 
      } 
    }
    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu utilises un JLabel pour dessiner ton image, donc pas possible d'afficher autre chose directement.

    Il y a plusieurs solutions :

    1. Redéfinir la méthode paintComponent. Normalement, il ne faudrait pas modifier la classe JLabel parce que c'est un composant préféfini avec une UI, dont l'affichage est géré par un composant d'UI, c'est faisable, mais ça pourrait ne pas fonctionner selon le look and feel, ou mal. Le mieux serait d'utiliser un JPanel et d'afficher l'image dans le fond, avec un drawImage.
      En gros, avec un JLabel :
      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
      		class CercleLabel extends JLabel {
      			List<Cercle> cercles = new ArrayList<>();
      			public CercleLabel(ImageIcon image) {
      				super(image);
      			}
       
      			public void add(Cercle cercle) {
      				cercles.add(cercle);
      				repaint();
      			}
       
      			@Override
      			protected void paintComponent(Graphics g) {
      				super.paintComponent(g);
      				g.setColor(Color.RED);
      				for(Cercle cercle : cercles) {
      					cercle.dessiner(g);
      				}
      			}
       
      		}
      Avec un JPanel :
      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
      		class CerclePanel extends JPanel {
      			Image image;
      			List<Cercle> cercles = new ArrayList<>();
      			public CerclePanel(BufferedImage image) {
      				this.image=image;
      				setPreferredSize(new Dimension(image.getWidth(),image.getHeight()));
      			}
       
      			public void add(Cercle cercle) {
      				cercles.add(cercle);
      				repaint();
      			}
       
       
      			@Override
      			protected void paintComponent(Graphics g) {
      				super.paintComponent(g);
      				g.drawImage(image, 0, 0, this);
      				g.setColor(Color.BLACK);
      				for(Cercle cercle : cercles) {
      					cercle.dessiner(g);
      				}
      			}
       
      		}
    2. Tu pourrais procéder en faisant une image, afficher les cercles dans cette image, puis afficher l'image dans le JLabel, en changeant l'icône.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      Graphics graphics = image.getGraphics();
      cercle.dessiner(graphics);
      graphics.dispose();
      label.setIcon(new ImageIcon(image));


    A noter qu'il y a un problème avec le centre du cercle dans ta classe Cercle
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2017
    Messages : 35
    Par défaut Wow, merci
    Ok merci!

Discussions similaires

  1. Dessiner un cercle sur une image
    Par 7ider5 dans le forum Débuter
    Réponses: 4
    Dernier message: 26/04/2011, 05h07
  2. dessiner des cercles sur une image avec java
    Par inès83 dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 04/05/2008, 17h34
  3. Dessiner un cercle sur une sphère ?
    Par nico_ippo dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/01/2007, 17h25
  4. Dessin d'un cercle sur le canvas d'une form
    Par Mickey.jet dans le forum Delphi
    Réponses: 1
    Dernier message: 08/11/2006, 11h50
  5. JScrollPane sur un dessin?
    Par jean guimauve dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 02/11/2004, 15h04

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