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.
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)
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 Á.
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.
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();
}
}
[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 < itens.length; ++i) { // [d]
lista.add (itens[i]);
}
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