Não inserir registro duplicado no jTable

Olá galera, estou com uma duvida e não consegui achar alguma coisa pesquisando aqui no grupo, gostaria de saber como posso fazer para não deixar que registros duplicados sejam inseridos em uma jTable, estou tenando usar o método contains mas acho que estou usando ele incorretamente.
Tenho o meu próprio TabelModel que extend de um AbstractTableModel

// inserindo linhas na minha jtable
meuModelo.addRow(objEstudo);
minhaJtable.setModel(objEstudo);
//Gostaria de saber como usar corretamente este método para verificar se o registro ja existe em minha jtable.
meuModelo.getDataSet().contains()

tentei passar o retorno do método contains para um booleano mas não deu certo, ele não fez o correto não distinguiu se o registro era duplicado, ele só verificou se ja tinha algo na tabela.

Ola, posta o seu código completo, este parece zoado. No contains vc deve passar pro parâmetro o objeto que vc quer localizar na lista. No addRow e no setModel vc está passando o mesmo objeto, não faz sentido, são coisas completamente diferentes.

olá este é o trecho do código que estou tentando impedir que o registro duplicado seja inserido na tabela

//trecho do código onde insere os dados, e também tento tratar para não entra dados repetidos.
 TurmaAlunoDTO turmaAluno = new TurmaAlunoDTO();
                turmaAluno.setIdTurma(idTurma);
                turmaAluno.setIdAluno(idAluno);
                turmaAluno.setNomeAluno(nomeAluno);

                boolean alunoRepetido = false;

                modeloTurmaAluno.addRow(turmaAluno);
                jTableAlunoTurma.setModel(modeloTurmaAluno);
                formataTabela();
                jTextFieldAluno.setText(null);
                idAluno = 0;
                nomeAluno = null;
                alunoRepetido = modeloTurmaAluno.getDataSet().contains(turmaAluno); /// para remover repeditos.

abaixo o meu TabelModel

public class TabelModelTurmaAlunoMatriculaDTO extends AbstractTableModel {

    // lista que vai conter todos os dados do JTable 
    private List<TurmaAlunoDTO> dataset;
    // Constante que defini o nome das colunas  
    private static final String[] col = {"Codigo", "Aluno"};

    // Construtor da classe recebe os dados a ser populado 
    public TabelModelTurmaAlunoMatriculaDTO(List<TurmaAlunoDTO> bean) {
        dataset = new ArrayList<TurmaAlunoDTO>(bean);
        fireTableStructureChanged();
    }

    public TabelModelTurmaAlunoMatriculaDTO() {
        dataset = new ArrayList<TurmaAlunoDTO>();
        fireTableStructureChanged();
    }

    // Método sobrescrito que retorna o número de linhas do JTable, após populado  
    @Override
    public int getRowCount() {
        return dataset.size();
    }

    // Método sobrescrito que retorna o número de colunas do JTable após populado  
    @Override
    public int getColumnCount() {
        return col.length;
    }

    // Método sobrescrito que vai popular e retornar cada célula do JTable  
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        TurmaAlunoDTO cbean = dataset.get(rowIndex);
        Object row = null;
        switch (columnIndex) {
            //  case 0: row = cbean.getIdProduto(); break; 
            case 0:
                row = cbean.getIdAluno();
                break;
            case 1:
                row = cbean.getNomeAluno();
                break;
            case 2:
                row = cbean.getDsTurma();
                break;
            case 3:
                row = cbean.getIdTurma();
                break;
            case 4:
                row = cbean.getIdTurmaAluno();
                break;

        }
        return row;
    }

    /* Este método sobrescrito, defini se o JTable será editável ou não. 
     Voce pode definir qual coluna de qual linha será editável. Caso voce 
     defina que o seu JTable seja editável, então é necessário definir também 
     o método "setValueAt" que vem logo a seguir,  caso contrário, é só retornar 
     false para todas as linhas e colunas, como definido abaixo. */
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        //  return true; 
        return false;
    }

    /* Este método sobrescrito, permite voce editar o JTable, caso o método anterior 
     tenha algumas colunas de algumas ou todas linhas editáveis setadas para true, 
     ou que tenha como retorno o valor true para todas as linhas e colunas. */
    @Override
    public void setValueAt(Object value, int row, int col) {
        TurmaAlunoDTO dado = dataset.get(row);

        switch (col) {
            case 0:
                dado.setIdAluno((Long) value);
                break;
            case 1:
                dado.setNomeAluno((String) value);
                break;
            case 2:
                dado.setDsTurma((String) value);
                break;
            case 3:
                dado.setIdTurma((Long) value);
                break;
            case 4:
                dado.setIdTurmaAluno((Long) value);
                break;

        }
        fireTableCellUpdated(row, col);
    }

    // Este método sobrescrito define que tipo de dado será retornado para cada coluna 
    @Override
    public Class getColumnClass(int column) {
        if (column == 0) {
            return long.class;
        }
        if (column == 3) {
            return long.class;
        }
        if (column == 4) {
            return long.class;
        } else {
            return String.class;
        }
    }

    /* Este método criado por nós, vai retornar o conjunto 
     de dados inteiro do JTable, através de um List contendo 
     Objetos ClienteBean populados. */
    public List<TurmaAlunoDTO> getDataSet() {
        return dataset;
    }

    /* Este método sobrescrito vai definir o nome das colunas 
     que foi atribuído na constante "col" logo no início da classe */
    @Override
    public String getColumnName(int column) {
        return col[column];
    }

    /* Este método foi criado por nós para retornar um objeto ClienteBean 
     populado, de acordo com o número de linha do JTable fornecido pelo 
     parâmetro "int row" */
    public TurmaAlunoDTO getRow(int row) {
        return dataset.get(row);
    }

    /* Este método criado por nós, serve para voce criar um 
     ClienteBean e populá-lo fora do JTable e passar para este 
     método que vai acrescentar os dados na última linha do JTable 
     sem que haja a necessidade de se usar o método "setValueAt(...)" */
    public void addRow(TurmaAlunoDTO bean) {
        dataset.add(bean);
        fireTableDataChanged();
    }

    /* Este método foi criado por nós para remover uma linha 
     específica do JTable, de acordo com linha fornecida pelo 
     parâmetro "int row" */
    public void removeRow(int row) {
        dataset.remove(row);
        fireTableDataChanged();
    }

    /* Este método criado por nós, acrescenta uma linha em branco 
     no JTable, caso voce queira inserir dados diretamente no JTable 
     tem que chamar este método antes. */
    public void addEmptyRow() {
        dataset.add(new TurmaAlunoDTO());
        fireTableDataChanged();
    }

    // metodo criado para limpar todos os dados da tabela.
    public void clearRow() {
        dataset.clear();
        fireTableDataChanged();
    }

}

Para o contains funcfionar vc precisa implementar o método equals da classe TurmaAlunoDTO, fazendo ele comparar pelo código.

Neste caso eu teria que comparar se o objeto que estou inserindo é igual a algum que ja está na tabela?

Mas é justamente oq vc disse que queria fazer… E tentou, mas não funciona pq faltou fazer oq escrevi anteriormente.

@Rodrigo_Void eu implementei na classe o método equals :

[CODE]
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final TurmaAlunoDTO other = (TurmaAlunoDTO) obj;
if (this.idTurmaAluno != other.idTurmaAluno) {
return false;
}
if (this.idTurma != other.idTurma) {
return false;
}
if (this.idAluno != other.idAluno) {
return false;
}
if (this.idCriadoPor != other.idCriadoPor) {
return false;
}
if (this.idAtualizadoPor != other.idAtualizadoPor) {
return false;
}
if (!Objects.equals(this.nomeAluno, other.nomeAluno)) {
return false;
}
if (!Objects.equals(this.dsTurma, other.dsTurma)) {
return false;
}
if (!Objects.equals(this.dataCriacao, other.dataCriacao)) {
return false;
}
if (!Objects.equals(this.dataAtualizacao, other.dataAtualizacao)) {
return false;
}
return true;
}

[/CODE]

Ttentei passar o codigo no método contains mas não esta dando certo.

[CODE]
TurmaAlunoDTO turmaAluno = new TurmaAlunoDTO();

            turmaAluno.setIdTurma(idTurma);
            turmaAluno.setIdAluno(idAluno);
            turmaAluno.setNomeAluno(nomeAluno);

            boolean alunoRepetido = false;

            modeloTurmaAluno.addRow(turmaAluno);
            jTableAlunoTurma.setModel(modeloTurmaAluno);
            formataTabela();
            jTextFieldAluno.setText(null);
            idAluno = 0;
            nomeAluno = null;
            alunoRepetido = modeloTurmaAluno.getDataSet().contains(turmaAluno.getIdAluno()); /// para remover repeditos.
            if (alunoRepetido == true) {
                JOptionPane.showMessageDialog(this, "Este Aluno já esta matriculado nesta Turma!", "ATENÇÃO!", JOptionPane.WARNING_MESSAGE);
             
            }

[/CODE]

Qual seria a maneira correta de trabalhar com ele, ainda não consegui entender, poderia me dar um exemplo por favor?

Não te disse pra meche no parametro do metodo contains. Vc só era pra implementar o equals e fazer por CODIGO, vc enfiou todos campos la.

Lê primeiro, procure entender oq está fazendo:

sobrescrevi o método equals, debugando o código vi que quando passa por ele, retorna o valor correto.
O problema está no contains que pelo que pude perceber ele apenas verifica se tem alguma coisa na tabela, gostaria de saber se no TabelModel consigo identificar se existem registros duplicados.

@Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final TurmaAlunoDTO other = (TurmaAlunoDTO) obj; if (this.idAluno != other.idAluno) { return false; } return true; }