Dessiner plusieurs graphes dans une interface

Fermé
XIII - 9 déc. 2012 à 22:24
XIIIII Messages postés 14 Date d'inscription lundi 10 décembre 2012 Statut Membre Dernière intervention 1 avril 2013 - 17 déc. 2012 à 20:13
Bonjour,

je veux combiner plusieurs graphes dans une seule interface, et sans passer par la méthode paint !!! est-ce-que c'est possible ??
merci

4 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
11 déc. 2012 à 15:55
Dans le détail, il faudrait avoir plus de précisions sur ce que tu as fait, mais tu peux partager l'objet Graphics de ta JFrame lors de la création de tes Threads, chacun allant dessiner ce qu'il veut en même temps.

Je viens de faire des "fourmis" qui se promènent sur l'écran, chacune dessinant son chemin parcouru d'une couleur personnelle. C'est bidon, mais ça t'aidera peut-être.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.util.Random;
import javax.swing.JFrame;

public class Fourmi extends Thread
{
    private final Graphics gph;
    private final Dimension dim;
    private final Color clr;
    private Point pos;
    
    private static final Random random = new Random();

    public Fourmi(JFrame frame, Color color)
    {
        dim = frame.getSize();
        gph = frame.getGraphics();
        clr = color;
        pos = new Point(random.nextInt(dim.width), random.nextInt(dim.height));
    }
    
    @Override
    public void run()
    {
        while (true)
        {
            Point next;
            
            switch (random.nextInt(4))
            {
            case 0: // à gauche
                if (pos.x==0)
                    pos.x=dim.width;
                next = new Point(pos.x-1,pos.y);
                break;
                
            case 1: // à droite
                if (pos.x==dim.width)
                    pos.x=0;
                next = new Point(pos.x+1,pos.y);
                break;
                
            case 2: // en bas
                if (pos.y==0)
                    pos.y=dim.height;
                next = new Point(pos.x,pos.y-1);
                break;
                
            case 3: // en haut
                if (pos.y==dim.height)
                    pos.y=0;
                next = new Point(pos.x,pos.y+1);
                break;
            default:
                next=pos;
            }
            
            synchronized (gph)
            {
                gph.setColor(clr);
                gph.drawLine(pos.x,pos.y, next.x, next.y);
            }
            
            pos = next;
        }
    }

    public static void main(String[] args)
    {
        JFrame frame = new JFrame();
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setVisible(true);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        new Fourmi(frame,Color.RED).start();
        new Fourmi(frame,Color.GREEN).start();
        new Fourmi(frame,Color.BLUE).start();
        new Fourmi(frame,Color.BLACK).start();
    }
}
1
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
11 déc. 2012 à 16:32
Remarque : une alternative serait de définir l'objet Graphics comme membre statique de la classe :

private static final Random random = new Random();

private static Graphics gph;
private static Dimension dim;

public static void setFrame(JFrame frame)
{
    dim = frame.getSize();
    gph = frame.getGraphics();
}

private final Color clr;
private Point pos;

public Fourmi(Color color)
{
    clr = color;
    pos = new Point(random.nextInt(dim.width), random.nextInt(dim.height));
}

Et dans le main :

Fourmi.setFrame(frame);

new Fourmi(Color.RED).start();
new Fourmi(Color.GREEN).start();
new Fourmi(Color.BLUE).start();
new Fourmi(Color.BLACK).start();
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
9 déc. 2012 à 22:43
Même si tu ne le fais pas explicitement, la méthode paint sera de toute façon appelée implicitement par les méthodes de plus haut niveau que tu pourrais utiliser !

Pour t'aider à combiner plusieurs de tes graphes il faudrait savoir quels types de graphes tu veux représenter, et comment tu les représentes seuls.
0
je ne sais pas si ma question est logique par rapport au Java, est-ce-qu'on peut récupérer par exemple le dessin de plusieurs objets et les insérer dans un seul JFrame qui se situe dans la classe principale?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
11 déc. 2012 à 00:07
"je ne sais pas si ma question est logique par rapport au Java"
Ce n'est pas illogique, c'est même tout à fait faisable (on peux plus ou moins tout faire en Java)

"est-ce-qu'on peut récupérer par exemple le dessin de plusieurs objets"
Le problème pour t'aider c'est que ta demande n'est pas très claire :
Est-ce que tu parles d'"objets" au sens Java ?
Quels sont les "dessins" dont tu parles ? Sous quels formats sont-ils ?

"les insérer dans un seul JFrame qui se situe dans la classe principale?"
Ça ça devrait aller, mais ça va dépendre de tes "dessins d'objets"...
0
XIIIII Messages postés 14 Date d'inscription lundi 10 décembre 2012 Statut Membre Dernière intervention 1 avril 2013
11 déc. 2012 à 07:38
je lance plusieurs thread , chacun a son dessin , et au final je regroupe ces dessins dans le jframe principale !!! comment faire ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
11 déc. 2012 à 13:20
Je vais me répéter, mais je ne peux pas t'aider si je ne sais pas ce que sont tes "dessins".
Est-ce que ce sont des images (PNG, JPG, GIF, etc.), des composants AWT/SWING, autre chose ?
Moi je veux bien t'aider à combiner tes dessins, mais il faut que je sache comment tu les représentes s'il n'y a qu'un seul thread.
0
XIIIII Messages postés 14 Date d'inscription lundi 10 décembre 2012 Statut Membre Dernière intervention 1 avril 2013
11 déc. 2012 à 15:10
oui,ce sont des composants swing (graphics) !!!!
0
XIIIII Messages postés 14 Date d'inscription lundi 10 décembre 2012 Statut Membre Dernière intervention 1 avril 2013
17 déc. 2012 à 20:13
je vous remercie, ton exemple est très instructif et ça m'a aidé énormément ..

tks
0