Exclusão de linha da JTable + JComboBox

3 respostas
dzanotto

Bom dia pessoal.

Tenho uma JTable que inicializa sem linhas. Coloquei um botão “Adicionar linha” que adiciona a linha e esta linha é composta por um JComboBox, sendo seus itens carregados do banco de dados. Até aí tudo bem.
O problema está no botão de excluir a linha selecionada, porque ele tá dando IndexArrayOutOfBounds. Percebi q era pq ele mantia selecionado a linha q já havia sido excluída, então usei a função changeSelection. Mas o JComboBox da linha excluída mantém selecionado, e ai continua dando o mesmo erro de out of bounds.

Alguém pode me ajudar?

3 Respostas

dzanotto

Usei a função stopCellEditor na linha selecionada e deu certo!

Qualquer dúvida avisa que mostro o código.

Cacapava

Cara, mostra o código aí! =]

dzanotto

Segue o código:

//DESDE A CRIAÇÃO DA JTABLE ATÉ A FUNÇÃO DO BOTÃO REMOVER
final JScrollPane pnlTableMaterias = new JScrollPane();
pnlMaterias.add(pnlTableMaterias);

tblMaterias = new JTable();
modelTable = new DefaultTableModel(new Object[][]{}, new String[]{"MATÉRIA"});
tblMaterias.setModel(modelTable);
		
pnlTableMaterias.setViewportView(tblMaterias);

final JButton btnNovaLinha = new JButton();
btnNovaLinha.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		try {
			modelTable.addRow(new Object[]{});
			TableColumn tipo;
			tipo = tblMaterias.getColumnModel().getColumn(0);
			tipo.setCellEditor(new DefaultCellEditor(addCbxMaterias()));
		} catch (Exception e1) {
			JOptionPane.showMessageDialog(pnlPrincipal, e1.getMessage(), "Erro!", JOptionPane.ERROR_MESSAGE);
		}

	}
});
pnlMaterias.add(btnNovaLinha);

final JButton btnRemoverLinha = new JButton();
btnRemoverLinha.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent arg0) {
		try {
			tblMaterias.getCellEditor(tblMaterias.getSelectedRow(), 0).stopCellEditing();
			modelTable.removeRow(tblMaterias.getSelectedRow());
		} catch (Exception e2) {
			JOptionPane.showMessageDialog(pnlMaterias, "Primeiro selecione a linha na tabela!", "Erro!", JOptionPane.ERROR_MESSAGE);
		}
	}
});
pnlMaterias.add(btnRemoverLinha);
Criado 1 de setembro de 2008
Ultima resposta 1 de set. de 2008
Respostas 3
Participantes 2