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

Langage Java Discussion :

Modification d'objet et classe anonyme


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Modification d'objet et classe anonyme
    Bonjour à tous,
    J'ai un petit soucis, je vous présente rapidement mon projet puis mon problème :
    Je dois faire un "paint" grossièrement, en Java pour mes études, il y a eu deux versions sans boutons, et je bloque sur celle-ci avec...
    J'arrive bien a créer mes bouton, à réaliser des actions avec des ActionListener que je redéfini pour chaque bouton en anonyme.

    Voilà mon problème qui est réparti sur 4 classes... Une classe Dessin (Mon JPanel), une classe Fenetre (JFrame) avec mes bouton, ma toolbar, barre de menu, ... Une classe forme qui permet de crée des formes (avec des classe fille de type Carré, ...) et une classe FabriquantFigure qui a partir du JPanel (Objet type Dessin) et d'une forme en paramètre, rempli un tableau de point, pour permettre la création visuelle de la forme, à l'aide des clics de souris, donc dans son constructeurs il s'ajoute des MouseListener et MouseMotionListener...

    Quand je fais un FabriquantFigure n'importe où, dans le main, une fonction, ... n'importe quoi ça fonctionne... MAIS lorsque je fais ça depuis ma classe Anonyme comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		bCarre.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
    				Carre ca = new Carre(java.awt.Color.black);
    				new FabriquantFigure(dessin, ca);
    				dessin.repaint();
    			}
    		});
    Sachant que le dessin est un attribut dans ma Fenêtre.
    Et ben... Il ne détecte pas les clics de souris.
    Mais si je fais exactement la même chose que dans la méthode 2 lignes plus haut, dans le constructeur de fenêtre par exemple... ça marche.

    Pour résoudre le problème, j'ai essaye de débug, les listeners sont bien présent dans "dessin", il execute bien le constructeur de FabriquantFigure...
    J'ai aussi essayer de faire ça depuis une autre méthode extérieure à la classe anonyme.... Un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		bCarre.addActionListener(new ActionListener(){
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
    				Test()
    			}
    		});
     
    public void Test(){
    Carre ca = new Carre(java.awt.Color.black);
    new FabriquantFigure(dessin, ca);
    }
    Exactement la même chose, alors que si j'appelle la méthode depuis un autre endroit, pas de problème...


    Merci d'avance à ceux qui aiment les défis.... :/


    Edit : Bon je viens de trouver la solution sur un coup de chance... En fait j'avais une méthode "pause()" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public void pause() {
    		try {
    			while (!this.fini){
    				Thread.sleep(100);
    			}
    		} catch (InterruptedException ie) {
    		}
    	}
    Comme avant ça se faisait par un menu en ligne de commande, pour ne pas que le programme avance tant que la forme n'était pas fini, mais maintenant je n'en ai plus besoin... Donc problème résolu.
    Mais cette histoire reste étrange, puisqu'il n'y a pas de raison que ça plante... Sauf si l'ActionListener bloque l'accès à la JFrame tant qu'il n'a pas fini son action...

  2. #2
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    deux remarques:
    - ton FabricantFigure opère par effet de bord: c'est pas très politiquement correct ...
    - par ailleurs ton dessin.repaint() ne me semble pas correct: c'est quoi la classe Dessin? dans un contexte Swing je doute que ça fonctionne + problème de mise a jour graphique
    donc : voir comment on met à jour le dessin d'un composant Swing (paintComponent) et voir comment on utilise SwingUtilities pour soumettre une tâche
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Je sais bien que l'effet de bord est très moyen, mais c'est les profs de mon IUT qui proposent cette solution, donc...

    Mon dessin.repaint, ça lance le plus simplement du monde mon paintComponent(Graphics g) de mon JPanel (Dessin est extends de JPanel)

  4. #4
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par NeoBurner Voir le message
    Je sais bien que l'effet de bord est très moyen, mais c'est les profs de mon IUT qui proposent cette solution, donc...
    j'ai été prof pendant suffisamment longtemps pour pouvoir dire qu'il n'est pas interdit de proposer à un prof. une meilleure solution!
    (après c'est des êtres humains: à toi de juger s'il y en a qui ne sont pas ouverts à la contradiction)
    par ailleurs il me semble que tu ne devrais pas toi-même invoquer paintComponent mais laisser Swing le faire (quitte à demander à Swing de bien vouloir passer l'éponge magique ) ... mais tu as le droit de me contredire
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Ce n'est pas faux, mais bon on apprend encore, je ne vois pas vraiment d'autre solution.

    Le swing le fait, mais je rempli un tableau de point au clic, donc pas le choix d'invoquer cette méthode puisque rien a voir avec le swing

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/08/2005, 10h30
  2. [JSP][STRUTS] Passer des objets à une classe action
    Par maphi dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/08/2005, 16h55
  3. [classe anonyme] implementant une interface
    Par stanilas dans le forum Langage
    Réponses: 4
    Dernier message: 30/11/2004, 00h18
  4. [HashMap] Modification d'objet d'une Hashtable
    Par viena dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 29/07/2004, 09h04
  5. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07

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