Capturar dados em uma JTable!

12 respostas
S

Boa dia a todos,
Pessoal tô precisando de uma ajuda para andar com projeto da Facul,
seguinte,
Numa tela de cadastro de produtos, fiz uma consulta, pelo nome, no banco de dados e exibi o resultado (código e nome) em um JTable.
Agora queria que ao selecionar a “célula” na JTable, pudesse “capturar” o valor selecionado para usar em outras pesquisas.
Por exemplo, trazer os outros dados do produto para uma outra tela.
Têm como ?

Desde já, agradeço a atenção.

12 Respostas

fabim

Se vc tiver montado sua tabela com Array de strings, já se perdeu… pq vai te q consultar o banco de novo…

procura aqui no forum sobre tutorial de JTable, como adicionar objetos nela e sobrescrever o .toString(), e talz… a parte de UI desktop em java trabalha de forma um poco diferente das demais linguagens… e Swing, como todo mundo sabe, é coisa de alien… ( e me incluo nessa ).

renanpto

O resultado esta num ArrayList ?

Se tiver voce pode utilizar o metodo

[code]
getSelectedRow()
[/cod]

quando gerar o evento ( isso se vc selecionar a linha e clicar em botao ).

S

Não usei array, usei uma classe ListarProduto:

public static void listarProduto(String n)
       {
           Connection con = null;
           Vector linha = new Vector();
           Vector coluna = new Vector();
           String palavra = n;
           
                      
           
           try{
                con = Banco.conectar();
                PreparedStatement ps;
                ps = con.prepareStatement( "select codproduto, descricao from tabproduto where descricao like '"+palavra+"%' " );
               // ps.setString(1,n);
                ResultSet rs = ps.executeQuery();
                
                ResultSetMetaData rsmd = rs.getMetaData(); 
                         
                    for (int i = 1; i <= rsmd.getColumnCount(); ++i) 
                            
                        coluna.addElement(rsmd.getColumnName(i)); 

                         do { 
                                linha.addElement( getNextRowProduto(rs, rsmd) ); 
                         } while (rs.next()); 

                         JTable table = new JTable(linha, coluna); 
                         JScrollPane scroller = new JScrollPane( table );
                         JFrame frame = new JFrame( "Lista de Produtos" );
                         frame.getContentPane().add( scroller );
                         frame.validate();
                         frame.setBounds (500,30,400,200);
                         frame.setVisible( true );
                                                   
               rs.close();
               ps.close();
                           
              } 
            catch (SQLException e) 
            { 
                e.printStackTrace(); 
            }
         catch(Exception  e)
         { 
             e.printStackTrace();
             
         }
        finally
        {
            Banco.desconectar( con );
        }
           
     }

e outra classe:

//CHAMA A JTABLE
   private static Vector getNextRowProduto( ResultSet rs, ResultSetMetaData rsmd)    
     //throws SQLException 
   {       
      Vector currentRow = new Vector(); 
      try{
    //  System.out.println( rsmd.getColumnType(1) );
    //  System.out.println( rsmd.getColumnCount() );
      
      for (int i = 1; i <= rsmd.getColumnCount(); ++i)
      
            switch(rsmd.getColumnType(i)) { 
                case Types.NUMERIC: currentRow.addElement(new Long(rs.getLong(i))); 
              break; 
            case Types.VARCHAR: currentRow.addElement( rs.getString(i) ); 
              break; 
            //default: System.out.println("Tipo dos Dados: " + rsmd.getColumnTypeName(i));
            }
      }
      catch(SQLException e){
      }  
     return currentRow; 
   }

Tentei usar algo do tipo:

int linhasel = table.getSelectedRow();
int colunasel = table.getSelectedColumn();
table.getValueAt(linhasel, colunasel)

porém a minha Jtable foi instanciada dentro do método, como posso usa-la fora?

mister_m

Se você estiver trabalhando com um modelo de objetos, é fácil fazer isso. É só traduzir o índice selecionado para o índice do seu List. Se quiser trabalhar com Swing de forma mais simples, use um framework de binding, como o genesis, que possui documentação completa em português. Com ele, você poderia fazer algo como:

@Form
public class MeuForm {
    private MeuBean beanSelecionado;

    @DataProvider(widgetName="nameTabela", objectField="beanSelecionado")
    public List<MeuBean> populaTabela() {
       return // codigo que retorna sua lista
    }

    public MeuBean getBeanSelecionado() {
        return beanSelecionado;
    }

    public void setBeanSelecionado(MeuBean beanSelecionado) {
        this.beanSelecionado = beanSelecionado;
}
S

Cara, desculpe a minha ignorância mas não consegui entender muito bem…

Eu queria aproveitar o código já iniciado …
se puder me explicar melhor como faço …

H

Pelo que entendi você vai ter que capturar o duplo click na tabela e lá você vai pegar o código, ou chave primária e levar este valor para edição em questão.

//Obter a linha selecionada
          int row = jTable1.getSelectedRow();
         // Obter Algum campo, neste exemplo a coluna zero representa o código que hé exibido na table. neste exemplo se trata de uma visão genérica, podendo ser a chave primária de qualquer tipo, o restante a edição cuida.
          Object id = jTable1.getValueAt(row, 0);
	//impressão do código ou chave primária
          System.out.println("Código selecionado: " + String.valueOf(id));

Espero ter ajudado!

H

Pelo que entendi você vai ter que capturar o duplo click na tabela e lá você vai pegar o código, ou chave primária e levar este valor para edição em questão.

//Obter a linha selecionada
          int row = jTable1.getSelectedRow();
         // Obter Algum campo, neste exemplo a coluna zero representa o código que hé exibido na table. neste exemplo se trata de uma visão genérica, podendo ser a chave primária de qualquer tipo, o restante a edição cuida.
          Object id = jTable1.getValueAt(row, 0);
	//impressão do código ou chave primária
          System.out.println("Código selecionado: " + String.valueOf(id));

Espero ter ajudado!

S

Vlw pela força Hugo…
tô no trab e agora estou um pouco enrolado vou tentar daqui a pouco e te digo no que deu…
vlw !

Marky.Vasconcelos

E te dou uma dica use um model que extende de AbstractTableModel dai vc cria um método getValueAt(int row, int col); e usa oque o amigo acima falou

S

Cara vê se vc me entende…
eu vou ter que colocar isso dentro de um botão certo?
criei o JTable dentro do método ListaProduto e nao consigo enxerga-lo em mas lugar nenhum…
então como vou coloca-lo num botão ?
Desculpe a minha ignorância, mas tô começando agora ainda tô um pouco perdido…

H

http://www.guj.com.br/posts/list/13322.java

Igor_Novaes

Massa esse exemplo!

Criado 5 de junho de 2007
Ultima resposta 9 de jul. de 2007
Respostas 12
Participantes 7