Re:Duplo Click na JTable

12 respostas
ViniGodoy

Não entendi.

12 Respostas

ViniGodoy

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?

ramilani12

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");
        }
      }
     });
ViniGodoy

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); } } }

ViniGodoy

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?

tengan

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.

raikk0n3n

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!!!

raikk0n3n

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!

raikk0n3n

Estou usando meu TableModel

raikk0n3n
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();
    }
    
}
raikk0n3n

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();
    }
    
}
raikk0n3n

Era o produto mas esqueci q o clienete tbm tem q fazer a mesma coisa

raikk0n3n

O problema q parou de vir os dados e naum estou localizando o problema

Criado 31 de março de 2007
Ultima resposta 3 de abr. de 2007
Respostas 12
Participantes 4