Question d'une débutante en java ^^

sofuzion
Question d'une débutante en java ^^

Bonjour tout le monde, je suis en train d'apprendre le java à la fac ..
J'ai fait une applet avec 10 traits de tailles aléatoires, et ensuite une fonction de trie. Je dois trier suivant la taille du trait générer (la fonction trie fonctionne correctement!) par contre, quand je réactualise l'applet (avec repaint()) je n'arrive pas à réafficher les traits dans l'ordre croissant de leur taille.

J'ai donc deux classes : une trait(pour dessiner un trait) et une Rect (pour l'applet et le reste)

Quelqu'un serait il me dire où pourrait se trouver mon erreur?

Merci d'avance.


import java.awt.Color;
import java.awt.Graphics;

public class Trait 
{
	public int x, y;		//x et y coordonnées du trait
	public int taille;		//taille du trait

	public Trait(int x,int y,int dim)		//constructeur
	{	
		this.x = x;							//permet d'initialiser les coordonnées x et y
		this.y = y;						
		taille = dim;						//initialise la taille
	}
	
	public void dessiner (Graphics g)
	{
		g.setColor(Color.blue);				//trait de couleur bleu
		g.drawLine(x,y,x+taille,y);			//dessiner un trait de coordonnées x et y de départ
											// et (x+taille) et y d'arrivées
	}
}



import java.applet.*;
import java.awt.*;

public class Rect extends Applet implements Runnable
{
	
	private Thread t;						//création d'un thread t
	private Trait tab[];					//création d'un tableau tab de type Traie
	
	public Rect()							//constructeur
	{	
		int taille;				
		tab = new Trait[10] ;				//initialisation du tableau tab de Traie de taille 10
		t = new Thread(this);
		int y=10;				
		for(int i=0;i<10;i++)							//on génére 10 traits 
		{	
			taille = (int) (Math.random() * 400 +1);	//pour la taille aléatoire d'un traie
			y = y + 5;	
			tab[i]= new Trait(20,y,taille);	
		}
		t.start();
		
	}
	
	public void paint (Graphics g)
	{	
		setSize(500, 200);												//taille de l'applet
		g.drawRect(10,10,getSize().width - 20 ,getSize().height - 20);	//pour dessiner un rectangle
		
		for(int i=0;i<10;i++)							//pour les 10 traits du tableau tab
				{
				 tab[i].dessiner(g);					//on dessine un trait 
				 System.out.println(tab[i].taille);		//affichage triselection
				}
		
	}
	

	public void triselection()						//tri
	{
		int i,j,m;
		
		for(i=0;i<(tab.length-1);i++)
		{
			m = i;
			for(j=i+1;j<tab.length;j++)
				if(tab[j].taille < tab[m].taille)
					m = j;
			if (m != i)
				{ Trait c = tab[i];
				  tab[i] = tab[m];
			      tab[m] = c;
				}
			
		}
	}
	

	
	public void run()
	{	
		triselection();					//lance le tri sélection
		repaint();						//permet de réactualiser l'applet
	}
}

Niroken

Lol j'ai regardé ton soucis et j'ai trouvé la solution :
Ca m'a pris un peu la tête mais le problème est tt bête :)

Je vais illustrer ca par un exemple :
A ton initialisation tu as par exemple
Trait[0] (x:10, y:10, taille:30)
Trait[1] (x:10, y:15, taille:20)
Trait[2] (x:10, y:20, taille:50)

Ensuite tu tries tes éléments par taille donc tu as
Trait[0] (x:10, y:15, taille:20)
Trait[1] (x:10, y:10, taille:30)
Trait[2] (x:10, y:20, taille:50)

Le truk c'est que quand tu vas afficher Trait[0] en premier
ben il sera tjr affiché en position verticale 15 et non en 10
comme il devrait l'être normalement.

Une résolution:

import java.awt.Color; 
import java.awt.Graphics; 

public class Trait 
{ 
	public int taille;

	public Trait(int aTaille) 
	{    
		taille = aTaille; 
	} 
    
	public void dessiner (Graphics g, int coordX, int coordY) 
	{ 
		g.setColor(Color.blue);
		g.drawLine(coordX, coordY, (coordX +taille), coordY);
    } 
}

import java.applet.*; 
import java.awt.*; 

public class Rect extends Applet implements Runnable 
{ 
	private Thread t;                  //création d'un thread t 
	private Trait tab[];               //création d'un tableau tab de type Traie 
    
	public Rect()                     //constructeur 
	{    
		tab = new Trait[10] ;            //initialisation du tableau tab de Traie de taille 10 
		t = new Thread(this); 
		
		for(int i = 0;i < 10; i++)                     //on génére 10 traits 
		{    
			int taille = (int) (Math.random() * 400 +1);   //pour la taille aléatoire d'un traie 
			tab[i]= new Trait(taille);    
		} 
		
		t.start(); 
	} 

	public void paint (Graphics g) 
	{    
		setSize(500, 200);                                    //taille de l'applet 
		g.drawRect(10,10,getSize().width - 20 ,getSize().height - 20);   //pour dessiner un rectangle 
	   
		for(int i = 0; i < 10; i++)                     //pour les 10 traits du tableau tab 
		{ 
			tab[i].dessiner(g, 10, 10 + (i * 5));               //on dessine un trait 
		} 
	} 

	public void triselection()                  //tri 
	{ 
		int i,j,m; 

		for(i=0;i<(tab.length-1);i++) 
		{ 
		 m = i; 
		 for(j=i+1;j<tab.length;j++) 
			if(tab[j].taille < tab[m].taille) 
			   m = j; 
		 if (m != i) 
			{ Trait c = tab[i]; 
			  tab[i] = tab[m]; 
			   tab[m] = c; 
			} 
		  
		} 
	} 

	public void run() 
	{    
		triselection();               //lance le tri sélection 
		repaint();                  //permet de réactualiser l'applet 
	} 
} 

Bonne chance,
Niroken