[Resolvido]Não aparece nome das colunas

olá, já pesquisei, tentei usar exemplos de outros usuários com mesmo problema mas não funcionou.

public void preencherTabela(String sql) {
conn = Conexao.conector();
ArrayList dados = new ArrayList();
String[] colunas = new String[]{“Código”, “Nome”, “Celular”, “Endereço”, “Email”, “Pet”, “Raça”};

    try {
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();
        rs.first();
        do {
            dados.add(new Object[]{rs.getInt("idcli"), rs.getString("nomecli"), rs.getString("tel2cli"), rs.getString("endcli"), rs.getString("emailcli"), rs.getString("nomepet"), rs.getString("racapet")});
            colunas.getClass();
        } while (rs.next());
    } catch (SQLException e) {
        JOptionPane.showMessageDialog(null, "Erro ao preencher tabela ");
        System.out.println(e.getMessage());

    }

Meyer, você atribuiu o novo modelo para a sua JTable?

Ex .: tbClientes.setModel(Modelo);

Marcio_Tostes fiz sim conforme abaixo.

ModeloTabela modeloTab = new ModeloTabela(dados, colunas);
tblClientes.setModel(modeloTab);

Se você não está tento nenhuma exceção, acredito que faltou apenas atualizar as ocorrências da sua JTable para conseguir exibir, tente inserir essa linha de código no seu ModeloTabela, logo depois de adicionar uma linha.

this.fireTableDataChanged();

Esse this, é para referenciar a minha própria classe, e o método é responsável por gerenciar as ocorrências na JTable, se algum registro for excluído etc.

Marcio_Tostes
Fiz oque você sugeriu conforme abaixo, mas não deu certo.

public class ModeloTabela extends AbstractTableModel
{
private ArrayList linhas = null;
private String[] colunas = null;

public ModeloTabela(ArrayList lin, String[] col){
    setLinhas(lin);
    setColunas(col);
    this.fireTableDataChanged();
    
}

Posta o fonte do seu ModeloTabela.

1 curtida

Essa linha não faz sentido dentro do seu método construtor, na sua Classe ModeloTable você tem algum método para adicionar linhas? se tiver essa linha de código deveria ser inserida depois da linha adicionada, ex .:

public void addRow(Cliente c){
    this.dados.add(c);
    this.fireTableDataChanged();
}

staroski boa tarde,
Segue abaixo meu ModeloTablela

public class ModeloTabela extends AbstractTableModel {

private ArrayList linhas = null;
private String[] colunas = null;

public ModeloTabela(ArrayList lin, String[] col) {
    this.fireTableDataChanged();
    setLinhas(lin);
    setColunas(col);
}

/**
 * @return the linhas
 */
public ArrayList getLinhas() {
    return linhas;
}

/**
 * @param linhas the linhas to set
 */
public void setLinhas(ArrayList linhas) {
    this.linhas = linhas;
}

/**
 * @return the colunas
 */
public String[] getColunas() {
    return colunas;
}

/**
 * @param colunas the colunas to set
 */
public void setColunas(String[] colunas) {
    this.colunas = colunas;
}

@Override
public int getColumnCount() {
    return colunas.length;
}

@Override
public int getRowCount() {
    return linhas.size();
}

public String getColmnName(int numCol) {
    return colunas[numCol];
}

@Override
public Object getValueAt(int numLin, int numCol) {
    Object[] linha = (Object[]) getLinhas().get(numLin);
    return linha[numCol];

}

}

Você não esqueceu de inserir sua JTable em um JScrollPane?

1 curtida

Boa noite,
Realmente não tinha adicionado minha Jtable em um ScrollPane.
Fiz isso, mas agora não mais os dados na minha JTable.

ScrollPane scroll = new ScrollPane();
ModeloTabela modeloTab = new ModeloTabela(dados, colunas);
tblClientes.setModel(modeloTab);

    tblClientes.getColumnModel().getColumn(0).setPreferredWidth(25);
    tblClientes.getColumnModel().getColumn(0).setResizable(false);
    tblClientes.getColumnModel().getColumn(1).setPreferredWidth(180);
    tblClientes.getColumnModel().getColumn(1).setResizable(false);
    tblClientes.getColumnModel().getColumn(2).setPreferredWidth(120);
    tblClientes.getColumnModel().getColumn(2).setResizable(false);
    tblClientes.getColumnModel().getColumn(3).setPreferredWidth(180);
    tblClientes.getColumnModel().getColumn(3).setResizable(false);
    tblClientes.getColumnModel().getColumn(4).setPreferredWidth(180);
    tblClientes.getColumnModel().getColumn(4).setResizable(false);
    tblClientes.getColumnModel().getColumn(5).setPreferredWidth(100);
    tblClientes.getColumnModel().getColumn(5).setResizable(false);
    tblClientes.getColumnModel().getColumn(6).setPreferredWidth(120);
    tblClientes.getColumnModel().getColumn(6).setResizable(false);
    tblClientes.getTableHeader().setReorderingAllowed(false);
    tblClientes.setAutoResizeMode(tblClientes.AUTO_RESIZE_OFF);// NÃO DEIXA REDOMENCIONAR A TABELA
    tblClientes.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);// DEIXA SELECIONAR APENAS UM DADO NA TABELA POR VEZ
     //Aqui adicionei minha JTable ao ScrollPane
     scroll.add(tblClientes);

E tem dados na lista que você está passando para o TableModel?

Sim, quando eu não coloco a JTable no JScrollPane os dados aparecem na Jtable normalmente, so não aparece os nomes das colunas.

Estranho, algum detalhe estamos deixando passar em branco.
Tens como postar o código completo da sua tela?

ai ta errado, vc nao esta sobrescrevendo o metodo que devolve o nome da coluna, você escreveu errado o certo é

public String getColumnName(int numCol) {
}
1 curtida

Jacoboliveira,
Era isso mesmo, obrigado mesmo.
E agradeço também ao amigos Marcio_Tostes e staroski vocês são muito legais.

1 curtida