Erro para excluir linha Jtable

9 respostas
javamysqlprogramação
F

Boa tarde, Pessoal
Estou com um problema para excluir linhas de uma jtable, e por não ter muita experiência estou com dificuldades em resolver a exceção.

Codigo da Tabela:

package ModeloBeans;

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

/**
*

  • @author fsantos
    */
    public class ModeloTabela extends AbstractTableModel{

    private ArrayList linhas = null;
    private String[] colunas = null;

    public ModeloTabela(ArrayList lin, String [] col){

    setLinhas(lin);
    setColunas(col);

    }
    

    public ArrayList getLinhas(){
    return linhas;

}

public void setLinhas(ArrayList dados){

linhas = dados;

}

public String[] getColunas(){

return colunas;

}

public void setColunas(String[] nomes){

colunas = nomes;
}
public int getColumnCount(){
    return colunas.length;
}

public int getRowCount(){
    return linhas.size();
}

public String getColumnName(int numCol){
    return colunas[numCol];
}

public Object getValueAt(int numLin, int numCol){
    Object[] linha = (Object[]) getLinhas().get(numLin);
    return linha[numCol];
}

}

Código para a exclusão:

int linhaSelecionada = jTable_ItensAdd.getSelectedRow();

if (jTable_ItensAdd.getSelectedRow() != -1) {

DefaultTableModel ModeloTabela = (DefaultTableModel) jTable_ItensAdd.getModel();

ModeloTabela.removeRow(jTable_ItensAdd.getSelectedRow());

int quantosRegistros = jTable_ItensAdd.getRowCount();
if (quantosRegistros > linhaSelecionada) {
            jTable_ItensAdd.setRowSelectionInterval(linhaSelecionada, linhaSelecionada);

        } else if (jTable_ItensAdd.getRowCount() > 0) {
            jTable_ItensAdd.setRowSelectionInterval(linhaSelecionada - 1, linhaSelecionada - 1);
        }

    } else {
        JOptionPane.showMessageDialog(null, "Por Gentileza Selecione uma linha");
    }
Erro:

Exception in thread AWT-EventQueue-0 java.lang.ClassCastException: ModeloBeans.ModeloTabela cannot be cast to javax.swing.table.DefaultTableModel

at Formularios.requisicao.jButton_Remover_ItensActionPerformed(requisicao.java:672)

at Formularios.requisicao.access$1300(requisicao.java:27)

at Formularios.requisicao$14.actionPerformed(requisicao.java:297)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)

at java.awt.Component.processMouseEvent(Component.java:6539)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6304)

at java.awt.Container.processEvent(Container.java:2239)

at java.awt.Component.dispatchEventImpl(Component.java:4889)

at java.awt.Container.dispatchEventImpl(Container.java:2297)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)

at java.awt.Container.dispatchEventImpl(Container.java:2283)

at java.awt.Window.dispatchEventImpl(Window.java:2746)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)

at java.awt.EventQueue$4.run(EventQueue.java:733)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

9 Respostas

S

Sua classe ModeloTabela não é um DefaultTableModel.

F

Boa tarde, Staroski
Como conserto?

J

Aqui você tem que trabalhar com seu ModeloTabela, dado que você não está usando o DefaultTableModel e sim um modelo customizado que você mesmo criou.

S

Declara a variável como sendo do tipo certo, ou seja, ModeloTabela e não DefaultTableModel.

ModeloTabela modeloTabela = (ModeloTabela) jTable_ItensAdd.getModel();
F
Meu querido, agora apareceu outra exceção:

Exception in thread AWT-EventQueue-0 java.lang.UnsupportedOperationException: Not supported yet.

at ModeloBeans.ModeloTabela.(ModeloTabela.java:28)

at Formularios.requisicao.(requisicao.java:66)

at Formularios.Principal.jMenu_Inserir_RequisicaoActionPerformed(Principal.java:436)

at Formularios.Principal.access$1100(Principal.java:17)

at Formularios.Principal$12.actionPerformed(Principal.java:271)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.AbstractButton.doClick(AbstractButton.java:376)

at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:842)

at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:886)

at java.awt.Component.processMouseEvent(Component.java:6539)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6304)

at java.awt.Container.processEvent(Container.java:2239)

at java.awt.Component.dispatchEventImpl(Component.java:4889)

at java.awt.Container.dispatchEventImpl(Container.java:2297)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)

at java.awt.Container.dispatchEventImpl(Container.java:2283)

at java.awt.Window.dispatchEventImpl(Window.java:2746)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)

at java.awt.EventQueue$4.run(EventQueue.java:733)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
S

Qual é a instrução que tem na linha 28 do arquivo ModeloTabela.java?

Qual instrução tem na linha 66 do arquivo requisicao.java?

F

As duas linhas estão vazias.
quando fiz a alteração o netbeans sugeriu a criação do método na minha ModeloTabela:

public void removeRow(int selectedRow) {

throw new UnsupportedOperationException(Not supported yet.); //To change body of generated methods, choose Tools | Templates.

}
Codigo com a alteração:

int linhaSelecionada = jTable_ItensAdd.getSelectedRow();

if (jTable_ItensAdd.getSelectedRow() != -1) {

ModeloTabela ModeloTb = (ModeloTabela) jTable_ItensAdd.getModel();

ModeloTb.removeRow(jTable_ItensAdd.getSelectedRow());

int quantosRegistros = jTable_ItensAdd.getRowCount();
if (quantosRegistros > linhaSelecionada) {
            jTable_ItensAdd.setRowSelectionInterval(linhaSelecionada, linhaSelecionada);

        } else if (jTable_ItensAdd.getRowCount() > 0) {
            jTable_ItensAdd.setRowSelectionInterval(linhaSelecionada - 1, linhaSelecionada - 1);
        }
S

Pois é, você não implementou a remoção do item, você está lançando uma exceção.

Você precisa remover o item desejado da sua lista linhas.

public void removeRow(int linha) {
    linhas.remove(linha);   // remove a linha desejada da lista
    fireTableDataChanged(); // redesenha a JTable
}
F

Boa tarde, Ricardo
Muito obrigado meu amigo.
O mundo precisa de mais pessoas iguais a você!
Funcionou certinho!

Abcs

Criado 6 de março de 2023
Ultima resposta 7 de mar. de 2023
Respostas 9
Participantes 3