Jtable como voltar a inserir linhas

13 respostas
H

Olá pessoal, estou iniciando agora em programação e pouco sei ainda, já procurei aqui no forum sobre vários casos e não consegui achar uma solução:

É o seguinte, eu criei uma tabela padrão no netbeans, a Jtable, tive a ler e essa é a pior forma pois dificulta mais manusear ela, mas é maneira que foi mais fácil para mim de fazer(interface),

eu criei um botão com uma função para limpar apenas os valores da tabela, o que eu fiz foi isso

int x = tabelaTransicao.getRowCount();
    for(int a = 0; a < x; a++)
    {
    DefaultTableModel model = ((DefaultTableModel)tabelaTransicao.getModel());
    model.removeRow(0);}

Dessa forma eu sumi com as linhas de toda a tabela, o que eu quero agora é voltar a colocar elas, ou seja apaga e volta, na verdade eu só quero eliminar os valores que estão nela quando seleciono
a linha que quero apagar os valores.

Alguém da uma luz aí??

Valeu, Abraços!!

13 Respostas

R_chieck

Ola, quer inserir objetos na jtable???
se sim, esqueça o DefaultTaableModel. Crie o seu implementando AbstractTableModel, ou então use um pronto como por exemplo o da biblioteca Towel do Mark.
Se quiser facilidade e praticidade para manipular os dados é com ele.

ViniGodoy

Aprenda a usar o TableModel direito. Siga os links ao lado do texto em vermelho na minha assinatura.

H

Olá Rschieck isso mesmo, é objetos, é já não vou a tempo de criar outro modelo, na verdade queria só melhorar o software que fiz, se não tem jeito de apagar os dados da tabela assim, vou remover o botão de limpar a tabela!! Valeu, Abraços!!

H

ViniGodoy é isso que estou tentando fazer!

R

estava mexendo num projeto com tabelas... usei DefaultTAbleModel que o pessoal aqui ñão gosta, mas segue o código..

if (jTable1.getSelectedRow() &gt; -1) {
            Connection con = ConexaoBD.conectar();
            int cod = Integer.parseInt(String.valueOf(jTable1.getValueAt(jTable1.getSelectedRow(), 0)));
            String sql = &quot;delete from  informacoesdojogo where codinfo= ? &quot;;
            try {
                PreparedStatement pstmt = con.prepareStatement(sql);
                pstmt.setInt(1, cod);
                pstmt.executeUpdate();
                //  JOptionPane.showMessageDialog(null, &quot;Dados excluidos com sucesso&quot;);
                pstmt.close();
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, &quot;Erro na inserção dos dados:&quot; + e.getMessage());

            } finally {
                ConexaoBD.desconectar(con);
                //limpa lista
                int i = 0;
                DefaultTableModel tabela = (DefaultTableModel) jTable1.getModel();
                int x = tabela.getRowCount();
                for (i = 0; i &lt; x; i++) {
                    tabela.removeRow(0);
                }
                selecionaCodigo(Integer.parseInt(jCodigo.getText()));
            }
        } else {
            JOptionPane.showMessageDialog(null, &quot;Escolha um item na tabela&quot;);
        }

o que acontece é que tenho por padrão mostrar os dados que estão no banco...

aí é o método selecionacodigo que chama outros 2.

mas então vc exibe sua tabela normalmente como já deve estar fazendo aí...

ajudei?

R

inclusive este trabalho que falei está neste tópico aqui,
dem uma olhada , tem bastante manipulação com tabela…

mas precisa instalar o banco mysql ou ter instalado para criar as tabelas (com um ctrl V só)

e ter a biblioteca descrita no tópico por perto.

H

É, o pessoal não curte muito da defautTableModel, de qualquer forma valeu pela ajuda, consegui resolver dessa maneira, sei que esta cheio de gambiarras mas para mim que estou iniciando acho que esta bom, aos poucos a gente chega lá, valeu ajuda pessoal. Abraços

int x = tabelaTransicao.getRowCount();

DefaultTableModel model = ((DefaultTableModel)tabelaTransicao.getModel());

int qtdLinhas = model.getRowCount();

int qtdColunas = model.getColumnCount();

for(int a = 0; a < x; a++)

{
model.removeRow(0);
    }
    //adiciona a mesma quantidade de linhas que tinha na tabela anterior
    for(int i = 0; i < qtdLinhas; i++){
       model.addRow(new Object[qtdColunas]);
    }
ViniGodoy

Engraçado, pelo visto você está perdendo muito tempo para tentar driblar os problemas (que só existem no Default) ao invés de aplicar esse mesmo tempo tentando aprender o jeito mais correto (e mais fácil) de usar o JTable.

Desculpe a franqueza, mas isso não é muito inteligente da sua parte.

H

Eu estou tentando sim aprender a melhor forma, que é o JTable, li muito sobre isso e não a dúvidas que seja a melhor forma, mas eu não vou aprender do dia para a noite, o que eu fiz foi uma solução provisória, pois preciso apresentar ele e já estou atrasado, sei que o código não é o melhor, mas como disse anteriormente é temporário, respeito a sua decisão em usar a JTable, mas deveria entender que estou apenas começando, e é com os erros que se aprendem, se eu não usasse esse modelo, hoje eu não saberia que existe melhor forma! Li a sua explicação também sobre como criar, e brevemente quero aprender ela, pois como você mesmo disse, depois de dominar ela a gente vê que a Default não é muito mais complexa! além disso o seu nível de programação não é o mesmo que o meu, eu estou apenas começando, sei muito pouco ainda, não achei certo de sua parte comentar que não é muito inteligente eu fazer isso, mas sei que sua intenção é de ajudar! valeu

R

olha vini, gosto de ouvir conselhos, mas de fato a default tablemodel funciona bem. penso até que cismaram com ela (todos tem seus motivos).

já ouvi algumas explicações, mas de fato o funcionamento é bom.

Ali, ele é iniciante, e precisa pegar um dado da tabela para manipula-lo. conseguiu pegar, alterar, editar, excluir, visualizar, lista, tudo o que precisa de uma tabela.

porque dizer que isso é ruim?

R

Inclusive um professor nos ensinava pilhas e no slide havia Stack, mas depois ele disse que Stack, não tem comportamento de pilha, que Stack não é pilha. Stack é pilha em inglês, outro me disse que sim, Stack é pilha, funciona como pilha.

Enfim, quem está com razão (?).

sei que esta questão da tabela, é seu tópico de assinatura tudo, mas em todo caso o rapaz se defendeu bem ou deu os argumentos certos ali.

Como no caso do String Builder, podemos concatenar strings com + ou com o StringBuilder e.append, é bem melhor com StringBuilder fizemos um teste em gasto de tempo com uma classe, em sala de aula.

Mas será preciso fazer uma guerra com quem não usa StringBuilder? E dizer, por exemplo : seu Tolo! Vc não usa um StringBuilder é mesmo um idiota! Vai ficar concatenando strings separadamente o resto da vida, até entupir o seu programa, servidores e banco de dados!
Entende (?), não há necessidade de fazer isso é o que penso. Um conselho sobre o StringBuilder é suficiente,
mas de fato não sei porque me pus a falar sobre isso.

ou seja sei, mas isso é de cada um, aliás diz a oração,
“pai, perdoai nossas ofensas,assim como nós perdoamos a quem nos tem ofendido…”.

O fato é que também ficar o tempo todo tolerando ofensas, não é nada muito agradável, por exemplo. As vezes vejo algumas discussões deste tipo neste e em outros fóruns. É preciso respirar e ter calma. Até mesmo ensinar exige perspicácia, mas não quero que também escrever coisas que parecem críticas ásperas demais por exemplo.

Enfim, já escrevi a mensagem, segue.

H

Certo Raghy concordo consigo, e suas críticas foram construtivas! Valeu!!

ViniGodoy

raghy:
Ali, ele é iniciante, e precisa pegar um dado da tabela para manipula-lo. conseguiu pegar, alterar, editar, excluir, visualizar, lista, tudo o que precisa de uma tabela.
porque dizer que isso é ruim?

  1. Por que ele está gastando um tempão com dificuldades que o DefaultTableModel criou;
  2. Por que costumamos a replicar essas “soluções” no mercado de trabalho;
  3. Por que o DefaultTableModel não funciona bem (do contrário do que vc falou, ele é mais difícil, consome mais memória, ocupa mais processamento, fere bons modelos, não trabalha com objetos de negócio);

O argumento usado foi “sou iniciante” e “meu nível de programação não é bom”. Nenhum dessas é um bom argumento.

Se é iniciante, não sabe fazer nem de um jeito, nem de outro. Então, não perca tempo aprendendo o jeito errado.
Se o seu nível de programação é baixo, então, você terá dificuldade em ambos os modelos - melhor usar o mais fácil.

E o fato é que você está perdendo tempo. Gastou quanto tempo para consertar o problema do Default? Provavelmente o tempo que você irá gastar com os outros problemas será ainda maior do que o tempo que gastaria sentando um pouco e estudando a forma correta.

Alternativamente a fazer seu próprio model, você pode usar o ObjectTableModel. Ele é tão simples que não consome nenhuma linha de código.

Criado 20 de junho de 2012
Ultima resposta 21 de jun. de 2012
Respostas 13
Participantes 4