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 :

Dessiner dans un Jpanel a l'appui d'un bouton


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Dessiner dans un Jpanel a l'appui d'un bouton
    Bonjour, je suis actuellement sur mon projet de BTS, qui consiste a faire un "pseudo-GPS" en java.

    Cependant, je n'arrive pas a faire en sorte de tracer une droite dans un Jpanel défini a l'activation d'un toggle button. Voici un screen du programme actuel : http://data.imagup.com/11/1174633537.jpg

    Et voici a quoi ressemble mon programme :

    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class GPSPanel extends JPanel {
      Color color;
      Image image = null;
     
      public GPSPanel() {
        this(Color.black);
      }
     
      public GPSPanel(Color color) {
        this.color = color;
      }
     
      public void paintComponent(Graphics g) {
        super.paintComponent(g) ; 
        int width = getWidth();
        int height = getHeight();
        g.setColor(color);
        g.fillRect(0, 0, width-1, height-1);
     
        // ******** Affiche l'image de la Carte GPS ********** //
        image = getToolkit().getImage("paris.jpg");
        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(this.getWidth() / 2, this.getHeight() / 2); //Permet de centrer la carte
        g2d.translate(-image.getWidth(null) / 2, -image.getHeight(null) / 2); //Permet de centrer la carte
        if(image != null) // Si l'image existe, ...
        g2d.drawImage(image, 0, 0, this);
     
        // ******** Tracé de la trajectoire sur la Carte GPS ********** //
        BasicStroke bs1 = new BasicStroke(3);
        g2d.setStroke(bs1);
        //g.drawLine(50, 50, 100, 100);
      }
     
      public static void main(String args[]) {
        JFrame frame = new JFrame("Jacquard Positioning System");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(1, 2)); //Defini l'agencement des blocs. (ligne, colonnes)
        Color colors[] = { Color.BLACK, Color.RED, Color.BLUE};
     
        //******************** Carte GPS *************************//
          GPSPanel panel = new GPSPanel(colors[0]);
          frame.add(panel);
     
        //******************** Selection trajectoire *************************//
          JPanel panel2 = new JPanel();
          JToggleButton trace = new JToggleButton("Activer le tracé");
          trace.addActionListener(
     
          // on crée une classe anonyme implémentant ActionListener
          new ActionListener() { 
            public void actionPerformed(ActionEvent e) {
    		// Ici, on active le tracé de la trajectoire 
            }
          }
          );  
          panel2.add(trace);
          frame.add(panel2);
     
     
        frame.setSize(1245, 650);
        frame.setVisible(true);
      }
    }
    Je suis pas encore super a l'aise en java, toute aide/documentation serait la bienvenue.

    Merci.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Pourtant tu n'en est pas loin... cette ligne (mis en commentaire) permet bien de dessiner une droite. Décommente la et utilise une variable que tu passes a vrai / faux selon l'appuie sur le togglebutton (+ une demande de repaint).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.drawLine(50, 50, 100, 100);
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse, je viens d'essayer mais j'ai un petit problème avec le repaint, ca me renvoi ceci a la compilation :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    frees@Vita-Unisson:~/Bureau/GPSPanel$ javac GPSPanel.java 
    GPSPanel.java:62: non-static method repaint() cannot be referenced from a static context
              repaint();
              ^
    1 error
    Et voici le code, le repaint est-il bien placé ou je me trompe ?

    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class GPSPanel extends JPanel {
      Color color;
      Image image = null;
      public static boolean toggle = false;
     
      public GPSPanel() {
        this(Color.black);
      }
     
      public GPSPanel(Color color) {
        this.color = color;
      }
     
      public void paintComponent(Graphics g) {
        super.paintComponent(g) ; 
        int width = getWidth();
        int height = getHeight();
        g.setColor(color);
        g.fillRect(0, 0, width-1, height-1);
     
        // ******** Affiche l'image de la Carte GPS ********** //
        image = getToolkit().getImage("paris.jpg");
        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(this.getWidth() / 2, this.getHeight() / 2); //Permet de centrer la carte
        g2d.translate(-image.getWidth(null) / 2, -image.getHeight(null) / 2); //Permet de centrer la carte
        if(image != null) // Si l'image existe, ...
        g2d.drawImage(image, 0, 0, this);
     
        // ******** Tracé de la trajectoire sur la Carte GPS ********** //
        BasicStroke bs1 = new BasicStroke(3);
        g2d.setStroke(bs1);
        if(toggle == true){
          g.drawLine(50, 50, 100, 100);
        }     
     
      }
     
      public static void main(String args[]) {
        JFrame frame = new JFrame("Jacquard Positioning System");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(1, 2)); //Defini l'agencement des blocs. (ligne, colonnes)
        Color colors[] = { Color.BLACK, Color.RED, Color.BLUE};
     
        //******************** Carte GPS *************************//
          GPSPanel panel = new GPSPanel(colors[0]);
          frame.add(panel);
     
        //******************** Selection trajectoire *************************//
          JPanel panel2 = new JPanel();
          JToggleButton trace = new JToggleButton("Activer le tracé");
          trace.addActionListener(
     
          // on crée une classe anonyme implémentant ActionListener
          new ActionListener() { 
            public void actionPerformed(ActionEvent e) {
    		// Ici, on active le tracé de la trajectoire
              toggle = true;
              repaint();
            }
          }
          );  
          panel2.add(trace);
          frame.add(panel2);
     
        frame.setSize(1245, 650);
        frame.setVisible(true);
      }
    }
    (j'ai aussi essayé en remplacant repaint() par panel.repaint() mais ca ne compile pas)

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Oui faut éviter de mettre les truc en statique pour se sortir d'affaire (cas du boolean).

    Mais sinon panel.repaint() aurait dut fonctionner, en tout cas ici avec ceci ça fonctionne mieux :

    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class GPSPanel extends JPanel {
      Color color;
      Image image = null;
      public boolean toggle = false;
     
      public GPSPanel() {
        this(Color.black);
      }
     
      public GPSPanel(Color color) {
        this.color = color;
      }
     
      public void paintComponent(Graphics g) {
        super.paintComponent(g) ; 
        int width = getWidth();
        int height = getHeight();
        g.setColor(color);
        g.fillRect(0, 0, width-1, height-1);
     
        // ******** Affiche l'image de la Carte GPS ********** //
        image = getToolkit().getImage("paris.jpg");
        Graphics2D g2d = (Graphics2D) g;
        g2d.translate(this.getWidth() / 2, this.getHeight() / 2); //Permet de centrer la carte
        g2d.translate(-image.getWidth(null) / 2, -image.getHeight(null) / 2); //Permet de centrer la carte
        if(image != null) // Si l'image existe, ...
        g2d.drawImage(image, 0, 0, this);
     
        // ******** Tracé de la trajectoire sur la Carte GPS ********** //
        BasicStroke bs1 = new BasicStroke(3);
        g2d.setStroke(bs1);
        if(toggle == true){
        	g.setColor(Color.WHITE);
        	g.drawLine(50, 50, 100, 100);
        }     
     
      }
     
      public static void main(String args[]) {
        JFrame frame = new JFrame("Jacquard Positioning System");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(1, 2)); //Defini l'agencement des blocs. (ligne, colonnes)
        Color colors[] = { Color.BLACK, Color.RED, Color.BLUE};
     
        //******************** Carte GPS *************************//
          final GPSPanel panel = new GPSPanel(colors[0]);
          frame.add(panel);
     
        //******************** Selection trajectoire *************************//
          JPanel panel2 = new JPanel();
          JToggleButton trace = new JToggleButton("Activer le tracé");
          trace.addActionListener(
     
          // on crée une classe anonyme implémentant ActionListener
          new ActionListener() { 
            public void actionPerformed(ActionEvent e) {
    		// Ici, on active le tracé de la trajectoire
                panel.toggle=((panel.toggle==true)?false:true);
                panel.repaint();
            }
          }
          );  
          panel2.add(trace);
          frame.add(panel2);
     
        frame.setSize(1245, 650);
        frame.setVisible(true);
      }
    }
    Tu avais oublié de mettre une couleur différente pour voir la ligne apparaitre aussi.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Ah, j'avais pas pensé à mettre final à panel. Ca marche très bien !

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dessiner dans un JPanel
    Par mattyeux dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 20/12/2006, 13h16
  2. probleme pour dessiner dans un JPanel
    Par L4BiN dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 02/08/2006, 15h01
  3. [Debutant]Dessiner dans plusieurs JPanels. Probleme
    Par ahage4x4 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 22/05/2006, 12h32
  4. Dessiner dans différents JPanels
    Par N@sH dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/05/2005, 15h39
  5. Dessiner dans un JPanel
    Par Oliveuh dans le forum Composants
    Réponses: 5
    Dernier message: 19/07/2004, 12h13

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