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 :

insérer un dessin dans un JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 89
    Points : 78
    Points
    78
    Par défaut insérer un dessin dans un JPanel
    Bonjour à tous, voilà j'ai créer une applet qui permet de lire la hauteur d'eau d'un automate. J'ai réussi à dessiner une jauge représentant le niveau d'eau ça marche. J'aimerais pouvoir maintenant l'insérer dans un JPanel mais je ne sais pas du tout comment m'y prendre. J'ai lu pas mal de truc sur internet mais je n'ai pas trop compris, pouvais vous m'aider svp ??? Merci d'avance. Voici le code de l'applet qui marche :


    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
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.lang.*;
    import java.util.Locale;
    import java.beans.*;
    import javax.swing.*;
    import javax.swing.event.*;
     
    import com.schneiderautomation.factorycast.*;
    import com.schneiderautomation.factorycast.comm.StatusMessages;
     
    public class hauteureau extends Applet implements PropertyChangeListener
    {
    	int valeur;
     
    	CommBean comm=new CommBean(Locale.getDefault());
    	MonitorUInt monitor=new MonitorUInt(comm.getAdaptor());
     
    	public void init()
    	{
    		try
    		{
    			comm.connect("172.16.6.241",false);
    			comm.start();
     
    			monitor.addPropertyChangeListener(this);
     
    			monitor.setAddress("%MW24");
    			monitor.register();
     
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur : "+e.getMessage());
    		}
     
    	}
     
    	public void destroy()
    	{
    		try
    		{
    			comm.disconnect();
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur : "+e.getMessage());
    		}
    	}
     
    	public void propertyChange(PropertyChangeEvent evt)
        {
            String prop = evt.getPropertyName();
     
            if( prop.equals( "values" ) )
            {
    			valeur=monitor.getValue();
    			repaint();
    		}		
    	}
     
    	public void tracejauge(int haut,Graphics g)
    	{
    		haut=haut*250/1000;
    		g.fill3DRect(31,250-haut,100,haut,false);
    	}
     
    	public void paint(Graphics g)
    	{
    		g.drawLine(30,0,30,251);
    		g.drawLine(30,251,131,251);
    		g.drawLine(131,251,131,0);
    		g.setColor(Color.CYAN);
    		tracejauge(valeur,g);
    	}
     
    }
    et voici le code incomplet de la page que je veut réaliser :

    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
     
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.lang.*;
    import java.util.Locale;
    import java.beans.*;
    import javax.swing.*;
    import javax.swing.event.*;
     
    import com.schneiderautomation.factorycast.*;
    import com.schneiderautomation.factorycast.comm.StatusMessages;
     
    public class hauteureau2 extends JApplet
    {
    	public hauteau hauteurdeleau=new hauteau();
    	public jauge jg=new jauge();
     
     
    	CommBean comm=new CommBean(Locale.getDefault());
    	JPanel panneau=new JPanel();
    	GridLayout tableau=new GridLayout(2,1);
    	JLabel eau=new Label();
    	//On créera ici l'élément qui contiendra la jauge
     
    	public void init()
    	{
    		try
    		{
    			comm.connect("172.16.6.241",false);
    			comm.start();
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur : "+e.getMessage());
    		}
     
    		this.add(panneau);
    		panneau.setLayout(tableau);
    		panneau.add(eau);
    		//on insérera ici la jauge dans le panel
    	}
     
    	public void destroy()
    	{
    		try
    		{
    			comm.disconnect();
    		}
    		catch(Exception e)
    		{
     
    		}
    	}
     
    	class hauteau implements PropertyChangeListener
    	{
    		int valeur;
    		MonitorUInt monitor=new MonitorUInt (comm.getAdaptor());
     
    		public void init()
    		{
    			monitor.addPropertyChangeListener(this);
     
    			monitor.setAddress("%MW24");
    			monitor.register();
    		}
     
    		public void propertyChange( PropertyChangeEvent evt )
    		{
    			String prop = evt.getPropertyName();
     
    			if( prop.equals( "values" ) )
    			{
    				valeur=monitor.getValue();
    				eau.setText("hauteur :"+valeur);
    				//on redessinera la jauge avec la nouvelle valeur ici
    			}		
    		}
    	}
     
    	class jauge
    	{
    		public void tracejauge(int haut,Graphics g)
    		{
    			haut=haut*250/1000;
    			g.fill3DRect(31,250-haut,100,haut,false);
    		}
     
    		public void paint(Graphics g)
    		{
    			g.drawLine(30,0,30,251);
    			g.drawLine(30,251,131,251);
    			g.drawLine(131,251,131,0);
    			g.setColor(Color.CYAN);
    			tracejauge(valeur,g);
    		}
    	}
    }
    P.S : Ceci n'est qu'une applet test et les éléments dans l'applet final seront rangés grâce à un GridBagConstraints.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    Commence par jauge extends JPanel
    puis ajoute Jauge à ton applet.
    et dans ton liste tu fait un repaint sur jauge.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 89
    Points : 78
    Points
    78
    Par défaut
    Ok, je viens de mettre extend JPanel à ma classe jauge, mais après pour l'ajouter au JPanel je fais panneau.add(jauge)???


    P.S : Le Java ça fais depuis janvier que j'ai commençé et tout ce qui est grahique ça fait à peine une semaine.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    non en faite tu laisses tomber le panneau et du coup c'est ta jauge qui devient ton panneau (en faite tu l'ajoute à la place).

    et dans paint(G) tu fais tout ce qu'il faut pour dessiner la jauge avec la bonne hauteur d'eau

    n'oublie pas super(g) au début de la méthode

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 89
    Points : 78
    Points
    78
    Par défaut
    Voilà mais dans ce cas si j'oublie le panneau pour intégrer le label eau, il faut que je fasse jauge.add(eau) dans l'init de mon applet???

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 89
    Points : 78
    Points
    78
    Par défaut
    il faut pas que je fasse :

    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
    public class hauteureau2 extends JApplet
    {
    	public hauteau hauteurdeleau=new hauteau();
    	public jauge jg=new jauge();
     
     
    	CommBean comm=new CommBean(Locale.getDefault());
    	GridLayout tableau=new GridLayout(2,1);
    	JLabel eau=new Label();
    	//On créera ici l'élément qui contiendra la jauge
     
    	public void init()
    	{
    		try
    		{
    			comm.connect("172.16.6.241",false);
    			comm.start();
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur : "+e.getMessage());
    		}
     
    		this.add(jauge);
    		jauge.setLayout(tableau);
    		jauge.add(eau);
    		//on insérera ici la jauge dans le panel
    	}
     
    	public void destroy()
    	{
    		try
    		{
    			comm.disconnect();
    		}
    		catch(Exception e)
    		{
     
    		}
    	}
     
    	class hauteau implements PropertyChangeListener
    	{
    		int valeur;
    		MonitorUInt monitor=new MonitorUInt (comm.getAdaptor());
     
    		public void init()
    		{
    			monitor.addPropertyChangeListener(this);
     
    			monitor.setAddress("%MW24");
    			monitor.register();
    		}
     
    		public void propertyChange( PropertyChangeEvent evt )
    		{
    			String prop = evt.getPropertyName();
     
    			if( prop.equals( "values" ) )
    			{
    				valeur=monitor.getValue();
    				eau.setText("hauteur :"+valeur);
    				//on redessinera la jauge avec la nouvelle valeur ici
    			}		
    		}
    	}
     
    	class jauge extends JPanel
    	{
    		public void tracejauge(int haut,Graphics g)
    		{
    			haut=haut*250/1000;
    			g.fill3DRect(31,250-haut,100,haut,false);
    		}
     
    		public void paint(Graphics g)
    		{
    			super(g);
    			g.drawLine(30,0,30,251);
    			g.drawLine(30,251,131,251);
    			g.drawLine(131,251,131,0);
    			g.setColor(Color.CYAN);
    			tracejauge(valeur,g);
    		}
    	}
    }

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 866
    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 866
    Points : 22 913
    Points
    22 913
    Billets dans le blog
    51
    Par défaut
    Ton principal probleme vient que ta jauge est une JApplet. En fait ta jauge devrait etre un JPanel* ou un JComponent* qui est lui-meme inclus dans la JApplet. Cela devrait permettre une meilleure reutilisabilite et nottament d'inclure ce composant hors du cadre de l'utilisation dans une page web, dans une application standalone par exemple dans une JFrame ou un autre JPanel.

    *Dans ce cas-la c'est protected void paintComponent(Graphics g) qu'il faut surcharger pour le dessin.

    Il faut que tu apprenne a mieux decouper les fonctionnalites de ton programme, clairement pour une meilleure reutilisabilite, la jauge ne doit pas etre l'applet, elle doit etre utilisee par cette derniere. Ce qui donne donc deux entites (classes) distinctes.

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