Tabela relacionando Produto + Mercado

1 resposta
eliasfsjunior

Estou com uma dúvida de como fazer uma JTable, onde eu possa relacionar Mercados com Produtos.
Tenho um Bean para Mercado e outro para Produto, ambos contém ID e Nome. E tenho uma classe onde ocorre o relacionamento desses dois, denominada MercadoProduto. O que eu já consegui fazer foi criar a JTable com os nomes dos produtos e nome dos mercados, mas agora preciso que no encontro de cada linha com cada coluna, entre o preço do produto. Segue exemplo abaixo:

PrecoTableModel

public PrecoTableModel() {
		this.cache = new HashMap<Integer, MercadoProduto>();
		this.cache = loadAllMercadoProduto();
		this.listMercadoBean = loadMercados();
		this.listProdutoBean = loadProdutos();
		this.columnCount = listMercadoBean.size()+1;
		this.rowCount = listProdutoBean.size();
	}
	
	@Override
	public String getColumnName(int columnIndex) {
		if(columnIndex == 0) 
			return "PRODUTO / MERCADO";
		if(columnIndex > 0)
			return listMercadoBean.get(columnIndex-1).getNome();
		return "";
	}
	
	@Override
	public int getColumnCount() {
		return columnCount;
	}
	
	@Override
	public int getRowCount() {
		return rowCount;
	}
	
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		
		if (columnIndex == 0) {
			return listProdutoBean.get(rowIndex).getNome();
		}
		
		if (columnIndex > 0) {
			
			// Como preencher o restante da tabela?
			
		}
		
		return null;
	}
	
	private HashMap<Integer, MercadoProduto> loadAllMercadoProduto() {
		
		HashMap<Integer, MercadoProduto> result = new HashMap<Integer, MercadoProduto>();
		
		List<MercadoProduto> list = mercadoProdutoDAO.findAll();
		
		for (int i = 0; i < list.size(); i++) {
			MercadoProduto mb = list.get(i);
			result.put(i, mb);
		}
    	
		return result;
	}
	
	private List<MercadoBean> loadMercados() {
		return mercadoDAO.findAll();
	}
	
	private List<ProdutoBean> loadProdutos() {
		return produtoDAO.findAll();
	}

MercadoProdutoBean

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "merc_prod_id")
private Integer id;

@Column(name = "merc_prod_preco")
private Double preco;

@ManyToOne
@JoinColumn(name = "merc_prod_mercado_id")
private MercadoBean mercado;

@ManyToOne
@JoinColumn(name = "merc_prod_produto_id")
private ProdutoBean produto;

//Getters and Setters removidos

MercadoBean

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "mercado_id")
private Integer id;

@Column(name = "mercado_nome", length = 50)
private String nome;
	
@OneToMany(mappedBy = "produto", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<MercadoProduto> produto;

//Getters and Setters removidos

ProdutoBean

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "produto_id")
private Integer id;

@Column(name = "produto_nome", length = 50)
private String nome;

@OneToMany(mappedBy = "mercado", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<MercadoProduto> mercado;

//Getters and Setters removidos

1 Resposta

MarkKnopfler

Acho que a maneira mais fácil é vc criar um array de 2 dimensões, ou seja, array de arrays, pra alimentar no loadAllMercadoProduto. Ex.:

Double tabela[][];
      tabela = new Double[num_produtos][num_mercados];
      tabela[0][0] = ... ;  // Produto 0, mercado 0
      tabela[0][1] = ... ;  // Produto 0, mercado 1

Para cara MercadoProduto, vc terá que localizar os beans correspondentes nos Lists de mercados e produtos, a fim de saber a posição deles na lista.

Aí no getValueAt() é intuitivo!

Criado 18 de novembro de 2012
Ultima resposta 19 de nov. de 2012
Respostas 1
Participantes 2