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 :

Affichage de ma Figure


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
    Juin 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 34
    Par défaut Affichage de ma Figure
    Bonjour, j'ai mes deux ComboBox et mon bouton qui s'affichent bien. Quand je fais un clique sur mon bouton affiche, aucune figure ne s'affiche. J'ai cré un nouveau panel, pour accueillir le dessin, que j'ai appelé "pano", mais ca ne marche toujours pas.

    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
    103
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.lang.String;
     
    class LFigure extends JComboBox implements ActionListener
    {
    	JPanel ardoise;
     
    	LFigure(JPanel ardoise)
    	{
    		String[] libelleFigure={"Rectangle","Circle"};
    		JComboBox Lfigure=new JComboBox();
    		for (int i=0;i<libelleFigure.length;i++)
    			{Lfigure.addItem(libelleFigure[i]);}
    		ardoise.add(Lfigure);
    		addActionListener(this);
    	}
     
    	public String getFigure()
    	{
    		return (this.getActionCommand());
    	}
    }
     
    class LCouleur extends JComboBox implements ActionListener
    {
     
    	JPanel ardoise;
     
    	LCouleur(JPanel ardoise)
    	{
    		String[] libelleCouleurs={"Bleue", "Rouge", "Jaune", "Vert"};
    		this.setBackground(Color.lightGray); 
    		JComboBox Lcouleur=new JComboBox();
     
    		for (int i=0;i<libelleCouleurs.length;i++)
    			{Lcouleur.addItem(libelleCouleurs[i]);}
     
    		ardoise.add(Lcouleur);
    		addActionListener(this);
    	}
     
    	public String getCouleur()
    	{
    		return (this.getActionCommand());
    	}
    }
     
    class Gui1 extends JPanel implements ActionListener
    {
    	JPanel ardoise = new JPanel();
    	JPanel lesboutons = new JPanel();
    	LFigure Lfigure = new LFigure(ardoise);
    	LCouleur Lcouleur = new LCouleur(ardoise);
     
    	JButton affiche;
     
    	JPanel pano = new JPanel();
    	Gui1()
    	{
    		setLayout(new BorderLayout(500,500));
    		ardoise.setSize(new Dimension(200,150));
    		affiche=new JButton("Afficher");
    		affiche.addActionListener(this);
    		ardoise.add(affiche);
    		add("North",ardoise);
    		add("Center",pano);
    	}
     
    	public void actionPerformed(ActionEvent ev)
    	{	
    		Graphics g = pano.getGraphics();
     
    		if (ev.getSource()==affiche)
    		{
    			if (Lcouleur.getCouleur().equals("Rouge"))
    				g.setColor(Color.red);
    			if (Lcouleur.getCouleur().equals("Bleue"))
    				g.setColor(Color.blue);
    			if (Lcouleur.getCouleur().equals("Jaune"))
    				g.setColor(Color.yellow);
    			if (Lcouleur.getCouleur().equals("Vert"))
    				g.setColor(Color.green);
    			if (Lfigure.getFigure().equals("Rectangle"))
    				{Rectangle r1 = new Rectangle("Rectangle");
    					r1.draw(g);}
    			if (Lfigure.getFigure().equals("Circle"))
    				{Circle r2 = new Circle("Circle");
    					r2.draw(g);}
    		}
    	}
     
    	public static void main(String[] argv)
    	{
    		JFrame monCadre = new JFrame();
         		monCadre.setContentPane(new Gui1());
          		monCadre.pack();
          		monCadre.setVisible(true);
          		monCadre.show();
        	}	
    }
    Je vous donne aussi mon code de ma classe Rectangle:
    nom fichier: Rectangle.java

    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
     
    import java.awt.*;
    import java.awt.Point;
     
    public class Rectangle extends Figuresimple{
    	Point position;
    	int hauteur,longueur;
    	Color couleur;
     
    	public Rectangle(String n){
    		super(n);
    		position=new Point();
    		hauteur=2;
    		longueur=2;
    		nom="Rectangle";
    	}
    	public Rectangle(String n, Point pos,int w,int h){
    		super(n);
    		position=pos;
    		hauteur=h;
    		longueur=w;
    	}
    	public Rectangle(Color c,String n, Point pos,int w,int h){
    		super(n,c);
    		position=pos;
    		hauteur=h;
    		longueur=w;
    	}
    	public void setLocation(Point p){
    		position=p;
    	}
    	public void setDimension(int w,int h){
    		hauteur=h;
    		longueur=w;
    	}
    	public Point getPosition(){
    		return position;
    	}
    	public int getHauteur(){
    		return hauteur;
    	}
    	public int getLongueur(){
    		return longueur;
    	}
    	public void draw(Graphics g){
    		g.drawRect((int) position.getX(),(int) position.getY(),longueur,hauteur);
    	}
    	public boolean contains(int x,int y){
    		int a=(int) position.getX();
    		int b=(int) position.getY();
    		if ((x<(a+longueur))&&(x>a)&&(y<a)&&(y>(a-y))) return true;
    		else return false;
    	}
    	public double perimetre(){
    	return (2*(longueur+hauteur));
    	}
    	public double aire(){
    	return (longueur*hauteur);
    	}	
    }
    Je vous remercie d'avance,
    diditin

  2. #2
    Membre expérimenté Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Par défaut
    Une p'tite question :

    A quoi ça sert d'avoir une instance d'une classe JComboBox qui crée une JComboBox (et sans se créer elle-même en tant que JComboBox car pas d'appel à super)?
    Tu pourrais aussi bien étendre JPoeleAFrire que ça ferait la même chose...
    class LFigure exJComboBox Lfigure=new JComboBox();

    for (int i=0;i<libelleFigure.length;i++)
    {Lfigure.addItem(libelleFigure[i]);}
    ardoise.add(Lfigure);tends JComboBox
    parcequ'ensuite tu fais un addActionListener (que le compilateur va déduire de l'héritage c'est à dire sur une JComboBox pas créée) et en plus, tu le fais sur this, donc tu ajoutes un listener sur une JComboBox qui n'existe pas, listener piloté par cette même JComboBox qui n'existe pas (en tant que JComboBox)

    Il ne faut jamais oublier quen Java, le constructeur doit prendre en charge la totalité de la construction de l'objet !! Donc si on hérite d'une classe, on appelle le constructeur pas défaut de cette classe....

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 34
    Par défaut huh?
    salut dazz_x, ce que j'ai compris, tu me dis de pas me servir de "new JComboBox" mais de "super()"??

    Peux tu etre plus clair stp?

    Merci
    diditin

  4. #4
    Membre expérimenté Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Par défaut
    new() fait un appel au constructeur de la classe. Exemple : new LFigure(...) appelle le constructeur de la classe LFigure et alloue un emplacement mémoire à l'objet que tu crées... Bon jusque là, tu t'apprêtes à avoir un nouvel objet LFigure instance de ta classe. Or ta classe étend JComboBox.
    J'imagine donc que tu aimerais qu'un objet LFigure soit une JComboBox un peu plus évoluée. Mais pour cela, il faut que ton constructeur construise ton instance de LFigure comme une JComboBox avant d'ajouter les autres fonctionnalités. Il faut donc faire un appel au constructeur de JComboBox et cela se fait par héritage avec un appel comme ceci : super(); avec ou sans paramètre. Cet appel à super construit ton instance comme une instance de la classe étendue, dans ton cas comme une JComboBox. Or toi ce que tu fais, c'est new JComboBox(), c'est à dire la création d'un nouvel objet JComboBox au sein de ton objet LFigure qui dès lors n'existe pas en tant que JComboBox puisqu'il n'a fait qu'en créer une.
    pour que LFigure soit une JComboBox, il te suffit de procéder avec un truc dans le 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
     
    class LFigure extends JComboBox implements ActionListener
    {
    	JPanel ardoise;
     
    	LFigure(JPanel ardoise)
    	{
                    super();
    		String[] libelleFigure={"Rectangle","Circle"};
    		for (int i=0;i<libelleFigure.length;i++)
    			{this.addItem(libelleFigure[i]);}
    		ardoise.add(this);
     
    	}
     
    }
    C'est un peu plus clair ?
    Il te faudrait peut-être voir un cours complet sur l'héritage, ça serait certainement mieux expliqué que je ne le fais

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 34
    Par défaut Merci bien
    Deja,Merci beaucoup "dazz_x", j'aurai quelques erreurs en moins....et dorenavant, j'essayerai de travailler avec l'idée de l'heritage.

    Et a propose le "addActionListener()", dans ma classe Gui1, il faut que je le mette dans mon constructeur, "Gui1()",c-a-d,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Lfigure.addActionListener(this);
    Lcouleur.addActionListener(this);
    //qui ajoute un action listener a "l'ensemble" de mon instance LFigure et LCouleur.

    Que peux tu me proposer pour mon bouton "affiche",stp?
    Car mon affichage d'un dessin ne marche toujours pas.

    Merci
    diditin

Discussions similaires

  1. problème d'affichage d'une figure dans le pdf
    Par ineszbh dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 13/09/2012, 13h15
  2. Réponses: 5
    Dernier message: 30/06/2008, 14h43
  3. Gestion de la position à l'affichage des objet Figure
    Par titoph03 dans le forum MATLAB
    Réponses: 9
    Dernier message: 27/09/2007, 13h44
  4. Problème d'affichage de figure dans mon titre
    Par Math66 dans le forum Mise en forme
    Réponses: 9
    Dernier message: 07/06/2007, 14h07
  5. Problème d'affichage de figure
    Par perlgirl dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 03/09/2004, 09h53

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