[Resolvido]Não aparece nome das colunas

14 respostas Resolvido
programaçãojava
M

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());

    }

14 Respostas

M

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

Ex .: tbClientes.setModel(Modelo);

M

Marcio_Tostes fiz sim conforme abaixo.

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

M

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.

M

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();
    
}
S

Posta o fonte do seu ModeloTabela.

M

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();
}
M

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];

}

}

S

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

M

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);
S

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

M

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

S

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

J
Solucao aceita

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) {
}
M

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

Criado 6 de janeiro de 2018
Ultima resposta 11 de jan. de 2018
Respostas 14
Participantes 4