Ordenação de List

Tenho um programa que está rodando, mas não consegui fazer a ordenação alfabética do List, vejam se alguém pode me ajudar !!
Eu rodo no AppletViewer e na interface tem um botão para ordenar os nomes salvos no List, mas não sei fazer essa rotina. Obrigado, Phill.

import java.awt.*;
import java.applet.*;
public class Phill extends Applet
{   
    Button gravar;    
    Button mostrar;
    Button delone;
    Button delall;
    TextField edt;
    Label lbl;
    List lista;
    
  public void init()
    {
    	setBackground(Color.blue);
      	Label lbl=new Label("Digite os nomes: ",Label.CENTER);
    	gravar=new Button("Salva");
    	mostrar=new Button("Ordena");
    	delone=new Button("Apaga seleção na lista");
    	delall=new Button("Apaga lista inteira");
        lista=new List (10,false);
        edt=new TextField(15);
        add(lbl);
        add(edt);
        add(lista);
        add(gravar);
        add(mostrar);
        add(delone);
        add(delall);
    } 
  public boolean action(Event evt,Object obj) 
    {
    	if (evt.target instanceof Button)
    		Funcao(obj); 
    	return true;
    }    
  public void Funcao(Object label)
    {
    	 if (label=="Salva")
    	 {
    	 	lista.add(edt.getText());
    	 	edt.setText("");
    	 }
    	 else if (label=="Ordena")
    	 {
    	     	//Esse que falta !! É a ordenação do List ?Lista?.
    	 }
    	 else if (label=="Apaga seleção na lista")
    	 {
    	 	lista.delItem(lista.getSelectedIndex()); 
    	 }
    	 else if (label=="Apaga lista inteira")
    	 {
    	 	lista.clear();
    	 }
    }
}

EDIT [ Thingol ] - Por favor, use os tags [ code ] para delimitar seu código. É fácil, use o botãozinho [ code ] que aparece quando você vai criar ou editar uma nova mensagem.

Classe Pessoa


public class Pessoa implements Comparable {

		private Integer idade;
		private String nome;
		
		
		
		/**
		 * @return the idade
		 */
		public Integer getIdade() {
			return idade;
		}



		/**
		 * @param idade the idade to set
		 */
		public void setIdade(Integer idade) {
			this.idade = idade;
		}



		/**
		 * @return the nome
		 */
		public String getNome() {
			return nome;
		}



		/**
		 * @param nome the nome to set
		 */
		public void setNome(String nome) {
			this.nome = nome;
		}



		public int compareTo(Object o) {			
			return idade - ((Pessoa) o).getIdade();
		}
}

Classe aonde você vai usar lista

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class Teste {

	/**
	 * @param args
	 */
	
	
	public static void main(String[] args) {
		List<Pessoa> lista = new ArrayList<Pessoa>();
		
		Pessoa p1 = new Pessoa();
		p1.setIdade(14);
		p1.setNome("Fulano");
				
		lista.add(p1);
		
		Pessoa p2 = new Pessoa();
		p2.setIdade(4);
		p2.setNome("Ciclano");
				
		lista.add(p2);		
		
		Pessoa p3 = new Pessoa();
		p3.setIdade(54);
		p3.setNome("Beltrano");
				
		lista.add(p3);		
		
		Collections.sort(lista);
		
		for(Pessoa p : lista) {
			System.out.println(p.getNome() + " " + p.getIdade());
		}
	}

}

a) Pegue os itens com getItems() e jogue em um array de String
b) Ordene os itens com Arrays.sort
c) Remova todos os itens da lista com removeAll
d) Adicione-os todos novamente (neste caso, você terá de percorrer o array de String que foi obtido no item a) e ordenado no item b)

Você pode ordenar o list direto usando

Collections.sort(suaLista)

Mas você terá que fazer a classe que está dentro da lista implementar Comparable. Se sua classe não implementar, você também pode criar um filho de comparator para fazer essa tarefa e usar o mesmo método:
Collections.sort(suaLista, seuComparator).

Outra coisa, na maior parte das vezes é preferivel ordenar strings usando um Collator. O Collator leva em consideração a ordenação como seria num dicionário do país do usuário. Por exemplo, no nosso caso, A seria igual a Á.

O Collator já é um Comparator de Strings.

Ele está pedindo a ordenação dos itens de uma lista (java.awt.List), não de uma lista (java.util.List). É por isso que sugeri fazer todos aqueles passos estapafúrdios.

:smiley: Mas fica a dica para quem quiser utilizar a ordenação de uma java.util.List

eheheh

Crie uma classe que extenda JList ou java.awt.List que permita ordenação.

Veja este tutorial interessante:
http://www.joconner.com/javai18n/articles/SortedLists.html

Thiago.correa, valeu mesmo, cara, mas é justamente esse o problema, é um java.awt.list !!
Thingol, mais ou menos eu sei que tem que fazer essas etapas, mas não sei como fazer, pois sou fraco em arrays, mas estou tentando umas maluquices.
vinigodoy, obrigado, estou tentando.
Vejam codigo como está:
[
import java.awt.;
import java.applet.
;
import java.util.Collections;
import java.util.Comparator;
//import java.lang.String;

public class Phill extends Applet
{
Button gravar;
Button mostrar;
Button delone;
Button delall;
TextField edt;
Label lbl;
List lista;
String nomes[];//novo
int x;//novo

public void init()
{
setBackground(Color.blue);
Label lbl=new Label(“Digite os nomes: “,Label.CENTER);
gravar=new Button(“Salva”);
mostrar=new Button(“Ordena”);
delone=new Button(“Apaga seleção na lista”);
delall=new Button(“Apaga lista inteira”);
lista=new List (10,false);
edt=new TextField(15);
String nomes[]=new String[10];//novo
add(lbl);
add(edt);
add(lista);
add(gravar);
add(mostrar);
add(delone);
add(delall);
}
public boolean action(Event evt,Object obj)
{
if (evt.target instanceof Button)
Funcao(obj);
return true;
}
public void Funcao(Object label)
{
if (label==“Salva”)
{
//lista.add(edt.getText());
for (x=0;x<10;x++)
{
lista.add(edt.getText());
nomes[x]=edt.getText();
//edt.setText(””);
x=x+1;
}
edt.setText("");
}
else if (label==“Ordena”)
{
//nomes.sort(String[]);
//Collections.
//nomes.collection.sort(nomes[x]);

        lista.clear();	
	 	lista.add(nomes[x]);
	 	//Esse que falta !!    	    
     }        
	 else if (label=="Apaga seleção na lista")
	 {
	 	lista.delItem(lista.getSelectedIndex()); 
	 }
	 else if (label=="Apaga lista inteira")
	 {
	 	lista.clear();//  ou:   lista.removeAll();
	 }
}

}

]

Thingol, como usar os TAGS ??

[quote=thingol]a) Pegue os itens com getItems() e jogue em um array de String
b) Ordene os itens com Arrays.sort
c) Remova todos os itens da lista com removeAll
d) Adicione-os todos novamente (neste caso, você terá de percorrer o array de String que foi obtido no item a) e ordenado no item b)[/quote]

Atenção: não testei o que estou escrevendo abaixo!

String[] itens = lista.getItems(); // [a]
Arrays.sort (itens); // [b]
lista.removeAll(); // [c]
for (int i = 0; i &lt itens.length; ++i) { // [d]
    lista.add (itens[i]);
}

Dá a impressão que o browser é para você um painel de controle de avião. Por favor, observe melhor os instrumentos :stuck_out_tongue:

Talvez me pareça mesmo um painel de avião !! Ha, ha !! Valeu, cara, já vou testar o que você me mandou, depois te aviso !!
Phill

[quote=phill]Talvez me pareça mesmo um painel de avião !! Ha, ha !! Valeu, cara, já vou testar o que você me mandou, depois te aviso !!
Phill[/quote]

Boa sorte, e não esqueça o transponder desligado :stuck_out_tongue:

Boas festas!

Não rola, não compila !!!
Ficou assim:

public void Funcao(Object label)
{
if (label==“Salva”)
{

	 	String[] items = lista.getItems(); // [a]
        nomes.sort (items); // [b] ESSA LINHA TÁ DANDO ERRO !!!
        // O MÉTODO NOMES.SORT NÃO ESTÁ CORRETO OU NÃO SE APLICA !!!
        lista.removeAll(); // [c]
        for (int i = 0; i < items.length; ++i) // [d]
        { 
             lista.add (items[i]);
        }

	 	
	   //lista.add(edt.getText());
 	     //for (x=0;x<10;x++)
 	     //{
 	     //	lista.add(edt.getText());
 	  	 //   nomes[x]=edt.getText();
 	  	 //   //edt.setText("");
 	  	  //  x=x+1;
 	     //}
	 	  edt.setText("");  
	 }

Primeiro usei com Arrays.sort, mas não deu certo, depois coloquei o nome do meu array, que é NOMES. Só para explicar.
Phill

[quote=phill]Não rola, não compila !!!
[/quote]

Tio, eu escrevi Arrays.sort, não nomes.sort.

Se precisar do import correto, é

import java.util.Arrays;

Yung, estou estudando seu tutorial, valeu, cara !!!
Phill

Vou utilizar o import para ver !! Como não rodou com Arrays, tentei o nome do array, só isso, sobrinho !!! Tô aprendendo, um dia eu chego lá !!!
Valeu mesmo, cara !!
Phill

Agora compilou, mas tem coisa errada, pois não funciona como deveria !!
Dá uma olhada prá mim !!! Aí vai o cde inteiro, atualizado. Desculpa aí, se eu estou em cima, mas tô trecisando !! Valeu !
Phill

import java.awt.;
import java.applet.
;
import java.util.Collections;
import java.util.Comparator;
import java.util.Arrays;
import java.lang.String;

public class PFFelipe extends Applet
{
Button gravar;
Button mostrar;
Button delone;
Button delall;
TextField edt;
Label lbl;
List lista;
String nomes[];//novo
int x;//novo

public void init()
{
setBackground(Color.blue);
Label lbl=new Label(“Digite os nomes: “,Label.CENTER);
gravar=new Button(“Salva”);
mostrar=new Button(“Ordena”);
delone=new Button(“Apaga seleção na lista”);
delall=new Button(“Apaga lista inteira”);
lista=new List (10,false);
edt=new TextField(15);
String nomes[]=new String[10];//novo
add(lbl);
add(edt);
add(lista);
add(gravar);
add(mostrar);
add(delone);
add(delall);
}
public boolean action(Event evt,Object obj)
{
if (evt.target instanceof Button)
Funcao(obj);
return true;
}
public void Funcao(Object label)
{
if (label==“Salva”)
{
lista.add(edt.getText());
for (x=0;x<10;x++)
{
//lista.add(edt.getText());
nomes[x]=edt.getText();
edt.setText(””);
x=x+1;
}
edt.setText("");
}
else if (label==“Ordena”)
{

        String[] items = lista.getItems(); 
        Arrays.sort (items);  
        lista.removeAll(); 
        for (int i = 0; i < items.length; ++i) 
        { 
             lista.add (items[i]);
        }

        
        //nomes.sort(String[]);
        //Collections.
        //nomes.collection.sort(nomes[x]);
        
        lista.clear();	
	 	lista.add(nomes[x]);
	 	//Esse que falta !!    	    
     }        
	 else if (label=="Apaga seleção na lista")
	 {
	 	lista.delItem(lista.getSelectedIndex()); 
	 }
	 else if (label=="Apaga lista inteira")
	 {
	 	lista.clear();//  ou:   lista.removeAll();
	 }
}

}