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 ?
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
SgtReis
Não usei array, usei uma classe ListarProduto:
publicstaticvoidlistarProduto(Stringn){Connectioncon=null;Vectorlinha=newVector();Vectorcoluna=newVector();Stringpalavra=n;try{con=Banco.conectar();PreparedStatementps;ps=con.prepareStatement("select codproduto, descricao from tabproduto where descricao like '"+palavra+"%' ");// ps.setString(1,n);ResultSetrs=ps.executeQuery();ResultSetMetaDatarsmd=rs.getMetaData();for(inti=1;i<=rsmd.getColumnCount();++i)coluna.addElement(rsmd.getColumnName(i));do{linha.addElement(getNextRowProduto(rs,rsmd));}while(rs.next());JTabletable=newJTable(linha,coluna);JScrollPanescroller=newJScrollPane(table);JFrameframe=newJFrame("Lista de Produtos");frame.getContentPane().add(scroller);frame.validate();frame.setBounds(500,30,400,200);frame.setVisible(true);rs.close();ps.close();}catch(SQLExceptione){e.printStackTrace();}catch(Exceptione){e.printStackTrace();}finally{Banco.desconectar(con);}}
e outra classe:
//CHAMA A JTABLEprivatestaticVectorgetNextRowProduto(ResultSetrs,ResultSetMetaDatarsmd)//throws SQLException {VectorcurrentRow=newVector();try{// System.out.println( rsmd.getColumnType(1) );// System.out.println( rsmd.getColumnCount() );for(inti=1;i<=rsmd.getColumnCount();++i)switch(rsmd.getColumnType(i)){caseTypes.NUMERIC:currentRow.addElement(newLong(rs.getLong(i)));break;caseTypes.VARCHAR:currentRow.addElement(rs.getString(i));break;//default: System.out.println("Tipo dos Dados: " + rsmd.getColumnTypeName(i));}}catch(SQLExceptione){}returncurrentRow;}
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:
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
hugomalta
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 selecionadaintrow=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.Objectid=jTable1.getValueAt(row,0);//impressão do código ou chave primáriaSystem.out.println("Código selecionado: "+String.valueOf(id));
Espero ter ajudado!
H
hugomalta
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 selecionadaintrow=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.Objectid=jTable1.getValueAt(row,0);//impressão do código ou chave primáriaSystem.out.println("Código selecionado: "+String.valueOf(id));
Espero ter ajudado!
S
SgtReis
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
SgtReis
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…