Método que testa se jtable foi clicada

5 respostas
EDIMIL

Pessoal, qual método testa se uma linha da jtable foi clicada?
Depois eu consigo excluir tal linha com jtable.remove()?

Agradeço muito a ajuda.

5 Respostas

BrunoBastosPJ

JTable possui alguns métodos como getSelectedRow e getSelectedColumn que podem lhe informar a linha e coluna selecionada.

Para excluí-la é um pouco mais complicado… Você deve pegar o TableModel desta tabela, através do método getModel.

Ai vem o grande pulo do gato… Este modelo é na maioria das vezes um DefaultTableModel, e através de um casting você consegue trabalhar com uma instância desta classe…

Esta instância lhe fornece método removeRow e removeColumn que você pode user para realizar o que você quer!

Tente fazer assim, acredito que não terá problema!

:wink:

ViniGodoy

Só ressaltando, o DefaultTableModel é a pior forma de se trabalhar com o JTable. Se você fizer seu próprio model, você pode evitar o cast que ele falou, e obter diretamente um objeto da sua classe de negócios do seu JTable. Para mais informação, basta consultar o link da minha assinatura.

pedroroxd
Realmente, DefaultTableModel é inútil, mas se quiser persistir nele (recomendo fortemente que não), pode fazer algo do tipo no performed do botão:
int linha = _jTableExemplo.getSelectedRow();
				if (linha != -1) { // Testa se a linha está selecionada
					_DefaultTableModelExemplo.removeRow(linha);
				}
perceba que vc tem que ter o:
private DefaultTableModel _DefaultTableModelExemplo; //que vc instancia
private JTable _jTableExemplo; //que vc instancia
private JScrollPane _jScrollPaneExemplo; //que vc instancia

.
.
.

_jScrollPaneExemplo.setViewportView(_jTableExemplo);
_jTableExemplo.setModel(_DefaultTableModelExemplo);
EDIMIL
pedroroxd:
Realmente, DefaultTableModel é inútil, mas se quiser persistir nele (recomendo fortemente que não), pode fazer algo do tipo no performed do botão:
int linha = _jTableExemplo.getSelectedRow();
				if (linha != -1) { // Testa se a linha está selecionada
					_DefaultTableModelExemplo.removeRow(linha);
				}
perceba que vc tem que ter o:
private DefaultTableModel _DefaultTableModelExemplo; //que vc instancia
private JTable _jTableExemplo; //que vc instancia
private JScrollPane _jScrollPaneExemplo; //que vc instancia

.
.
.

_jScrollPaneExemplo.setViewportView(_jTableExemplo);
_jTableExemplo.setModel(_DefaultTableModelExemplo);
BrunoBastos, viny e pedroroxd, obrigado pela ajuda. pedroroxd consegui resolver utilizando seu método, com uma modificação:
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        //jsp.setViewportView(jTable2);
        jTable2.setModel(modelo2);
        int linha = jTable2.getSelectedRow();
        if (linha != -1) {
            modelo2.removeRow(jTable2.getSelectedRow());
        } else {
            JOptionPane.showMessageDialog(null, "Selecione um item na tabela!");
            return;
        }
    }

Valeu pessoal, já já estou de volta!

pedroroxd

Vlw…
Qualquer coisa tamo ae…
Mas recomendo fortemente você a não utilizar default table model, antes que acostume com ela…

Motivos, segundo ViniGodoy:

  1. É mais difícil que escrever seu próprio TableModel;
  2. É mais lento (usa classes sincronizadas);
  3. Ocupa mais espaço em memória (duplica seus dados);
  4. Deixa o código mais confuso e difícil de manter;
  5. Usa casts inseguros;
  6. Força que você tenha que exibir informações desnecessárias (como o ID) na tabela, ou controlar o ID numa lista separada;
  7. Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua.

Se quiser saber +, leia AKI: http://www.guj.com.br/posts/list/15/199067.java#1001295

Criado 31 de março de 2010
Ultima resposta 31 de mar. de 2010
Respostas 5
Participantes 4