Capturar Nome da Coluna de Combobox selecionado numa JTable [SOLUCIONADO]

1 resposta
CLEYSON

Boa Tarde Companheiros ...

Estou com um Dilema ...

Acrescentei dois JCombobox em minha JTable, onde o usuário pode optar por escolher o produto pelo combo de Código ou Combo de Descrição.
Com a Escolha do Combo Código é setado um valor corresponder no combo de Descrição(isso ocorre através de index (array) )
Com a Escolha do Combo Descrição é setado um valor corresponder no combo de Codigo(isso ocorre através de index (array) )

Meu problema é: Saber em qual combo o usuário clicou para saber qual o nome da minha coluna.

JCombobox codigo = coluna Codigo
JCombobox descricao = coluna Descrição

O código abaixo funciona para todas colunas restantes da tabela, menos pra essas duas colunas:

JTModular - JTable

jTModular.addMouseListener( new MouseAdapter() {   
            @Override
        public void mouseClicked( MouseEvent e ) {   
            int x = e.getX();   
            int y = e.getY(); 
            String nomeColuna = jTModular.getColumnName(jTModular.getColumnModel().getColumnIndexAtX(x));
            JOptionPane.showMessageDialog(null, "Clicou na Coluna: " + nomeColuna);
            }});   
        }

O Codigo que tratará o evento será:
Obs: Quem passa itemSelecionado é o itemStateChanged do combo ...

public void atualizarFocus(String itemSelecionado){
        //this.nomeColuna = jTModular.getColumnName(jTModular.getSelectedColumn());
        JOptionPane.showMessageDialog(null, "Coluna é : " + this.nomeColuna + " - Item : " + itemSelecionado) ;
        int itemNumero = -1;
        String valor;

        if (this.nomeColuna.equals("Codigo")){
           if (!itemSelecionado.equals("")) {
               for (int contador = 0; contador < this.tamanhoArray; contador++){
                valor = this.codigo[contador];
                if (itemSelecionado.equals(valor)){
                    itemNumero = contador;
                }
               }//For
               
            if (itemNumero != -1){
                //Seleciona o Item correspondente na Descrição
                jTModular.setValueAt(this.descricao[itemNumero],jTModular.getSelectedRow(),jTModular.getColumnModel().getColumnIndex("Descrição"));
                //Seleciona o Item correspondente na Unidade
                jTModular.setValueAt(this.unidade[itemNumero],jTModular.getSelectedRow(),jTModular.getColumnModel().getColumnIndex("UN"));       
                }//if
          }//if 
        } else if (this.nomeColuna.equals("Descrição")){
     
            if (!itemSelecionado.equals("")) {    
               for (int contador = 0; contador < this.tamanhoArray; contador++){
                valor = this.descricao[contador];
                if (itemSelecionado.equals(valor)){
                    itemNumero = contador;
                    }//if
               }//For

            if (itemNumero != -1){   
                //Seleciona o Item correspondente na Descrição
                jTModular.setValueAt(this.codigo[itemNumero],jTModular.getSelectedRow(),jTModular.getColumnModel().getColumnIndex("Codigo"));
                //Seleciona o Item correspondente na Unidade
                jTModular.setValueAt(this.unidade[itemNumero],jTModular.getSelectedRow(),jTModular.getColumnModel().getColumnIndex("UN"));    
                }//if
 
            }//if

        }//if

    }//Fim do Método

O código abaixo não informa corretamente todas as vezes:

this.nomeColuna = jTModular.getColumnName(jTModular.getSelectedColumn());

Já quebrei a cabeça muito antes de perguntar ... mas em todas minhas soluções cheguei perto mas não 100% ...

Desde já agradeço!

1 Resposta

CLEYSON

Problema Solucionado :

O problema é que o evento do Combobox estava executando antes da linha receber o foco de seleção.
Isso é uma solução, devem existir outras...

public void atualizarFocus(String itemSelecionado){
        if (jTModular.getEditingRow() >= 0){

            //Saber qual a Coluna
            this.nomeColuna = jTModular.getColumnName(jTModular.getSelectedColumn());
            //Imprimir a Mensagem de Coluna
            //JOptionPane.showMessageDialog(null, "Coluna é : " + this.nomeColuna + " - Item : " + itemSelecionado) ;
            int itemNumero = -1;
            String valor;

            //Se capturar o Nome da Coluna implementar While (Retirar For)

            if (this.nomeColuna.equals("Codigo")){
               if (!itemSelecionado.equals("")) {
                   for (int contador = 0; contador < this.tamanhoArray; contador++){
                    valor = this.codigo[contador];
                    if (itemSelecionado.equals(valor)){
                        itemNumero = contador;
                    }
                   }//For

                if (itemNumero != -1){
                    jTModular.setValueAt(this.codigo[itemNumero],jTModular.getSelectedRow(),jTModular.getColumnModel().getColumnIndex("Codigo"));
                    //Seleciona o Item correspondente na Descrição
                    jTModular.setValueAt(this.descricao[itemNumero],jTModular.getSelectedRow(),jTModular.getColumnModel().getColumnIndex("Descrição"));
                    //Seleciona o Item correspondente na Unidade
                    jTModular.setValueAt(this.unidade[itemNumero],jTModular.getSelectedRow(),jTModular.getColumnModel().getColumnIndex("UN"));       
                    }//if
              }//if 
            } else if (this.nomeColuna.equals("Descrição")){

                if (!itemSelecionado.equals("")) {    
                   for (int contador = 0; contador < this.tamanhoArray; contador++){
                    valor = this.descricao[contador];
                    if (itemSelecionado.equals(valor)){
                        itemNumero = contador;
                        }//if
                   }//For

                if (itemNumero != -1){
                    //Seleciona o Item correspondente na Descrição
                    jTModular.setValueAt(this.descricao[itemNumero],jTModular.getSelectedRow(),jTModular.getColumnModel().getColumnIndex("Descrição"));
                    //Seleciona o Item correspondente no Codigo
                    jTModular.setValueAt(this.codigo[itemNumero],jTModular.getSelectedRow(),jTModular.getColumnModel().getColumnIndex("Codigo"));
                    //Seleciona o Item correspondente na Unidade
                    jTModular.setValueAt(this.unidade[itemNumero],jTModular.getSelectedRow(),jTModular.getColumnModel().getColumnIndex("UN"));    
                    }//if

                }//if

        }//if

        }//if

    }//Fim do Método
Criado 13 de julho de 2009
Ultima resposta 14 de jul. de 2009
Respostas 1
Participantes 1