Clicando no JTable e retornando pesquisa

4 respostas
mymyself

Seguinte galera fiz uma consulta aki onde qndo coloco o nome de quem quero procurar ele me retorna os resultados do banco de dados ai dou dois cliques nele e me abre outra tela....mais estou com dois problemas....
1º ele sempre retorna para mim o primeiro cadastro, ou seja, a primeira linha da JTable...
2º não consigo dimensionar cada campo no seu devido lugar,ou seja,colocar no campo nome so o nome da pessoa..endereço so o endereço da pessoa assim por diante....ao inveis disso no campo nome por exemplo vem todos os dados do banco....e eles vem ainda entre "[[]]" dois colchetes....meus unicos problemas são esse dois o resto esta funcionando!

codigo...

//implementando mostra paciente
	public Vector proximalinha(ResultSet rs, ResultSetMetaData rsmd){
		Vector linhaAtual = new Vector();
		try{
			for(int i=1;i<rsmd.getColumnCount();++i){
				switch(rsmd.getColumnType(i)){
				case Types.VARCHAR:
					linhaAtual.addElement(rs.getString(i));
				break;
				case Types.INTEGER:
					linhaAtual.addElement(new Long(rs.getLong(i)));
				break;
				case Types.TIMESTAMP:
					linhaAtual.addElement(rs.getDate(i));
					break;
				}}
		}catch(SQLException ex){
		
		}
		return linhaAtual;	
	}

	//mostra paciente
	public void mostrapaciente(){
		Statement stmt;
		ResultSet rs;
		
		try{
			Vector cabecalho = new Vector();
			final Vector linhas=new Vector();
			stmt=conex.createStatement();
			rs=stmt.executeQuery("SELECT * FROM paciente WHERE nome LIKE '"+"%"+nome.getText()+"%"+"'");
		    rs.next();
		    ResultSetMetaData rsmd=rs.getMetaData();
		    for(int i=1;i<rsmd.getColumnCount();++i){
		    	cabecalho.addElement(rsmd.getColumnName(i));
		    }do{
		    	linhas.addElement(proximalinha(rs,rsmd));
		    }while(rs.next());
		    final JTable tabela = new JTable(linhas,cabecalho);
		    JScrollPane scroller = new JScrollPane(tabela);
		    getContentPane().add(scroller,BorderLayout.CENTER);
		    tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);  
		   
		     tabela.setDefaultEditor(Object.class, null); 
		     tabela.addMouseListener(new MouseAdapter() {  
		         public void mouseClicked(MouseEvent e)  
		         {  
		             if (e.getClickCount() == 2)  
		             {  
		                 Point p = e.getPoint();  
		                 int row = tabela.rowAtPoint(p);  
		                 int col = tabela.columnAtPoint(p);  
		            JanelaPaciente pa =new JanelaPaciente();
		            for(int i=1;i<linhas.capacity();++i){
		            pa.nome.setText(linhas+"");
//apois o primeiro campo estar corrento coloco os outros....
		             } } 
		         }  
		     });		    
		    
		    JFrame frame = new JFrame("CADASTRO PACIENTES");  
		             frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
		             frame.setSize(600,300);  
		             frame.setLocationRelativeTo(null);  
		             frame.add(BorderLayout.CENTER, new JScrollPane(tabela));  
		             frame.setVisible(true);
		             stmt.close();
		          } catch (Throwable t) {}
		          }

da um help ai...vlw

4 Respostas

A

Só dexa eu ver se entendi

quando vc faz a consulta ele somente joga o primeiro campo do banco de dados na sua consulta??

abrass

:wink:

mymyself

entao…eu faço a consulta e me retorna do banco todos os resultados corretamente…mais qndo quero escolher o cadastro da pessoa q quero q abra na outra tela eu consigo normalmente clicar em qualquer cadastro do resultado da consulta porem ao abrir a outra tela sempre vai o primeiro cadastro do resultado da consulta…a primeira linha da JTable…caso selecione um cadastro q esta em outra linha…ele envia sempre a primeira linha da JTable…

A

tipo assim

vc não poderia criar uma lista ai fazer a seleção das linhas??

tipo assim

fazer que quando vc clicasse em um determinado “registro” ele fissese uma vereficação ou seja uma especie de while

vc poderia alterar o teu codigo sql…

espero que vc tenha entendido :?

abrass :wink:

mymyself

olha o codigo aki.....assim vc pode entender melhor o funcionamento dele....e me explicar melhor q fazer...

//implementando mostra paciente

	public Vector proximalinha(ResultSet rs, ResultSetMetaData rsmd){
		Vector linhaAtual = new Vector();
		try{
			for(int i=1;i<rsmd.getColumnCount();++i){
				switch(rsmd.getColumnType(i)){
				case Types.VARCHAR:
					linhaAtual.addElement(rs.getString(i));
				break;
				case Types.INTEGER:
					linhaAtual.addElement(new Long(rs.getLong(i)));
				break;
				case Types.TIMESTAMP:
					linhaAtual.addElement(rs.getDate(i));
					break;
				}}
		}catch(SQLException ex){
		
		}
		return linhaAtual;	
	}

	//mostra paciente
	public void mostrapaciente(){
		Statement stmt;
		ResultSet rs;
		
		try{
			Vector cabecalho = new Vector();
			final Vector linhas=new Vector();
			stmt=conex.createStatement();
			rs=stmt.executeQuery("SELECT * FROM paciente WHERE nome LIKE '"+"%"+nome.getText()+"%"+"'");
		    rs.next();
		    ResultSetMetaData rsmd=rs.getMetaData();
		    for(int i=1;i<rsmd.getColumnCount();++i){
		    	cabecalho.addElement(rsmd.getColumnName(i));
		    }do{
		    	linhas.addElement(proximalinha(rs,rsmd));
		    }while(rs.next());
		    final JTable tabela = new JTable(linhas,cabecalho);
		    JScrollPane scroller = new JScrollPane(tabela);
		    getContentPane().add(scroller,BorderLayout.CENTER);
		    tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);  
		   
		     tabela.setDefaultEditor(Object.class, null);  
		     tabela.addMouseListener(new MouseAdapter() {  
		         public void mouseClicked(MouseEvent e)  
		         {  
		             if (e.getClickCount() == 2)  
		             {  
		                 Point p = e.getPoint();  
		                 int row = tabela.rowAtPoint(p);  
		                 int col = tabela.columnAtPoint(p);  
		            JanelaPaciente pa =new JanelaPaciente();
		            for(int i=1;i<linhas.capacity();++i){
		            pa.nome.setText(linhas+"");
		             } } 
		         }  
		     });		    
		    
		    JFrame frame = new JFrame("CADASTRO PACIENTES");  
		             frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  
		             frame.setSize(600,300);  
		             frame.setLocationRelativeTo(null);  
		             frame.add(BorderLayout.CENTER, new JScrollPane(tabela));  
		             frame.setVisible(true);
		             stmt.close();
		             
		          } catch (Throwable t) {}
		          
	}
Criado 5 de novembro de 2010
Ultima resposta 5 de nov. de 2010
Respostas 4
Participantes 2