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 :

pb appel repaint


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut pb appel repaint
    bonjour,

    j'appelle la fonction repaint() mais l'appel ne se fait pas. J'ai fait un mode pas à pas et il semble que repaint n'appelle pas paint(). Je travaille dans un JPanel qui est dans un JDialog. Avant j'étais dans une JFrame et tout fonctionnait ! je ne comprends pas d'où cela peut venir... si quelqu'un sait ? Je travaille dans une bufferedimage ça peut venir de là ? Sinon ma classe comporte une fonction qui tourne sur elle même avec un thread et peut être qu'elle bloque le repaint() ?


    Merci

    greg

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 702
    Par défaut
    En swing c'est paintComponent qu'il faut surcharger et non paint. et bien sur si tu travaille dans une BufferedImage, il faut la dessiner sur composant une fois que tout les dessins a l'intérieur de celle-ci sont terminés.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut re
    oui, j'ai fait tout cela. Lorsque je lance mon appli avec un main() alors no pb tout fonctionne correctement. Mais si je crée l'instance de la ma classe avec un jframe et un jpanel dans une autre classe qui possède elle aussi un jframe et un jpanel alors rien ne va plus: tout se dessine mais je suis obligé d'attendre que tout soit terminé pour voir les résultats !

    greg

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Donne ton code.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut re
    voici mon code épuré:


    J'ai une classe qui fait des calculs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class compute{
    	static double[][] tdi = new double[1000][2];
    	double[]	tmp;
    	double	time = 1;
    	static int		size;
    	int		n;
    	static int subdiv = 10;
     
     
    	public double[][] compute(int dx, int dy, Point2DList pl ){
     
    // on rempli tdi avec les points qui donneront les droites à afficher		
    }

    J'ai une classe launch qui permet de créer des tâches qui afficheront les droites en question:

    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
    class launch extends Thread{
    	static org.jdom.Document document;
    	static org.jdom.Element racine;
    	static Point2DList pl = new Point2DList();
    	int width=0, height=0,rectx=0, recty=0;
    	static compute cp;
     
     
     
    	public void run()
    	{
    	 for (i=0; i<N;i++){
    	// on fait une boucle qui comporte N appel à compute
    		cp = new compute();
    		mainTest.tdi=cp.compute(dx,0,pl);
    	             Thread cpt = new runner(rectx, recty);
    		cpt.run();
    		do{
    	Thread.sleep(50);
    	}while(cpt.isAlive());
     
     
    	}
               }
    }
    Ma fonction principale:

    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
    public mainTest(){
    		if (first == true){
    						image = new BufferedImage( largeur, hauteur, BufferedImage.TYPE_INT_ARGB );
    			graph = image.createGraphics();
    			graph.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
    			graph.setStroke(new BasicStroke(1.2f));
    			graph.setBackground(Color.white);
    			graph.clearRect(0, 0, largeur, hauteur);
    			first = false;
     
    			repaint();
     
     
    		}
    			}
    	public void update(Graphics g){
    		paintComponent(g);
    	}
     
    	public static void main(String args[]){
    		JFrame jd = new JFrame();
    		//jd.setModal(false);
    		inter = new mainTest();
    		jd.add(inter);
    		jd.pack();
    		jd.setVisible(true);
     
     
     
     
    		la1 = new launch();
    		la1.run();
    	}
     
    	public Dimension getPreferredSize()
    	{
    		return new Dimension( largeur, hauteur );
    	}
     
    		public void paintComponent( Graphics g )
    	{
    		super.paintComponent( g );
    		g.drawImage( image, 0, 0, this );
    			}
    }

    Tout fonctionne correctement car ce qui est dessus est dans un main mais si je met le 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
    public static void main(String args[]){
    		JFrame jd = new JFrame();
    		//jd.setModal(false);
    		inter = new mainTest();
    		jd.add(inter);
    		jd.pack();
    		jd.setVisible(true);
     
     
     
     
    		la1 = new launch();
    		la1.run();
    	}
    dans mon application (appel par un menu) alors la fenêtre se bloque tout le temps des calculs et l'affichage se fait uniquement à la fin ! j'ai du passé à côté d'un truc super important (encore) car je vois vraiment pas !!! En fait en mettant un println dans repaint, il semble que la fonction ne soit pas appelée, pourtant l'appel y est...

    Si je lance la fonction en tant qu'application alors tout fonctionne bien, mais si je la lance à partir d'une application alors la visu ne se fait pas en temps réel.

    voilà j'espère que vous pourrez m'aider ?

    Merci

    Greg

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations forums :
    Inscription : Septembre 2008
    Messages : 145
    Par défaut re
    j'ai trouvé ! j'ai mis une tâche pour l'appel, tout est ok, cependant je ne comprends pas pourquoi il faut mettre une tâche ... si quelqu'un peut me dire ?

Discussions similaires

  1. repaint() non appelé mais paintComponent(g) oui
    Par leoenfolie44 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 14/08/2013, 15h05
  2. appel de la fonction repaint
    Par greg08 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 02/12/2009, 13h32
  3. Problème avec l'appel à repaint()
    Par greg08 dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 24/10/2008, 19h45
  4. appel de repaint
    Par jalam dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 05/04/2007, 21h22
  5. forcer l'appel d une methode apres un repaint
    Par ceres02 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 11/03/2006, 00h17

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