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

Interfaces Graphiques en Java Discussion :

Image qui s'efface


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut Image qui s'efface
    Bonjour,
    Mon problème c'est que les objets que je dessine sur mon interface graphique s'effacent quand une autre fenêtre couvre ma fenêtre.
    Je précise que ces objets restent intacts quand je fais bouger ou que je redimensionne ma fenêtre et c'est uniquement quand la fenêtre est couverte par une autre fenêtre que les objet dessinés s'effacent.

    pourtant j'utilise bien une fonction spécifique paint(g) dans ma classe.

    Merci de m'aider

    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
    public class Interface extends Frame  implements ActionListener , Observer  {//implements ActionListener{
     
    	JPanel P1 ;
    	Graphics gg ;
    	int x_dim,y_dim ;
    	server2 server ;
     
    	public Interface(){
     
    		P1 = new JPanel() ;
    		P1.setPreferredSize(new Dimension(400, 400));
     
    		gg =P1.getGraphics() ;
    		resize ( 400, 450 );
     
    		JToolBar bar = new JToolBar();
    		JButton Start=new JButton( "START") ;
    		Start.addActionListener(this);
     
    		bar.add(Start) ;
    		P1.add(bar) ;
     
    		add(P1)  ;	
    	}
     
    	public void actionPerformed(ActionEvent e){
    		server= new server2() ;
    		server.addObserver(this) ;
    		server.server2_start() ;
     
    	}	
     
    	public void update(Observable o, Object arg) {
    		System.out.println ("Update fonctionne ...");
    		paint(P1.getGraphics()) ;
    	}
     
    	public void paint(Graphics g) {
    		for(int j=0; j<server.U.size() ;j++){
    			System.out.println ("User Color="+server.U.get(j).getColor() ) ;	
    			server.U.get(j).dessiner(g) ;  // Ici je fais appel à une autre classe pour dessiner sur le Graphics() que je lui transmet 
    		}
    	}
     
    	public static void main (String args[]) {
    		Interface I = new Interface() ;
    		I.setVisible(true) ;
    	}
    }

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut
    Salut,

    Tu peux tenter de rafraîchir ta fenêtre avec la méthode updateUI().

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    Salut
    Merci pour la rep,
    J'ai ajouté P1.updateUI() dans le constructeur ainsi que dans paint() mais ca ne marche pas. J'ai aussi essayé d'ajouter update(Graphics()) dans la méthode paint() mais ca ne marche pas non plus.
    C'est peut-être par ce que Je ne les utilise pas bien et au bon endroit.

    Je crois que l'origine du problème vient du fait que dans la méthode paint() de la classe qui s'occupe de l'interface graphique, je fais appel à une autre classe qui elle, se chargera de dessiner sur le Graphics() que je lui envoi. car quand je dessine directement quelque chose dans ma méthode paint() sans faire appel à l'autre classe ca marche bien.

    Quelqu'un a une idée?
    Merciii

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 43
    Par défaut
    Si j'ai bien compris, tu as rajouté le updateUI() à la création de ta fenêtre et au moment où tu la dessines. Effectivement, ça n'aura aucun effet. La méthode updateUI() redessine ton composant comme il l'était auparavant. Il faut donc que tu l'appelles quand ta fenêtre masquée revient sur le devant de l'écran.

    En attendant une meilleure réponse, je te propose d'ajouter un listener du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    P1.addActionListener(new ActionListener() {
      void actionPerformed(ActionEvent e) {
        P1.updateUI();
        //ou
        P1.repaint();
      }
    }

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    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 897
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par Christophe_stevenin Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Interface extends Frame  implements ActionListener , Observer  {//implements ActionListener{
     
    	JPanel P1 ;
    	Graphics gg ;
     
     
    [...]
    		gg =P1.getGraphics() ;
     
    [...]
     
    		System.out.println ("Update fonctionne ...");
    		paint(P1.getGraphics()) ;

    - Tu NE DOIS PAS melanger les composants Swing et les composants AWT !

    - Tu NE DOIS PAS manipuler (et encore moins garder de reference sur) le Graphics retourne par la methode getGraphics(). La methode correcte pour demander un rafraichissement de l'affichage est d'appeler repaint() ou repaint(x, y, w, h) !
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    Salut

    Merci pour les rep.

    en mettant juste repaint() en évitant de transmettre P1.getGraphics() à la méthode paint(g) (comme dit dans la réponse de bouye), il y a rien qui est dessiné.

    C'est surement dû au fait que dans la méthode paint(g) je transmet g à la méthode dessiner(g) d'une autre classe. et c'est cette méthode dessiner(g) qui est chargé de dessiner.
    Car en enlevant l'appel à cette autre classe en dessinant un simple cercle dans la méthode paint(g) ca marche bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	public void update(Observable o, Object arg) {
    		repaint() ;
    	}
     
     
    	public void paint(Graphics g) {
    		//g.fillOval(100,100,20,20) ;// en mettant juste ca ca marche!! 
    		for(int j=0; j<server.U.size() ;j++){
    			System.out.println ("User Color="+server.U.get(j).getColor() ) ;	
    			server.U.get(j).dessiner(g) ;// appel à la fonction dessiner d'une autre classe, il le dessine même pas dans ce cas. mais dans le cas où je transmet P1.getGraphics() il le dessine mais le rafraichie pas quand une autre fenêtre couvre ma fenêtre.
    		}   
     
    	}

    (comme dit dans la réponse de zenii) en ajoutant un code du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		P1.addActionListener(new ActionListener() {
    		  void actionPerformed(ActionEvent e) {
                           repaint() ;
    		  }
    		});
    dans le contructeur il veut pas complier et me sort une error cannot find symbole pour P1.addActionListener.

    Quelqun pourrait m'aider SVP??

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    Salut,

    C'est juste pour signaler que j'ai résolu le problème et que le problème ne venait pas de la façon dont j'implémentai les méthodes mais il y avait une fonction qui ne ne s'arretait plus une fois lancer. Je l'ai passé dans un Thread et maintenaint je n'ai plus de problème.

    Merci pour vos conseils en tout cas. Je les ai bien appliqué pour rendre mon code plus juste.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/04/2009, 11h52
  2. probléme de cadre sur une image qui me sert de lien
    Par thomas_chamas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/11/2004, 17h36
  3. [HTML]Image qui ne s'affiche pas sous firefox...
    Par OrangeBud dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/10/2004, 13h42
  4. [Swing][graphics]objets graphiques qui s'effacent
    Par TylerKnoxx dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 11/08/2004, 16h36
  5. [debutant][Tomcat]Images qui ne s'affichent pas
    Par omega dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/04/2004, 09h44

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