Re:Duplo Click na JTable

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.

  1. 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.

  2. Faça um método que retorne o produto relacionado a determinada linha, diretamente. Isso só é possível se você cumprir o passo 1.

  3. 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