[RESOLVIDO] Evento ao clicar na JTable

21 respostas
Y

Galera, boa tarde, eu tô querendo capturar o ID da linha da JTable que eu cliquei, porém eu fiz a seguinte função e não surtiu nenhum efeito:

private void tabelaMouseClicked(java.awt.event.MouseEvent evt) {
    int indiceLinha = tabela.getSelectedRow();
    int id = Integer.parseInt((String) tabela.getValueAt(indiceLinha, 0));
    JOptionPane.showMessageDialog(null, id);
}

Criação da JTable:

private JTable tabela;
private DefaultTableModel modelo = new DefaultTableModel();

private void criaJTable() throws SQLException {
    tabela = new JTable(modelo);
    modelo.addColumn("Código da venda");
    modelo.addColumn("Código do cliente");
    modelo.addColumn("Matrícula do funcionário:");
    modelo.addColumn("Valor total");
    modelo.addColumn("Pagamento");
    modelo.addColumn("Parcelas");
    modelo.addColumn("Data");
    tabela.getColumnModel().getColumn(0).setPreferredWidth(40);
    tabela.getColumnModel().getColumn(1).setPreferredWidth(40);
    tabela.getColumnModel().getColumn(2).setPreferredWidth(40);
    tabela.getColumnModel().getColumn(3).setPreferredWidth(120);
    tabela.getColumnModel().getColumn(4).setPreferredWidth(40);
    tabela.getColumnModel().getColumn(5).setPreferredWidth(20);
    tabela.getColumnModel().getColumn(6).setPreferredWidth(120);
    pesquisarNomes("SELECT * FROM vender");
}
  
private void pesquisarNomes(String sql) throws SQLException {
    modelo.setNumRows(0);
    Connection con =  Conectadb.getConnection();
    PreparedStatement preparedStatement = null;
    
    preparedStatement = con.prepareStatement(sql);
    ResultSet rs = preparedStatement.executeQuery();

    while (rs.next()) {
        modelo.addRow(new String [] {rs.getString("CodigoVenda"),rs.getString("CodigoCliente"),rs.getString("MatriculaFuncionario"),"R$"+String.format("%,.2f", rs.getFloat("ValorTotal")),rs.getString("Pagamento"),rs.getString("Parcelas"),rs.getString("DataRealizacao")});
    }
           
}

21 Respostas

Rodrigo_Void

Como n surtiu efeito?
nada acontece feijoada? rsrs

Y

Não kkkkkk, a MessageDialog não apareceu.

Rodrigo_Void

Com JTable o ideal é sempre manter a Orientação a Objetos evitando usar DefaultTableModel e implementando seu próprio tableModel. Com ele poderá usar objetos na tabela e n precisará ficar usando-a como uma matriz horrível.

Rodrigo_Void

Realmente estranho. Se vc tem o evento tabelaMouseClicked atribuido a tabela, deve chamar. Não está dando erro?

Y

Tá executando numa boa, porém quando eu clico não dá nada.

Rodrigo_Void

Posta todo código da tela se possível, pra ver onde que tabelaMouseClicked está atribuido à tabela.

Y

Interface:


Código:

Rodrigo_Void

Era pra ser o código completo.
Mas ali já é possível visualizar um alerta sobre este método que provavelmente diz: “Este método não está sendo utilizado”.

Se vc criou todo o método a mão, não vai surtir efeito mesmo. Vc precisa de um EVENTO da tabela que o chame. Vá na parte de eventos e implemente o mouseClicked

Y

Como? kk
Não tem o componente JTable…


Rodrigo_Void

Selecione a jTable -> propriedades -> eventos

Y

mas onde eu seleciono a JTable?
ela não aparece nos componentes

Rodrigo_Void
tabela.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tabelaMouseClicked(evt);
            }
        });
Y

Aí no caso eu vou jogar isso aqui?

Rodrigo_Void

Em qualquer lugar depois d ter criado a tabela, onde a var tabela tenha uma instancia.
Obs.: código com fundo em cinza n é editável.

Y
Rodrigo_Void

*Respeitando a sintaxe.
Vc n pode largar um código fora de um método.

Y

Ficaria assim?

private void tabelaMouseClicked(java.awt.event.MouseEvent e) {
    tabela.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            tabelaMouseClicked(evt);
            int indiceLinha = tabela.getSelectedRow();
            int id = Integer.parseInt((String) tabela.getValueAt(indiceLinha, 0));
            JOptionPane.showMessageDialog(null, id);
        }
    });
}
staroski

Não.

private void criaJTable() throws SQLException {
    // aqui criou a tabela
    tabela = new JTable(modelo);
    // então depois que criou, pode adicionar um listener para tratar algum evento
    tabela.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {
            // código a ser executado quando clicou no componente
        }
    });
    // restante do código do método criaJTable()...
}
Rodrigo_Void

Não cara, vc tá precisando estudar lógica.

private void criaJTable() throws SQLException {
    tabela = new JTable(modelo);
    modelo.addColumn("Código da venda");
    modelo.addColumn("Código do cliente");
    modelo.addColumn("Matrícula do funcionário:");
    modelo.addColumn("Valor total");
    modelo.addColumn("Pagamento");
    modelo.addColumn("Parcelas");
    modelo.addColumn("Data");
    tabela.getColumnModel().getColumn(0).setPreferredWidth(40);
    tabela.getColumnModel().getColumn(1).setPreferredWidth(40);
    tabela.getColumnModel().getColumn(2).setPreferredWidth(40);
    tabela.getColumnModel().getColumn(3).setPreferredWidth(120);
    tabela.getColumnModel().getColumn(4).setPreferredWidth(40);
    tabela.getColumnModel().getColumn(5).setPreferredWidth(20);
    tabela.getColumnModel().getColumn(6).setPreferredWidth(120);
    pesquisarNomes("SELECT * FROM vender");

tabela.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {
            // código a ser executado quando clicou no componente
        }
    });
}

Substitui seu código por esse. Se n souber onde ou como eu to fora. se esforça ai.

Y

My bad, o que eu tava fazendo realmente estava sem nexo…
Isso que dá o mal costume de criar os eventos pelo “Projeto”.

Y

Consegui, obrigado pela ajuda mens!

Criado 13 de junho de 2018
Ultima resposta 13 de jun. de 2018
Respostas 21
Participantes 3