Lista de Listas

21 views
Skip to first unread message

Jorge Luis

unread,
Feb 28, 2015, 9:37:28 AM2/28/15
to ce...@googlegroups.com, pbjug
Olá pessoal é o seguinte.

Eu estou fazendo uma tela de consulta em JavaFX com o componente TreeTableView até ai tudo beleza quanto eu trabalho com registros fixos que sei onde começa e onde termina.

O meu problema é quando eu preciso fazer isso dinamicamente exemplo:

Tenho uma lista de produtos que seguem assim:

Empresa Grupo Departamento Seção Produto Qtde Valor
Matriz Bebidas Refrigerante Refrigerante 2l Coca Cola 1 0,5
Filial Bebidas Refrigerante Refrigerante 2l Fanta 2 1,0
Deposito Bebidas Refrigerante Refrigerante 1l Coca Cola 6 3,0
Matriz Bebidas Cerveja Lata Antartica 80 40,0
Filial Bebidas Cerveja Lata Skol 1 0,5
Deposito Bebidas Cerveja Garrafa 600ML Skol 97 48,5
Matriz Bebidas Cerveja Garrafa 600ML Brahma 1 0,5
Filial Limpeza Sabonete Liquido Nivea 56 28,0
Deposito Limpeza Alcool Liquido Dragão 542 271,0
Matriz Limpeza Sabonete Barra Nivea 24 12,0
Filial Limpeza Alcool Gel Dragão 93 46,5
Deposito Limpeza Alcool Gel Parma 487 243,5
Matriz Limpeza Sabonete Barra Lux 234 117,0
Filial Limpeza Sabonete Liquido Lux 298 149,0
Filial Limpeza Sabonete Liquido Lux 88 44,0

Agora eu preciso distribuir os produtos assim no TreeTableView
Total
--Empresa
----Grupo
------Departamento
--------Seção
----------Produto

A exibição no TreeTableView, como já disse antes, ñ será o maior problema.
O problema é que ñ estou conseguindo fazer uma lista de listas dinâmica. Já vi Lista Ligadas, Multi Listas, Arrays Multi Dimensionais, Lista de Listas, Hash e varios outros a assuntos ligados a listas e não encontrei algo que me satisfazer-se, se algum de vocês tiver um exemplo de listas que chegue nesse nivel de nó ficaria muito grado.

Att
Jorge Luis

Hugo Castro Araujo

unread,
Mar 2, 2015, 7:25:09 AM3/2/15
to ce...@googlegroups.com, pbjug
Caro Jorge Luis,

Não sei ao certo se entendi você corretamente, mais a exibição de tree precisa obrigatoriamente definir em cada "Node" qual é o seu respectivo "parent Node". Nesse caso, você poderá de 3 coisas:

1) Utilizar o "DefaultTreeNode" passando o 2o parâmetro no construtor, ou simplesmente usando o método "setParent";

2) Ordenar tua lista de acordo com a ordem de campos acima, algo semelhante a isso:
      (Obs:O código abaixo pode ter erro, pois copiei de um código que tenho e fiz algumas mudanças)

       class MeuComparator implements Comparator {
              private String[] atributos;
       protected IndexSortComparator(String[] atributos) {
       this.atributos = columns;
       }

       public int compare(Object obj1, Object obj2) {
       int comp = 0;
                       Class<?> clazz = obj1.getClass();
       for ( String att: this.atributos ) {
                               Field field = clazz.getDeclaredField(att);
       comp = (String) field.get(obj1).compareTo((String)field.get(obj1));
       if ( comp != 0 ) {
       break;
       }
       }
       return comp;
       }
       }

       ....
       List<?> minhaLista = <instancia a lista>
       String[] atributos = {"Empresa", "Grupo", "Departamento", "Secao", "Produto"}
       Comparator meuComparator = new MeuComparator(atributos);

       Collections.sort(minhaLista, meuComparator);


3) Como os atributos são conhecidos, talvez um simples "for" seja o suficiente (isto é, não seria necessário usar recursividade):
    (mais ou menos conforme código abaixo)


       List<?> minhaLista = <instancia a lista>;

       String[] atributos = {"Empresa", "Grupo", "Departamento", "Secao", "Produto"}
       Comparator meuComparator = new MeuComparator(atributos);
       Collections.sort(minhaLista, meuComparator);

       private int ultEmpresa;
       private int ultGrupo;
       private int ultDepartamento;
       private int ultSecao;
       private int ultProduto;

       TreeNode child = null;
       TreeNode parent = null;

       Iterator itr = minhaLista.iterator();
       while(itr.hasNext()) {
          Object obj = itr.next();
           if ( (ultEmpresa == null || ultEmpresa != obj.getEmpresa() ) ||
                (ultGrupo  == null || ultGrupo != obj.getGrupo() ) ||
                (ultDepartamento  == null || ultDepartamento  != obj.getDepartamento() ) ||
                (ultSecao  == null || ultSecao != obj.getSecao() ) ||
                (ultProduto  == null || ultProduto != obj.getProduto() ) {

                 ultEmpresa = obj.getEmpresa();
                 ultGrupo = obj.getGrupo();
                 ultDepartamento = obj.getDepartamento();
                 ultSecao = obj.getSecao();
                 ultProduto = obj.getProduto();

                 parent = child;
           }
           child = new DefaultTreeNode(obj.getDescricaoCompleta(), parent);
       }


--
Você recebeu essa mensagem porque está inscrito no grupo "CEJUG" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para cejug+un...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para ce...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/cejug.
Para mais opções, acesse https://groups.google.com/d/optout.

Jorge Luis

unread,
Mar 25, 2015, 8:48:05 AM3/25/15
to ce...@googlegroups.com
Bom dia Hugo e pessoal do grupo.

Bem consegui resolver o problema com esse lance de lista de listas com JavaFX muito obrigado ao Hugo (pois uma parte da solução passa pelo item 2 da sua resposta e a outra parte se encontra nesse link http://www.lestard.eu/2015/treetable_datamodel/) e ao grupo por ceder e manter esse espaço sempre ativo e operante.

Sim vou também disponibilizar um fonte com o exemplo abaixo funcionando assim que eu terminar de resolver o meu problema atual com esse tal de TreeTableView

Mais uma vez obrigado e a medida que eu for aprendendo a mexer eu chegar nesse ponto aqui
https://wiki.openjdk.java.net/display/OpenJFX/TreeTableView+User+Experience+Documentation

Att Jorge Luis



Date: Mon, 2 Mar 2015 09:25:06 -0300
Subject: Re: [CEJUG] Lista de Listas
From: hugo...@gmail.com
To: ce...@googlegroups.com
CC: pb...@googlegroups.com

Felipe Wender Mendonça

unread,
Mar 25, 2015, 9:07:51 AM3/25/15
to ce...@googlegroups.com
+1 Mass Jorge. Bacana vc compartilhar o conhecimento conosco \o/ Abraço!
Felipe Wender Mendonça Martins
Graduando em Análise e Desenvolvimento de Sistemas
Fatene

Hugo Castro Araujo

unread,
Mar 25, 2015, 9:51:11 AM3/25/15
to ce...@googlegroups.com
+1 Legal... Conhecimento precisa ser compartilhado sempre

Fabrício Cabral

unread,
Mar 25, 2015, 10:29:48 AM3/25/15
to ce...@googlegroups.com
+1
--fx
Reply all
Reply to author
Forward
0 new messages