Atualizar campos em tela ao selecionar uma linha JTable

4 respostas
java
AlessandroGois

Pessoal, bom dia!

Tenho 2 dúvidas, vou colocar num mesmo post porque o forum limita a quantidade de posts por usuário por dia… vai entender…

Dúvida 1 : Quando eu clico na linha da tabela o Foco não está jogando para os itens, tenho que clicar algumas vezes para conseguir isso.

Segue código (acho que estou no evento errado):

private void tbUsuariosMouseClicked(java.awt.event.MouseEvent evt) {

mostraItens();

}
public void mostraItens() 
{
    limparCampos();
    int seleciona = tbUsuarios.getSelectedRow();
    
    txtCodigo.setText(tbUsuarios.getModel().getValueAt(seleciona, 0).toString());
    txtNome.setText(tbUsuarios.getModel().getValueAt(seleciona, 1).toString());
    txtEmail.setText(tbUsuarios.getModel().getValueAt(seleciona, 2).toString());
    txtLogin.setText(tbUsuarios.getModel().getValueAt(seleciona, 3).toString());
    txtSenha.setText(tbUsuarios.getModel().getValueAt(seleciona, 4).toString());
    tb_btn_editar.setEnabled(true);
    tb_btn_excluir.setEnabled(true);
    tb_btn_pesquisar.setEnabled(true);
    tb_btn_log.setEnabled(true);

}

Dúvida 2 :
Como eu faço pra fazer um select que me traz 5 colunas e colocar apenas 4 na grid? Quando jogo as 5 colunas mesmo tendo 4 no layout ele adiciona mais uma. Se eu coloco só os campos na minha query que eu quero que apareçam na grid tenho problemas porque os campos da tela precisam de campos que a grid não tem.

Por exemplo:
A tabela usuarios possui 5 campos: codigo, nome, email, login e senha. Só que por razões obvias não queria que a senha aparecesse na grid. Só que não estou conseguindo implementar isso. Queria resolver isso da maneira correta e não limitando o código da query "select codigo, nome, email, login from usuarios ".

public void listarUsuarios() {
    String sql = "select * from usuarios";
    try {
        pst = conecta.prepareStatement(sql);
        rs = pst.executeQuery();
        tbUsuarios.setModel(DbUtils.resultSetToTableModel(rs));
        tbUsuarios.getColumnModel().getColumn(0).setPreferredWidth(50);
        tbUsuarios.getColumnModel().getColumn(1).setPreferredWidth(250); 
        tbUsuarios.getColumnModel().getColumn(2).setPreferredWidth(200);
        tbUsuarios.getColumnModel().getColumn(3).setPreferredWidth(80);

    }
    catch(SQLException error)
    {
        JOptionPane.showMessageDialog(null, error);
    }
}

Grato pela ajuda!

Alessandro.

4 Respostas

SuperMock

Dúvida 1: Já que você quer que o usuário selecione apenas uma linha para você puxar os dados use:

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

Possível solução:

table.setColumnSelectionAllowed(true);
table.setRowSelectionAllowed(true);

Dúvida 2: Você pode esconder o campo senha assim:

TableColumn idClmn = table.getColumn(name);

idClmn.setMaxWidth(width);

idClmn.setMinWidth(width);

idClmn.setPreferredWidth(width);

Ou simplesmente não adicione-o.

Abraços

SuperMock

AlessandroGois

Obrigado!

É que se eu não adicioná-lo, por ter este campo na tabela ele aparece mesmo assim.

Nesta linha:
TableColumn idClmn = table.getColumn(name);

table.getColumn(name);

Aonde eu consigo saber o nome da coluna?

SuperMock

Seria o nome que fica no cabeçalho, mas se você quiser pode usar o índice como você fez acima

Abraços

SuperMock

AlessandroGois

Consegui remover a coluna usando a seguinte sintaxe:

tbUsuarios.getColumnModel().removeColumn(tbUsuarios.getColumnModel().getColumn(4));

Obrigado :slight_smile:

Criado 13 de janeiro de 2016
Ultima resposta 13 de jan. de 2016
Respostas 4
Participantes 2