Problema com GlazedList

9 respostas
P

Meu código tá quase igual a esse do fórum:
http://www.guj.com.br/java/213145-autocomplete-com-glazedlists

Mas dá erro:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.ArrayList cannot be cast to ca.odell.glazedlists.SortedList

pedaços do meu código:

private SortedList<Usuario> u = new SortedList<Usuario>(new BasicEventList<Usuario>());
private EventComboBoxModel<Usuario> uComboBoxModel = new EventComboBoxModel<Usuario>(u);
private EventTableModel<Usuario> uTableModel = new EventTableModel<Usuario>(u, GlazedLists.tableFormat(
        new String[] {...vários campos..}

pego os dados:

o Comparador:

TableComparatorChooser<Usuario> tableSorter = TableComparatorChooser.install(tblList, (SortedList<Usuario>) dados,TableComparatorChooser.SINGLE_COLUMN);

Onde está o erro? :?:

9 Respostas

E

A declaração da variável “dados” e o tipo do objeto retornado por listarTodos(), por obséquio.

P
List dados=null;

e

List listarTodos()
E

Sei. listarTodos() retorna um objeto de uma classe que implementa a interface java.util.List (OK) mas gostaria de saber a classe exata que ele retorna. Pelo que imagino, deve ser java.util.ArrayList, pela mensagem de erro que foi gerada.

Você precisa copiar esse java.util.ArrayList dentro de um SortedList, não dá para simplesmente fazer um cast como você fez.

Sempre tome cuidado com casts - casts não convertem os dados (apenas as conversões de primitivos, que por um abuso de linguagem se chamam também casts em Java, fazem alguma conversão).

P

Meu listar todos é assim:

try{
		   List<Usuario> l = new ArrayList<Usuario>();
		   PreparedStatement stmt = (PreparedStatement) c.prepareStatement(sql);
		    ResultSet rs = stmt.executeQuery();
		        while (rs.next()){
                              Usuario... 
                              carrega os dados
                        l.add(u);//adiciona o Usuario a lista
			 }
		        stmt.close();
		        rs.close();
				return l;
			}catch(SQLException sqle){
				Utilitarios.printSQLException(sqle);
				
			}

A classe usuário é igual a sua Customer, implementa Comparable

public class Usuario implements Comparable<Usuario>

Não entendi.Dá para dar exemplo?

E

Acho que voce poderia trocar o new ArrayList por algo parecido com essa declaraçao.

P

Cara, eu coloquei assim no listarTodos:

E sumiu o erro de execução!Mas a tela aparece SEM os dados, só com o cabeçalho da JTable. :roll:

O detalhe é que os dados estão corretamente na lista, dei um size e tá tudo carregado!

Ironlynx

PaulH,
nobre companheiro de GTalk, acho que seria interessante você salientar que você tem 60mil usuários sendo exibidos, o que eu duvido que o GlazedLists aguentará sem paginar.Pegue o Autocomplete e misture com esse daqui do entanglement: http://www.guj.com.br/java/210200-percorrer-linhas-de-um-jtable

Assim, vc só exibiria umas 4 colunas, e quando o usuário clicar em cima, mostrava tudo ao lado! :wink:

P

Ironlynx, já sei o que você está pensando e a resposta é não!Eu não coloquei todos os usuários para serem listados no listarTodos()!Eu limitei aos 100 primeiros somente!Testei a consulta e ela funciona OK!
Ainda assim, não mostra NADA na JTable além do cabeçalho… :cry:

Minha jtable toda:

private JTable getTblList() {
    	List<Usuario> dados=null;
    	String query="minha consulta..."//traz os 100 primeiros users
       if (tblList == null) {
        	try{
      		 dados = new UsuarioDao().listarTodos(Conexao.getConnection(), query);
      		 String num="Número de Registros:"+dados.size();
      		 contador.setText(num);      		
      		}catch(SQLException sqlex){
      			Utilitarios.printSQLException(sqlex);
      	JOptionPane.showMessageDialog( null,"Erro na SQL", "Erro encontrado",JOptionPane.ERROR_MESSAGE );
      		}
            tblList = new JTable();
            tblList.setModel(uTableModel);
           TableComparatorChooser<Usuario> tableSorter = TableComparatorChooser.install(tblList, (SortedList<Usuario>) (dados),TableComparatorChooser.SINGLE_COLUMN); 
            
           
        }
        return tblList;
    }
P

Acho que meu programa tem algo contra GlazedList…simplifiquei:

EventSelectionModel<Usuario> selectionModel = new EventSelectionModel<Usuario>(usuariios); tblList.setSelectionModel(selectionModel);

Mas ainda assim, nenhum dado é mostrado! :cry:

uso a versão 1.8.0 java15.jar!

Criado 22 de agosto de 2012
Ultima resposta 23 de ago. de 2012
Respostas 9
Participantes 3