setValeuAT do TableModel

6 respostas
F

Galera estou quebrando a cabeça nisso..
Como faço no meu table model quando tenho 2 campos que são chave estrangeira de outras tabelas?

exemplos, na minha classe pedidos: tenho estoque e clientes que são o ID.

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author Caio Fernando
 */
@Entity
@Table(name = "pedidos")
@NamedQueries({
    @NamedQuery(name = "Pedidos.findAll", query = "SELECT p FROM Pedidos p"),
    @NamedQuery(name = "Pedidos.findByIdPedidos", query = "SELECT p FROM Pedidos p WHERE p.idPedidos = :idPedidos"),
    @NamedQuery(name = "Pedidos.findByCliente", query = "SELECT p FROM Pedidos p WHERE p.cliente = :cliente"),
    @NamedQuery(name = "Pedidos.findByProduto", query = "SELECT p FROM Pedidos p WHERE p.produto = :produto"),
    @NamedQuery(name = "Pedidos.findByQnt", query = "SELECT p FROM Pedidos p WHERE p.qnt = :qnt"),
    @NamedQuery(name = "Pedidos.findByValor", query = "SELECT p FROM Pedidos p WHERE p.valor = :valor"),
    @NamedQuery(name = "Pedidos.findByData", query = "SELECT p FROM Pedidos p WHERE p.data = :data"),
    @NamedQuery(name = "Pedidos.findByStatus", query = "SELECT p FROM Pedidos p WHERE p.status = :status"),
    @NamedQuery(name = "Pedidos.findByPago", query = "SELECT p FROM Pedidos p WHERE p.pago = :pago")})
public class Pedidos implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "IdPedidos")
    private Integer idPedidos;
    @Basic(optional = false)
    @Column(name = "Cliente")
    private String cliente;
    @Basic(optional = false)
    @Column(name = "Produto")
    private String produto;
    @Basic(optional = false)
    @Column(name = "Qnt")
    private int qnt;
    @Basic(optional = false)
    @Column(name = "Valor")
    private float valor;
    @Basic(optional = false)
    @Column(name = "Data")
    private String data;
    @Basic(optional = false)
    @Column(name = "Status")
    private String status;
    @Basic(optional = false)
    @Column(name = "Pago")
    private String pago;
    @JoinColumn(name = "CodProduto", referencedColumnName = "code")
    @ManyToOne(optional = false)
    private Estoque estoque;
    @JoinColumn(name = "CodCliente", referencedColumnName = "IdCliente")
    @ManyToOne(optional = false)
    private Clientes clientes;

    public Pedidos() {
    }

    public Pedidos(Integer idPedidos) {
        this.idPedidos = idPedidos;
    }

    public Pedidos(Integer idPedidos, String cliente, String produto, int qnt, float valor, String data, String status, String pago) {
        this.idPedidos = idPedidos;
        this.cliente = cliente;
        this.produto = produto;
        this.qnt = qnt;
        this.valor = valor;
        this.data = data;
        this.status = status;
        this.pago = pago;
    }

    public Integer getIdPedidos() {
        return idPedidos;
    }

    public void setIdPedidos(Integer idPedidos) {
        this.idPedidos = idPedidos;
    }

    public String getCliente() {
        return cliente;
    }

    public void setCliente(String cliente) {
        this.cliente = cliente;
    }

    public String getProduto() {
        return produto;
    }

    public void setProduto(String produto) {
        this.produto = produto;
    }

    public int getQnt() {
        return qnt;
    }

    public void setQnt(int qnt) {
        this.qnt = qnt;
    }

    public float getValor() {
        return valor;
    }

    public void setValor(float valor) {
        this.valor = valor;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getPago() {
        return pago;
    }

    public void setPago(String pago) {
        this.pago = pago;
    }

    public Estoque getEstoque() {
        return estoque;
    }

    public void setEstoque(Estoque estoque) {
        this.estoque = estoque;
    }

    public Clientes getClientes() {
        return clientes;
    }

    public void setClientes(Clientes clientes) {
        this.clientes = clientes;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idPedidos != null ? idPedidos.hashCode() : 0);
        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 Pedidos)) {
            return false;
        }
        Pedidos other = (Pedidos) object;
        if ((this.idPedidos == null && other.idPedidos != null) || (this.idPedidos != null && !this.idPedidos.equals(other.idPedidos))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "sistema.Objetos.Pedidos[idPedidos=" + idPedidos + "]";
    }



}

Porém não sei como setar o valor no meu table model.

public Object getValueAt(int linha, int coluna) {

       Pedidos p = (Pedidos) pedidos.get(linha);

       switch (coluna){
             case 0:
          return p.getIdPedidos();
           case 1:
          return p.getCliente();
           case 2:
          return p.getProduto();
           case 3:
          return p.getQnt();
           case 4:
          return p.getValor();
           case 5:
          return p.getData();
           case 6:
          return p.getStatus();
          case 7:
          return p.getPago();
           case 8:
          return p.getClientes();
           case 9:
          return p.getEstoque();
           default:
        return "";
    }
    }
    @Override
    public void setValueAt(Object valor, int linha, int coluna) {

        Pedidos p = (Pedidos) pedidos.get(linha);

        switch(coluna){

             case 0:
           p.setIdPedidos(Integer.parseInt(valor.toString()));
           break;

           case 1:
           p.setCliente(valor.toString());
           break;

           case 2:
           p.setProduto(valor.toString());
           break;

           case 3:
            p.setQnt(Integer.parseInt(valor.toString()));
           break;

           case 4:
            p.setStatus(valor.toString());
           break;

           case 5:
        
           p.setData((valor.toString()));
        
           break;

           case 6:
          p.setStatus(valor.toString());
           break;
             case 7:
          p.setPago(valor.toString());
           break;
                 case 8:
          p.setClientes(null);// aqui ele pede um objeto do tipo cliente
           break;
                  case 9:
          p.setEstoque(null);// aqui ele pede um objeto do tipo estoque

          break;


        }


        fireTableDataChanged();
    }

6 Respostas

luiz_renato

Amigo,

Tente fazer um cast pro’s tipos requeridos (Clientes e Estoque) por ex:

p.setClientes((Cliente)valor);

É interessante vc nomear suas entidades no singular ( no exemplo acima ficaria Cliente) e deixar o plural p/ atributos do tipo coleções/lista.

C

Luiz, fiz o seguinte…

view plaincopy to clipboardprint?
case 8:
p.setClientes((Clientes) valor);

case9:
p.setEstoque((Estoque) valor);

Não deu erro na hora de executar, porém na minha jtable na coluna codCliente aparece isso abaixo e não somente os id’s:

sistema.Obejtos.Clientes[idCliente=1]
sistema.Obejtos.Clientes[idCliente=2]
sistema.Obejtos.Clientes[idCliente=2] e assim por diante, e também acontece isso na coluna codProduto.

tentei também colocar e dá erro:
view plaincopy to clipboardprint?
p.setClientes((Clientes) valor.toString()));

luiz_renato

Ok, então vc está setando o valor corretamente, ocorre que vc quer que o valor retornado pelo modelo tenha o id do cliente.
Então vc altera o getValueAt p/ retornar o id do Cliente .

C

Luiz desculpa minha "burrice"..rs

mais teoricamente isso já não estava sendo feito? ou está errado o meu getValue?

// Classe pedidos, onde contém IdCliente e codProduto.
 @JoinColumn(name = "CodProduto", referencedColumnName = "code")  
    @ManyToOne(optional = false)  
    private Estoque estoque;  
    @JoinColumn(name = "CodCliente", referencedColumnName = "IdCliente")  
    @ManyToOne(optional = false)  
    private Clientes clientes; 

//aqui é no  getValueAt 
          return p.getClientes();  
           case 9:  
          return p.getEstoque();
luiz_renato

Não é burrice.

Olha só : lá no getValueAt , vc vai dizer que valores que vão ser exibidos em cada coluna . Só pra exemplificar se vc quizer que saisse a String “NADA” em todas as colunas vc faria o seguinte :

public Object getValueAt(int linha, int coluna) {  
         return "NADA";

Como vc quer que imprima id do cliente vc faz:

case 8:  
          return p.getClientes().getId();
           // se fosse o nome seria   return p.getClientes().getNome();
C

Puts Luiz
Salvou minha lavoura…hehe

Valeu

Criado 17 de junho de 2011
Ultima resposta 17 de jun. de 2011
Respostas 6
Participantes 3