JTable [RESOLVIDO]

17 respostas
lucaslzl

Bom Dia,
eu gostaria de saber se alguém conhece um bom tutorial ensinando a criar um Table Model, pois li aqui mesmo que não é bom usar o Default Model, porque usa muita memória, faz ações inúteis,etc. Os exemplos que vi não entendi como implementar no meu problema.

Obrigado.

17 Respostas

FabricioPJ

Alguns exemplos:

http://www.guj.com.br/posts/list/225793.java#1156821
http://www.guj.com.br/posts/list/149034.java#808003
http://www.guj.com.br/posts/list/132698.java#714736
http://www.guj.com.br/java/231928-morte-definitiva…ao-default-table-model#1399642
http://www.javasimples.com.br/mundo-java/death-to-…odel-abstracttablemodel-rulez/
http://markytechs.wordpress.com/2009/05/29/objecttablemodel

CristianPalmaSola10

Tutorial não conhece mas aqui tem um exemplo pra voce

package com.urbainski.model;

import com.urbainski.bo.CursoBO;
import com.urbainski.entidade.Curso;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 * @author Cristian Urbainski
 * @since 29/06/2012
 */
public class TableModelCurso extends AbstractTableModel {
    
    private List<Curso> listaCurso;

    public TableModelCurso()
    {
        regarregarLista();
    }
    
    public int getRowCount() {
        return listaCurso.size();
    }

    public int getColumnCount() {
        return 4;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        
        if(columnIndex == 0)
        {
            return listaCurso.get(rowIndex).getNome();
        }
        else if(columnIndex == 1)
        {
            return listaCurso.get(rowIndex).getMedia();
        }
        else if(columnIndex == 2)
        {
            return listaCurso.get(rowIndex).getDuracao();
        }
        else if(columnIndex == 3)
        {
            return listaCurso.get(rowIndex).getInstituicao().getNome();
        }
        
        return "";
    }

    @Override
    public String getColumnName(int column) {
        if(column == 0)
        {
            return "Nome Curso";
        }
        else if(column == 1)
        {
            return "Média";
        }
        else if(column == 2)
        {
            return "Duração";
        }
        else if(column == 3)
        {
            return "Nome Instituição";
        }
        
        return "";
    }
    
    public void regarregarLista()
    {
        try {
            listaCurso = new CursoBO().buscarTodosCursos();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public List<Curso> getListaCurso() {
        return listaCurso;
    }
    
}
D
package com.urbainski.model;

import com.urbainski.bo.CursoBO;
import com.urbainski.entidade.Curso;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 * @author Cristian Urbainski
 * @since 29/06/2012
 */
public class TableModelCurso extends AbstractTableModel {
    
    private List<Curso> listaCurso;

    public TableModelCurso()
    {
        loadCursos();
    }
    
    public int getRowCount() {
        return listaCurso.size();
    }

    public int getColumnCount() {
        return 4;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        
        switch(columnIndex) {
           case 0: return listaCurso.get(rowIndex).getNome();
           case 1: return listaCurso.get(rowIndex).getMedia();
           case 2: return listaCurso.get(rowIndex).getDuracao();
           case 3: return listaCurso.get(rowIndex).getInstituicao().getNome();
           default:
              return "";
        }

    }

    @Override
    public String getColumnName(int column) {
        switch(column) {
            case 0: return "Nome Curso";
            case 1: return "Média";
            case 2: return "Duração";
            case 3: return "Nome Instituição";
            default: return "";
         }
    }

    public void loadCursos() {
        try {  
            listaCurso = new CursoBO().buscarTodosCursos();  
        } catch (Exception e) {  
            e.printStackTrace();  
        } 
    }

    public List<Curso> getListaCurso() {
        return listaCurso;
    }
    
}

um codigo mais elegante ai so uma dica...

ViniGodoy
dsntnow:
um codigo mais elegante ai so uma dica...

Não vejo no que trocar if por switch deixa o código mais elegante.
São instruções rigorosamente equivalentes, tanto em sintaxe, quanto em porquice.

Se é só para deixar mais curto, ele poderia ter feito:

package com.urbainski.model;

import com.urbainski.bo.CursoBO;
import com.urbainski.entidade.Curso;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class TableModelCurso extends AbstractTableModel {
    
    private List<Curso> listaCurso;

    public TableModelCurso() {
        regarregarLista();
    }
    
    public int getRowCount() {
        return listaCurso.size();
    }

    public int getColumnCount() {
        return 4;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        if(columnIndex == 0) return listaCurso.get(rowIndex).getNome();
        if(columnIndex == 1) return listaCurso.get(rowIndex).getMedia();
        if(columnIndex == 2) return listaCurso.get(rowIndex).getDuracao();
        if(columnIndex == 3) return listaCurso.get(rowIndex).getInstituicao().getNome();
        return "";
    }

    @Override
    public String getColumnName(int column) {
        if(column == 0) return "Nome Curso";
        if(column == 1) return "Média";
        if(column == 2) return "Duração";
        if(column == 3) return "Nome Instituição";
        return "";
    }
    
    public final void regarregarLista()
    {
        try {
            listaCurso = new CursoBO().buscarTodosCursos();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public List<Curso> getListaCurso() {
        return Collections.unmodifiableList(listaCurso);
    }    
}

Agora, se quer deixar o código mesmo mais elegante, o ideal é usar polimorfismo, ou reflexão (como faz o ObjectTableModel).

CristianPalmaSola10

Boa dica ViniGodoy, estou dando uma olhada nisso, tentar fazer alguma coisa nesse sentido, e sinceramente dsntnow eu não achei que meu codigo ficou mais elegante porque colocou nome de metodo em ingles e trocou alguns ifs por switch, é so minha opinião.

D

verdade é que não costumo usar if assim. uso somente em c, porque ouvi falar que da uma diminuida no “assembly” gerado.

ViniGodoy

Acho que a maioria dos compiladores faz um bom trabalho otimizando esse tipo de código hoje em dia.
Especialmente os compiladores mais antigos, como os do C e do C++. Em compilação O3, eles fazem verdadeiros milagres.

lucaslzl

Obrigado pela ajuda!

Vou tentar entender cada parte do código para monta-lo da maneira que preciso.

lucaslzl

Galera, fiquei com algumas perguntas, se puderem responde-las agradeço.
Será que alguém pode me explicar o que está acontecendo em cada parte desse código?
Ainda não aprendi a parte de “List”, “Curso” seria o nome da classe que vai ter o JTable?
O que é esse CursoBO?

Obrigado.

CristianPalmaSola10

List é uma inteface para lista, ArrayList a implementa, e varios outros.

Curso é uma classe que representa uma coisa existente no mundo real, um curso de uma faculdade nesse casso.

CursoBO (BO = Busness Object) é a classe aonde faça todas as interações com o banco de dados como ler registros, gravar, alterar e excluir.

lucaslzl

Teria como você postar o método “buscarTodosCursos();”?

CristianPalmaSola10

Sem problemas, vou postar a classe inteira

package com.urbainski.bo;

import com.urbainski.criteria.UrbainskiCriteria;
import com.urbainski.dao.bo.GenericBO;
import com.urbainski.entidade.Curso;
import java.util.List;

/**
 * @author Cristian Urbainski
 * @since 27/05/2012
 */
public class CursoBO extends GenericBO {

    public Boolean salvar(Curso c) throws Exception {
        try {
            getUrbainskiDao().beginTras();
            getUrbainskiDao().salvar(c);
            getUrbainskiDao().commitTrans();
            return Boolean.TRUE;
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }

    public Boolean atualizar(Curso c) throws Exception {
        try {
            getUrbainskiDao().beginTras();
            getUrbainskiDao().altualizar(c);
            getUrbainskiDao().commitTrans();
            return Boolean.TRUE;
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }

    public Boolean excluir(Curso c) throws Exception {
        try {
            getUrbainskiDao().beginTras();
            getUrbainskiDao().excluir(c);
            getUrbainskiDao().commitTrans();
            return Boolean.TRUE;
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }

    public List&lt;Curso&gt; buscarTodosCursos() throws Exception
    {
        return new UrbainskiCriteria(getUrbainskiDao(), Curso.class, "curso").list();
    }
}
lucaslzl

Obrigado

CristianPalmaSola10

E ai lucaslzl conseguiu tira todas as suas duvidas, ou ainda restou alguma ?

Qualque coisa posta ai

Ate mais

lucaslzl

Eu sou novo no Java, e em qualquer linguagem na verdade. Entrei nessa área faz 1 ano, depois que larguei a faculdade de geografia. O que sei de Java foi o que vi em video aulas, e o que li no livro do Deitel, ainda preciso aprender bastante, e estou com algumas duvidas mas, vou ler mais o livro para ver se soluciono elas, a maior parte deve ser por causa de conceitos ainda não aprendidos. Obrigado pela ajuda! :slight_smile:

lucaslzl

Obrigado a todos!!

CristianPalmaSola10

Boa sorte para voce entaum parceiroo…

Criado 6 de julho de 2012
Ultima resposta 19 de jul. de 2012
Respostas 17
Participantes 5