Falha de renderização e carregamento, JTABLE no NetBeans 7.1.2

Olá pessoal estou desenvolvendo um sistema aqui, acontece que tenho duas Jtable, na primeira, ao selecionar a segunda tabela captura a seleção e carrega dados a partir da lista fornecida pelo objeto selecionado.


Simples e funciona bem!
Porém, a selecionar a segunda linha, percebo que a tabela recebeu os dados pois ao clicar em calcular totais o valor total em vermelho muda! Faz o calculo corretamente.
Porém os dados da tabela permanecem os da seleção anterior!
Ou seja na primeira seleção funciona normalmente, tanto que se alterar e salvar, fica de boa! Mas ao selecionar a segunda linha a Jtable não atualiza os dados!

Bro, não dá pra adivinhar o porque, só chutando ou então fica difícil. Posta o código necessário: o evento que seleciona na linha e a parte que atualiza a tabela que deveria atualizar os dados.

brother eu utilizo o formulário de amostra e detalhe do net beans, uso um binding para fazer a seleção, veja, vou explicando:


Bom, a tabela de detalhe tem seus elementos ligados a tabela mestre ou masterTable, através de um binding, que controla isso para a gente, pela imagem da para enteder que ele pega uma lista de dados do elemento selecionado pela materTable.
A master table da load em uma lista do referente objeto:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.contmaismais.beans;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

/**
 *
 * @author Bateria de Jogos
 */
@Entity
@Table(name = "req_cab", catalog = "comercial", schema = "")
@NamedQueries({
    @NamedQuery(name = "ReqCab.findAll", query = "SELECT r FROM ReqCab r"),
    @NamedQuery(name = "ReqCab.findByCodReqCab", query = "SELECT r FROM ReqCab r WHERE r.codReqCab = :codReqCab"),
    @NamedQuery(name = "ReqCab.findByFuncionarioCodFuncionario", query = "SELECT r FROM ReqCab r WHERE r.funcionarioCodFuncionario.codFuncionario = :funcionarioCodFuncionario"),
    @NamedQuery(name = "ReqCab.findByDataReqCab", query = "SELECT r FROM ReqCab r WHERE r.dataReqCab = :dataReqCab")})
public class ReqCab implements Serializable {
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "cod_req_cab")
    private int codReqCab;
    @JoinColumn(name = "funcionario_cod_funcionario", referencedColumnName="cod_funcionario")
    @ManyToOne
    private Funcionario funcionarioCodFuncionario;
    @Column(name = "data_req_cab")
    @Temporal(TemporalType.DATE)
    private Date dataReqCab;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "reqCab")
    private List<ReqDet> reqDetList;

    public ReqCab() {
    }

    public ReqCab(Integer codReqCab) {
        this.codReqCab = codReqCab;
    }

    public ReqCab(Integer codReqCab, Funcionario funcionarioCodFuncionario) {
        this.codReqCab = codReqCab;
        this.funcionarioCodFuncionario = funcionarioCodFuncionario;
    }

    public Integer getCodReqCab() {
        return codReqCab;
    }

    public void setCodReqCab(Integer codReqCab) {
        Integer oldCodReqCab = this.codReqCab;
        this.codReqCab = codReqCab;
        changeSupport.firePropertyChange("codReqCab", oldCodReqCab, codReqCab);
    }

    public Funcionario getFuncionarioCodFuncionario() {
        return funcionarioCodFuncionario;
    }

    public void setFuncionarioCodFuncionario(Funcionario funcionarioCodFuncionario) {
        Funcionario oldFuncionarioCodFuncionario = this.funcionarioCodFuncionario;
        this.funcionarioCodFuncionario = funcionarioCodFuncionario;
        changeSupport.firePropertyChange("funcionarioCodFuncionario", oldFuncionarioCodFuncionario, funcionarioCodFuncionario);
    }

    public Date getDataReqCab() {
        return dataReqCab;
    }

    public void setDataReqCab(Date dataReqCab) {
        Date oldDataReqCab = this.dataReqCab;
        this.dataReqCab = dataReqCab;
        changeSupport.firePropertyChange("dataReqCab", oldDataReqCab, dataReqCab);
    }

    public List<ReqDet> getReqDetList() {
        return reqDetList;
    }

    public void setReqDetList(List<ReqDet> reqDetList) {
        this.reqDetList = reqDetList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codReqCab);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof ReqCab)) {
            return false;
        }
        ReqCab other = (ReqCab) object;
        if ((this.codReqCab == 0 && other.codReqCab != 0)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.contmaismais.beans.ReqCab[ codReqCab=" + codReqCab + " ]";
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }
    
}

já na tabela de detalhe temos o seguinte objeto:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.contmaismais.beans;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import javax.persistence.*;

/**
 *
 * @author Bateria de Jogos
 */
@Entity
@Table(name = "req_det", catalog = "comercial", schema = "")
@NamedQueries({
    @NamedQuery(name = "ReqDet.findAll", query = "SELECT r FROM ReqDet r"),
    @NamedQuery(name = "ReqDet.findByReqCabCodReqCab", query = "SELECT r FROM ReqDet r WHERE r.reqCab.codReqCab = :codReqCab"),
    @NamedQuery(name = "ReqDet.findByProdutoCodProduto", query = "SELECT r FROM ReqDet r WHERE r.produtoCodProduto.codProduto = :produtoCodProduto"),
    @NamedQuery(name = "ReqDet.findByQtdeReqDet", query = "SELECT r FROM ReqDet r WHERE r.qtdeReqDet = :qtdeReqDet"),
    @NamedQuery(name = "ReqDet.findByVlrUnitReqDet", query = "SELECT r FROM ReqDet r WHERE r.vlrUnitReqDet = :vlrUnitReqDet"),
    @NamedQuery(name = "ReqDet.findByVlrTotalReqDet", query = "SELECT r FROM ReqDet r WHERE r.vlrTotalReqDet = :vlrTotalReqDet"),
    @NamedQuery(name = "ReqDet.findByFlag", query = "SELECT r FROM ReqDet r WHERE r.flag = :flag")
})
public class ReqDet implements Serializable {
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "cod_req_det")
    private int codReqDet;
    @JoinColumn(name = "req_cab_cod_req_cab", referencedColumnName = "cod_req_cab")
    @ManyToOne(optional = false)
    private ReqCab reqCab;
    @JoinColumn(name = "produto_cod_produto", referencedColumnName = "cod_produto")
    @ManyToOne(optional=false)
    private Produto produtoCodProduto;
    @Column(name = "qtde_req_det")
    private int qtdeReqDet;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "vlr_unit_req_det")
    private Double vlrUnitReqDet;
    @Column(name = "vlr_total_req_det")
    private Double vlrTotalReqDet;
    
    @Column(name = "flag")
    private boolean flag;

    public boolean getFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        boolean oldFlag = this.flag;
        this.flag = flag;
        changeSupport.firePropertyChange("flag", oldFlag, flag);
    }
    
    
    
    public ReqDet() {
    }

    public int getCodReqDet() {
        return codReqDet;
    }

    public void setCodReqDet(int codReqDet) {
        int oldCodReqDet = this.codReqDet;
        this.codReqDet = codReqDet;
        changeSupport.firePropertyChange("codReqDet", oldCodReqDet, codReqDet);
    }
    
    

    public Produto getProdutoCodProduto() {
        return produtoCodProduto;
    }

    public void setProdutoCodProduto(Produto produtoCodProduto) {
        Produto oldProdutoCodProduto = this.produtoCodProduto;
        this.produtoCodProduto = produtoCodProduto;
        changeSupport.firePropertyChange("produtoCodProduto", oldProdutoCodProduto, produtoCodProduto);
    }
    
    
    public int getQtdeReqDet() {
        return qtdeReqDet;
    }

    public void setQtdeReqDet(int qtdeReqDet) {
        int oldQtdeReqDet = this.qtdeReqDet;
        this.qtdeReqDet = qtdeReqDet;
        changeSupport.firePropertyChange("qtdeReqDet", oldQtdeReqDet, qtdeReqDet);
    }

    public Double getVlrUnitReqDet() {
        return vlrUnitReqDet;
    }

    public void setVlrUnitReqDet(Double vlrUnitReqDet) {
        Double oldVlrUnitReqDet = this.vlrUnitReqDet;
        this.vlrUnitReqDet = vlrUnitReqDet;
        changeSupport.firePropertyChange("vlrUnitReqDet", oldVlrUnitReqDet, vlrUnitReqDet);
    }

    public Double getVlrTotalReqDet() {
        return vlrTotalReqDet;
    }

    public void setVlrTotalReqDet(Double vlrTotalReqDet) {
        Double oldVlrTotalReqDet = this.vlrTotalReqDet;
        this.vlrTotalReqDet = vlrTotalReqDet;
        changeSupport.firePropertyChange("vlrTotalReqDet", oldVlrTotalReqDet, vlrTotalReqDet);
    }

    public ReqCab getReqCab() {
        return reqCab;
    }

    public void setReqCab(ReqCab reqCab) {
        ReqCab oldReqCab = this.reqCab;
        this.reqCab = reqCab;
        changeSupport.firePropertyChange("reqCab", oldReqCab, reqCab);
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codReqDet + reqCab.getCodReqCab());
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof ReqDet)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.contmaismais.beans.ReqDet[ reqCab=" + reqCab + " ]";
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }
    
}

O métpdo utilizado é uma STRATERGY do binding:

...
org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${selectedElement.reqDetList}");
        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, masterTable, eLProperty, detailTable);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${produtoCodProduto.codProduto}"));
...

Você não tem que atualizar o objeto selecionado?

Descobri o erro!
A lista de detalhe funciona assim: ela tem diversos itens que são listados com a chave primaria da master table correto?
Pois na lista de detalhe eu ocultei a exibição do codigo autoincremento dos itens do detalhe, o que ocorre e que o frame utiliza deste codigo da Jtable para atualizar campos, dessa forma quando eu atualizo pela segunda vez tentado recarregar a Jtable de detalhe ele não encontra novo código! bE permanece com a lista atual… ou seja nesta aplicação ele faz isso na camada visual… o que e ruim… mas funcionou apenas exibindo o codigo.
Para esclarecer… na segunda imagem quen mandei tem os itens AVALABLE e SELECTED, adicionei a tela o codReqDet.