Não entendi.
Você não pode criar um método na classe Produto que receba um orçamento?
Você implementou seu próprio TableModel ou está usando o DefaultTableModel?
Vc pode capturar o duplo do clico do mouse assim:
JTable tabela = new JTable(dataModel);
tabela.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
if(e.getClickCount() == 2){
System.out.println("duplo-clique detectado");
}
}
});
Ok, algumas dicas.
-
Não converta o seu objeto para String[], dentro do seu TableModel. Trabalhe diretamente com ele! É mais fácil e tranquilo de manter o código depois. O propósito do TableModel é justamente não fazer isso.
-
Faça um método que retorne o produto relacionado a determinada linha, diretamente. Isso só é possível se você cumprir o passo 1.
-
Use esse método para pegar qual objeto está selecionado na tabela e depois envia-lo para a classe orçamento. Na classe orçamento, crie um método addProduto(Produto p) que receberá o produto selecionado. Com seu model corrigido essa tarefa será algo como:
suaTabela.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) {
if (evt.getClickCount == 2) { //Aos dois cliques
Produto p = modelDaSuaTabela.getProduto(suaTabela.getSelectedIndex());
orcamento.addProduto(p);
}
}
}
Pefeito!
Agora vocë pode retornar o cliente relacionado a linha. Basta adicionar um getCliente(int row) que retorne o cliente que está no seu arraylist.
No código do duplo click, pode usar esse método.
Não seria mais fácil o seu método de incluir aceitar um cliente direto?
Mas… seu problema não era com os produtos?
blz, pessoal bem vi que esse tópico é quase igual ao meui problema, porém com um adendo a minha tabela eu mesmo desenvolvi e não estou conseguindo adicionar o Listener na tabela corretamente.
Não estou conseguindo fazer o seguinte
Tenho uma Classe q tem uma JTable (produtos)
Tenho uma Classe orçamento
Esse orçamento tenho um JTextField e um botão q chama essa classe produtos
Preciso q a hora q eu der o duplo click na jtable ele passar as informações para os jtextfiels correspondente na classe do orçamento…
A função de duplo click est pronto mas naum tenho ideia com faço isso!!!
a hora q eu um duplo na numa linha da jtable(Produtos) tem q pegar os dados repassar os dados que esta na linha, nos JtextField correspondentes na classe do orçamento!! Estou usando o hibernate!
Estou usando meu TableModel
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class TabConsCprod extends AbstractTableModel {
private String[] colunas = {"Código", "Descrição", "N.º Original", "N.º Fabrica"};
private List dados = new ArrayList();
public TabConsCprod() {
}
@Override
public void setValueAt(Object obj, int l, int prod) {
((String[])dados.get(l))[prod] = (String)obj;
}
public Object getValueAt(int l, int prod) {
return ((String[])dados.get(l))[prod];
}
public int getColumnCount() {
return colunas.length;
}
public int getRowCount() {
return dados.size();
}
@Override
public String getColumnName(int prod) {
return colunas[prod];
}
public void incluir(String codigo, String descricao, String numOriginal, String numFabricante) {
dados.add(new String[] {codigo, descricao, numOriginal, numFabricante});
}
public void limpar() {
dados.clear();
}
}
ViniGodoy
public class TabConsClie extends AbstractTableModel {
private String[] colunas = {"Código","F/J", "Razão Social / Nome", "Nome Reduzido / Apelido", "Localidade", "UF"};
private List<Cliente> dados = new ArrayList<Cliente>();
private CadClie c;
public TabConsClie() {
}
@Override
public void setValueAt(Object obj, int l, int c) {
Cliente cli = dados.get(l);
switch(c){
case 0:
cli.setCodigo(Long.parseLong((String)obj));
case 1:
cli.setFisJur((String)obj);
case 2:
cli.setNome((String)obj);
case 3:
cli.setApelido((String)obj);
case 4:
cli.setCidade((String)obj);
case 5:
cli.setEstado((String)obj);
}
}
public Object getValueAt(int l, int c) {
Cliente cli = dados.get(l);
switch(c){
case 0:
cli.getCodigo();
case 1:
cli.getFisJur();
case 2:
cli.getNome();
case 3:
cli.getApelido();
case 4:
cli.getCidade();
case 5:
cli.getEstado();
}
return null;
}
public int getColumnCount() {
return colunas.length;
}
public int getRowCount() {
return dados.size();
}
@Override
public String getColumnName(int c) {
return colunas[c];
}
public void incluir(String codigo, String fis_jur, String nome, String apelido, String cidade, String estado) {
Cliente cli = new Cliente();
cli.setCodigo(Long.parseLong(codigo));
cli.setFisJur(fis_jur);
cli.setNome(nome);
cli.setApelido(apelido);
cli.setCidade(cidade);
cli.setEstado(estado);
dados.add(cli);
/** dados.add(new String[] {codigo, fis_jur, nome, apelido, cidade, estado});
*/
}
public void limpar() {
dados.clear();
}
}
Era o produto mas esqueci q o clienete tbm tem q fazer a mesma coisa
O problema q parou de vir os dados e naum estou localizando o problema