Existe como, num objeto JTable, cada vez que eu selecionar uma linha, se eu pressionar o botão Insert do teclado inserir uma nova linha abaixo da linha selecionada, ou então ao pressionar Delete, deletar a linha selecionada.
Eu tenho um botão Adicionar que sempre insere uma linha no final do JTable. Mas eu quero poder inserir linhas no meio da minha JTable, onde o usuário desejar.
importjavax.swing.*;importjavax.swing.table.*;importjava.awt.*;importjava.awt.event.*;publicclassJanelaTabelaextendsJFrame{JTabletabela;DefaultTableModelmodelo;JScrollPanescroll;JButtoncmdadicionar;publicJanelaTabela(){super();setSize(500,500);modelo=newDefaultTableModel(5,5);tabela=newJTable(modelo);tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);scroll=newJScrollPane(tabela);cmdadicionar=newJButton("Adicionar");cmdadicionar.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){adicionar();}});tabela.addKeyListener(newKeyAdapter(){publicvoidkeyReleased(KeyEvente){e.consume();if(e.getKeyCode()==KeyEvent.VK_INSERT){adicionar();}if(e.getKeyCode()==KeyEvent.VK_DELETE){excluir();}}});getContentPane().add(cmdadicionar,BorderLayout.NORTH);getContentPane().add(scroll,BorderLayout.CENTER);setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);}publicvoidadicionar(){intlinha=tabela.getSelectedRow();tabela.removeEditor();if((linha==-1)||((linha+1)==modelo.getRowCount())){modelo.addRow(newObject[modelo.getColumnCount()]);}else{if((linha+1)<modelo.getRowCount()){modelo.addRow(newObject[modelo.getColumnCount()]);Objecttransfere;for(inti=(modelo.getRowCount()-2);i>linha;i--){for(intk=0;k<modelo.getColumnCount();k++){transfere=modelo.getValueAt(i,k);modelo.setValueAt(transfere,(i+1),k);}}for(inti=0;i<modelo.getColumnCount();i++){modelo.setValueAt(newString(""),(linha+1),i);}}}}publicvoidexcluir(){intlinha=tabela.getSelectedRow();if(linha!=-1){tabela.removeEditor();modelo.removeRow(linha);if((linha+1)<=modelo.getRowCount()){tabela.getSelectionModel().addSelectionInterval(linha,linha);}}else{JOptionPane.showMessageDialog(null,"Selectione uma linha primeiro.");}}publicstaticvoidmain(String[]args){newJanelaTabela();}}
F
fernandoeick
Na verdade meu problema era mais complexo do que simplesmente adicionar/remover linhas de um JTable. Eu formulei mal a pergunta.
Mas o problema já foi resolvido e eu esqueci de editar para [Resolvido].
Porém, valeu pela ajuda.
V
ViniGodoy
Como você resolveu?
Por favor, diga que foi editando o seu próprio TableModel.
Se não foi, recomendo fortemente que você aprenda.
Uma dica importante, e vale para você também t_java, é não utilize o DefaultTableModel. É mais complexo, deixa um código mais sujo, mais difícil e menos orientado a objetos. Um ótimo tutorial que te ensina a criar um TableModel é esse aqui: http://www.informit.com/articles/article.aspx?p=332278
F
fernandoeick
Como falei, era mais complexo.
A questão era. Cada vez que eu adicionasse um objeto no banco, o meu JTable que está em um JPane cria uma linha e ia exibindo o que ia sendo adicionado.
Ao pressionar “Insert” desejava inserir um linha em branco na tabela - (Inicialmente meu problema era inserir linhas em branco no meio da tabela). Ao dar “Delete” remover uma linha da tabela.
Mas a questão principal era que o meu JTable ia existir (ser criado) somente a partir do momento em que eu inserisse o primeiro registro no banco. Enquanto não houvesse nenhum registro, o JTable não existia. Mas e se o cliente desejasse dar um “Insert” e inserir um linha em cima, no topo da tabela, antes de haver qualquer registro no Banco? Como iria inserir linhas se ainda não havia a tabela?