Jtable não mostra linhas (resolvido)

1 resposta
S

Olá amigos

despois de pesquisar muito não encontrei neda que pudesse me ajudar. Criei uma classe que monta uma jTable em tempo de execução até aí tudo bem, quando mostra o frame a tabela aparece com suas colunas, mas depois de selecionar o registro que desejo a jTable não mostra nada as linhas ficam em branco.

public ClassInicializaTable tabela = new ClassInicializaTable();;
/** Creates new form OrdemServico */
    public OrdemServico() {
        initComponents();
        dataFormatada = new SimpleDateFormat("dd/MM/yyyy");
        String[] colunasTabela = {"Nº Orçamento", "Data Orçamento", "Hora","Cliente"};
       int [] tamanhoColunas = {10,10,10,100};
       //montaTabela(colunasTabela,tamanhoColunas);
       int [] posicaoTabela = {50,450,600,150};
       try {
           tabela.montaTabela(colunasTabela, tamanhoColunas, posicaoTabela);
           jPanel3.add(tabela.scroller);
           jPanel3.add(tabela.scroller).setVisible(true);
            
        } catch (Exception ex) {
            Logger.getLogger(OrdemServico.class.getName()).log(Level.SEVERE, null, ex);
        }
       
    }

chamda para popular a jTable.

tabela.preencheTabela(rs);

aqui a classe:

package assistenciadesktop;

import java.sql.ResultSet;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author silvio
 */

public class ClassInicializaTable {
    static  java.sql.Statement stmt;
    static String mnome, macao;
    static Object id;
    public int linhatabela;
    static ResultSet rs;
    public String [] Colunas;
    public int [] TamanhoCol;
    public JTable jTable1 = new JTable();
    public JScrollPane scroller = new JScrollPane(jTable1);
    public DefaultTableModel aModel = new DefaultTableModel();;
    
public void ClassInicializaTable () {
}
    
public void montaTabela(String[] nomeColunas, int [] tamanhoColunas,int [] posicaoTabela) throws Exception {
   String[] tableColumnsName = nomeColunas;        

   DefaultTableModel aModel = new DefaultTableModel(nomeColunas, 0) {

      @Override
      public Class getColumnClass(int column) {
         Class returnValue;
         if ((column >= 0) && (column < getColumnCount())) {
            if (getValueAt(0, column) != null) {
               returnValue = getValueAt(0, column).getClass();
            } else {
              returnValue = Object.class;
            }
         } else {
            returnValue = Object.class;
         }
         return returnValue;
      }

      @Override
      public boolean isCellEditable(int row, int col) {
         return false;
      }
  };
        
 aModel.setColumnIdentifiers(nomeColunas);      
 Colunas = nomeColunas;
 TamanhoCol = tamanhoColunas;
 jTable1.setModel(aModel);  
 scroller.setBounds(posicaoTabela[0], posicaoTabela[1], posicaoTabela[2], posicaoTabela[3]);

}

public void preencheTabela(ResultSet rs) throws Exception {
    
//  java.sql.ResultSetMetaData rsmd = rs.getMetaData();
     
 
  int colNo = Colunas.length;
        
  while(rs.next()){
      Object[] objects = new Object[colNo];
      for(int i = 0; i < colNo; i++) {
         objects[i] = rs.getObject(i+1);
      }   
      aModel.addRow(objects);
  }
  
  jTable1.setFillsViewportHeight(true);
  jTable1.getTableHeader().setReorderingAllowed(false);
  //for(int i = 0; i < colNo; i++) {
  //   jTable1.getColumnModel().getColumn(i).setPreferredWidth(TamanhoCol[i]);
 // }
  
}

}

se alguém puder ajudar?

muito obrigado

Silvio Guedes

1 Resposta

S

Olá amigos

depois de tentar muito consegui resolver o que precisava. Segue o resultado:

public ClassInicializaTable tabela = new ClassInicializaTable();;
 
   public OrdemServico() {
        initComponents();
        dataFormatada = new SimpleDateFormat("dd/MM/yyyy");
        String [] colunasTab = {"Nº Orçamento","Data Orçamento","Hora","Cliente"};
        int [] tamanhoCol = {10,10,10,100};        
        int [] posicaoTab = {50,450,600,150};
        colunasTabela = colunasTab;
        tamanhoColunas = tamanhoCol;
        posicaoTabela = posicaoTab;        
        try {
       --> aqui a chamada passando do parametro false para que não popule a jtable
            tabela.preencheTabela(false,rs,colunasTabela, tamanhoColunas, posicaoTabela);
       <---
            jPanel3.add(tabela.scroller);
            jPanel3.add(tabela.scroller).setVisible(true);
             
         } catch (Exception ex) {
             Logger.getLogger(OrdemServico.class.getName()).log(Level.SEVERE, null, ex);
         }
       
    }

esta classe serve para que seja utilizada em todo o projeto sem precisar reescrever o código novamente.

public class ClassInicializaTable {
....
public void preencheTabela( boolean pesquisa, ResultSet rs,String[] nomeColunas, int [] tamanhoColunas,int [] posicaoTabela) throws Exception {
    
   String[] tableColumnsName = nomeColunas;        

   DefaultTableModel aModel = new DefaultTableModel(nomeColunas, 0) {

      @Override
      public Class getColumnClass(int column) {
         Class returnValue;
         if ((column >= 0) && (column < getColumnCount())) {
            if (getValueAt(0, column) != null) {
               returnValue = getValueAt(0, column).getClass();
            } else {
              returnValue = Object.class;
            }
         } else {
            returnValue = Object.class;
         }
         return returnValue;
      }

      @Override
      public boolean isCellEditable(int row, int col) {
         return false;
      }
  };
        
 aModel.setColumnIdentifiers(nomeColunas);      
 Colunas = nomeColunas;
 TamanhoCol = tamanhoColunas;
 jTable1.setModel(aModel);  
 scroller.setBounds(posicaoTabela[0], posicaoTabela[1], posicaoTabela[2], posicaoTabela[3]);

    //  java.sql.ResultSetMetaData rsmd = rs.getMetaData();
     
if (pesquisa) {    
   int colNo = Colunas.length;
        
   while(rs.next()){
      Object[] objects = new Object[colNo];
      for(int i = 0; i < colNo; i++) {
         objects[i] = rs.getObject(i+1);
      }   
      aModel.addRow(objects);
   }
   jTable1.setModel(aModel);   
   jTable1.setFillsViewportHeight(true);
   jTable1.getTableHeader().setReorderingAllowed(false);
  
  }
}

–> aqui a chamada passando o parametro true para que popule a jtable <—

tabela.preencheTabela(true,rs,colunasTabela, tamanhoColunas, posicaoTabela);

Silvio Guedes

Criado 1 de setembro de 2008
Ultima resposta 2 de set. de 2008
Respostas 1
Participantes 1