Dessiner plusieurs graphes dans une interface

XIII -  
XIIIII Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
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

A voir également:

4 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
XIII
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
"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   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention  
 
oui,ce sont des composants swing (graphics) !!!!
0
XIIIII Messages postés 14 Date d'inscription   Statut Membre Dernière intervention  
 
je vous remercie, ton exemple est très instructif et ça m'a aidé énormément ..

tks
0