Adicionar linhas no JTable [Resolvido]

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.

Agradeço se alguém puder me ajudar.

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;


public class JanelaTabela extends JFrame {

	JTable tabela;
	DefaultTableModel modelo;
	JScrollPane scroll;
	JButton cmdadicionar;

	public JanelaTabela() {
		super();
		setSize(500,500);

		modelo = new DefaultTableModel(5,5);
		tabela = new JTable(modelo);
		tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scroll = new JScrollPane(tabela);

		cmdadicionar = new JButton("Adicionar");
		cmdadicionar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				adicionar();
			}
		});


		tabela.addKeyListener(new KeyAdapter() {
			public void keyReleased(KeyEvent e) {
				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);
	}


	public void adicionar() {
		int linha = tabela.getSelectedRow();
		tabela.removeEditor();

		if ((linha == -1) || ((linha+1) == modelo.getRowCount()) ){
			modelo.addRow(new Object[modelo.getColumnCount()]);
		} else {

			if ((linha+1) < modelo.getRowCount()) {
			
				modelo.addRow(new Object[modelo.getColumnCount()]);
				Object transfere;

				for (int i=(modelo.getRowCount() - 2);i > linha ;i--) {
					
					for (int k=0;k < modelo.getColumnCount(); k++) {
						transfere = modelo.getValueAt(i,k);
						modelo.setValueAt(transfere,(i+1),k);
					}

				}

				for (int i=0;i<modelo.getColumnCount();i++) {
					modelo.setValueAt(new String(""),(linha+1),i);
				}

			}
		}
	}


	public void excluir() {
		int linha = 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.");
		}
	}


	public static void main(String[] args) {
		new JanelaTabela();
	}


}

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.

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

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?

Resumindo era isto.