Adicionar um vetor em uma coluna de uma JTable

6 respostas
furacao123

Aew galera to com a seguinte duvida…tenho uma tabela onde uma determinada coluna eu quero adicionar um vetor de Strings

por exemplo:

tbHorarios.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {valores[]} }, new String [] { "Nome", "Ent. 1", "Sai. 1", "Ent. 2", "Sai. 2", "Ent. 3", "Sai. 3", "Ent. 4", "Sai. 4" } ));

na couna Nome eu quero adicionar o vetor valores isso é popolar varias linhas da coluna Nome…esse valores vem de um select do banco onde eu guardo cada registro em um indice do vetor

esse codigo eu estou usando na pos inicializaçao no netbeans

Obrigado

6 Respostas

F

Olá amigo;

Dá uma olhada nesta classe:

package util;

import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import bean.Ocorrencia;

public class ModelTableOco extends DefaultTableModel {
   private Vector dados = null;

   public ModelTableOco(Vector dados) {
      this.dados = dados; // recebe os dados do SQL através de um vetor
   }

   @Override
   public int getColumnCount() {
      return 2; //quantidade de colunas do jTable
   }

   public int getRowCount() {
      if (this.dados == null) {
         return 0;
      } else {
         return this.dados.size();
      }
   }

   public Object getValueAt(int row, int column) {
      Ocorrencia oc = (Ocorrencia) this.dados.elementAt(row); //convertendo os dados em objeto (Bean)
         
      Object retorno = null;
      if (column == 0) {
         retorno = oc.getOcoData(); // valor para a coluna 1
      } else if (column == 1) {
         retorno = oc.getOcoDescr(); // valor para a coluna 2
      } 
      return retorno;
    }

   public String getColumnName(int column) {
      String columnName = "";
      if (column == 0) {
         columnName = "Data:"; //descrição da coluna 1
      } else if (column == 1) {
         columnName = "Ocorrencia:"; //descrição da coluna 2
      }
      return columnName;
   }

    public boolean isCellEditable(int row, int col) {
        return false;
    }
}

Fácil… aí você joga este modelo na JTable como havia fazendo:

ModelTableOco model = null;

        model = new ModelTableOco(vt); //chama a classe com o vetor vindo do banco
        jTable1.setModel(model); // seta o model
        jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); //ajusta automaticamente o tamalho das colunas
        jTable1.getColumnModel().getColumn(1).setPreferredWidth(1000); // ajusta o tamanho de determinada coluna

Tá na mão, mastigadinho… comentei a linha para que outros possam usufruir, apresnder e aprimorar!

Qualquer coisa posta novamente!

Abraço

Marco Aurélio

ViniGodoy
  1. Não use Vector. Ele foi descontinuado na versão 1.2 do Java. No lugar use o ArrayList, preferencialmente tipando ele através dos Generics, para evitar casts. Aqui tem exemplos de como usa-lo e mais explicações do porque o Vector deve ser evitado:
    http://www.guj.com.br/posts/list/74068.java#389435

  2. Não use o DefaultTableModel. Quem usa, vai imediatamente para o inferno. Ele é pouco flexível, gera duplicidade dos dados. O ideal é fazer diretamente um filho de AbstractTableModel, o que sai muito parecido com o que o Fanama já fez.

Faça seu próprio model. Gera um código mais simples, mais limpo, mais fácil de manter e reutilizável. Poupa diversos problemas, evita a duplicação desnecessária de dados.

Para mais informações, leia esses tutoriais da Informit:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472

E veja essas classes utilitárias para JTable:
http://www.guj.com.br/posts/list/100793.java

Ou esse TableModel de exemplo:
http://www.guj.com.br/posts/list/98452.java#530523

F

vivendo e aprendendo;

Fui ajudar e acabei sendo ajudado, maravilha.

Vou estudar os posts, da maneira que postei está funcionando em minha aplicação, mas vou procurar usar o que sugeriu!

Obrigado!

Marco Aurélio

furacao123

vlw pela ajuda eu estava dando uma tentada aqui e ja ia fazer uma "coxambra"

fazer um contador e ir adicionando linhas em branco na minha JTable pra depois jogar os valores nelas

public void NumeroLinhasTabela() { int i = 0; while (i < valoresBanco.length - 1) { ((DefaultTableModel) tbHorarios.getModel()).addRow(new Vector()); i++; } }

pelo menos usei a criatividade :smiley:

M

ViniGodoy:
1. Não use Vector. Ele foi descontinuado na versão 1.2 do Java. No lugar use o ArrayList, preferencialmente tipando ele através dos Generics, para evitar casts. Aqui tem exemplos de como usa-lo e mais explicações do porque o Vector deve ser evitado:
http://www.guj.com.br/posts/list/74068.java#389435

  1. Não use o DefaultTableModel. Quem usa, vai imediatamente para o inferno. Ele é pouco flexível, gera duplicidade dos dados. O ideal é fazer diretamente um filho de AbstractTableModel, o que sai muito parecido com o que o Fanama já fez.

Faça seu próprio model. Gera um código mais simples, mais limpo, mais fácil de manter e reutilizável. Poupa diversos problemas, evita a duplicação desnecessária de dados.

Para mais informações, leia esses tutoriais da Informit:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472

E veja essas classes utilitárias para JTable:
http://www.guj.com.br/posts/list/100793.java

Ou esse TableModel de exemplo:
http://www.guj.com.br/posts/list/98452.java#530523


No link que você passou tinha uma outra referência para esse tópico:
http://www.guj.com.br/posts/list/71926.java#378301

No item número 3, você diz que não é recomendado pela Sun. Você teria alguma referência de material para explicar porque a Sun desaconselha o uso de Vector?

Obrigado.

ViniGodoy

As principais contra-indicações são:

  1. Métodos duplicados (add e addElement, por exemplo) e mais longos na interface: especialmente se vc não segue a regra de “codificar pela interface”;
  2. Força você a pagar por uma sincronização que pode ser desnecessária (isso geralmente está presentes em artigos sobre thread-safety, como os do Goetz). O ArrayList contém wrappers de sincronização, que podem ser usados só nos locais onde isso é realmente necessário;
  3. O Vector dobra de tamanho quando falta espaço para um único elemento, enquanto o ArrayList apenas aumenta rm 50% o seu tamanho (em apenas casos muito específicos esse comportamento padrão é uma vantagem).
  4. Se você vir o tutorial “Trail: The Collections Framework”, verá que o Vector e HashTable são citado como “old classes”. Ele também cita que o List corrige seis diferentes problemas do Vector.

Referências contra o Vector podem ser encontradas nos livros Core Java (procure por “we recommend”) e Effective Java.

Criado 8 de janeiro de 2009
Ultima resposta 8 de jan. de 2009
Respostas 6
Participantes 4