JTable

5 respostas
C
Olá pessoal. Estou com dificuldades em mostrar o resultado da minha pesquisa.

Segue o codigocom as duas classes usadas para o intuito. Não consigo entendeer porque não consigo montar a table usando dois Vector. Obrigada.

public void mostraResultado(ResultSet rs) throws DAOException, SQLException{

boolean maisRegistros = rs.next();
if (! maisRegistros) {
	
		JOptionPane.showMessageDialog(null, "Não há registros");
		
	}
	else{
		 Vector coluna = new Vector();
		 Vector linha  = new Vector();			

		  try{
	
			  ResultSetMetaData rsmd = rs.getMetaData();

			  for ( int i = 1; i <= rsmd.getColumnCount(); ++i)
				  coluna.addElement( rsmd.getColumnName( i ));
			  do {
				  linha.addElement( getProximaLinha( rs, rsmd ));
			  }while  ( rs.next() );				
			  //exibe a tabela  com conteúdos de ResultSet
					
			DefaultTableModel modelo = new DefaultTableModel(linha, coluna);

			  JTable table = new JTable(modelo);
				
			  //table = new JTable(linha, coluna);
			  scroller = new JScrollPane(table);
			  scroller.setLayout(null);
			  //scroller.setAutoscrolls(true);
			  scroller.setBounds(30, 70, 700, 350);	
			  //Container c = getContantPane();
	
			   this.add(scroller);
			   this.validate();
		  }catch(Exception e){
			  JOptionPane.showMessageDialog(null, "ERRO: " + e,  "Pesquisa", 1);
			  e.printStackTrace();
		  }
		}
}

private Object getProximaLinha(ResultSet rs, ResultSetMetaData rsmd) throws DAOException, SQLException{
	Vector linhaCorrente = new Vector();

	for ( int i = 1; i<= rsmd.getColumnCount(); ++i )
		linhaCorrente.addElement( rs.getString(i) );

	return linhaCorrente;
}

5 Respostas

danieldestro

Você espera que alguém leia isso?
Por favor, ajeita o código, principalmente usando a tag [code].

keller
public 
void mostraResultado(ResultSet rs) throws DAOException, SQLException{
          boolean maisRegistros = rs.next(); 
          if (! maisRegistros) { 
             JOptionPane.showMessageDialog(null, "Não há registros"); 
          } else { 
            Vector coluna = new Vector();
            Vector linha = new Vector(); 
         try{ 
           ResultSetMetaData rsmd = rs.getMetaData();
           for ( int i = 1; i <= rsmd.getColumnCount(); ++i){
            coluna.addElement( rsmd.getColumnName( i ));
         } 
        do { 
          linha.addElement( getProximaLinha( rs, rsmd )); 
        } while(rs.next());

        //exibe a tabela com conteúdos de ResultSet 
       DefaultTableModel modelo = new DefaultTableModel(linha, coluna);                               
       JTable table = new JTable(modelo);
       table = new JTable(linha, coluna); 
       scroller = new JScrollPane(table);
       scroller.setLayout(null);
       scroller.setAutoscrolls(true);
       scroller.setBounds(30, 70, 700, 350);
       Container c = getContantPane();
       this.add(scroller);
       this.validate(); 
       } catch(Exception e) { 
         JOptionPane.showMessageDialog(null, "ERRO: " + e, "Pesquisa", 1);        
         e.printStackTrace(); 
     }
   }
 }

 private 
 Object getProximaLinha(ResultSet rs, ResultSetMetaData rsmd) throws DAOException, SQLException{ 
   Vector linhaCorrente = new Vector(); 
   for ( int i = 1; i<=  rsmd.getColumnCount(); ++i ) {
     linhaCorrente.addElement( rs.getString(i) ); 
   }
   return linhaCorrente; 
}
Você esta iniciando duas vezes a JTable!!! :shock:

Voce deve iniciar ela uma vez com as linhas e as colunas,

depois setar o Model tabela.setModel(TableModel);

e depois dar um validate tabela.validate();

deve resolver o seu problema…

*ficou menos pior o codigo dela agora ? :lol: :smiley: :wink:

C

Olá. Desculpe por ter mandado o código daquele jeito. foi a primeira vez q fiz isso e não pedi pra ver antes de enviar. :-)
Fiz as modificacoes que vc me aconselhou, mas mesmo assim, não consigo adicionar a table no meu painel e visualiar o resultado da minha pesquisa.
Bom, vc sabe o q pode ser? aguardo sua resposta.
Muito obrigada.

public void pesquisa( String texto, String login, String senha) {
			Statement st = null;
			ResultSet rs = null;
			Conn con = new Conn();
						
			try	{					
				connection = con.getConnection(login, senha);
				conectoBanco = 1;
				st = connection.createStatement();
				rs = st.executeQuery(query  + texto + "%'");
				mostraResultado(rs);
				
			
			}catch(Exception e){
				e.printStackTrace();
				System.out.println("erro na pesquisa");
				JOptionPane.showMessageDialog(this,e.getMessage(),"Aviso",1);	
					
			}
		}

	public void mostraResultado(ResultSet rs) throws DAOException, SQLException{
		boolean maisRegistros = rs.next();

		if (! maisRegistros) {
		
			JOptionPane.showMessageDialog(null, "Não há registros");
			
		}
		else{
			 Vector coluna = new Vector();
			 Vector linha  = new Vector();			

			  try{				 
				  
				  ResultSetMetaData rsmd = rs.getMetaData();

				  for ( int i = 1; i <= rsmd.getColumnCount(); ++i)
					  coluna.addElement( rsmd.getColumnName( i ));
				  do {
					  linha.addElement( getProximaLinha( rs, rsmd ));
				  }while  ( rs.next() );				
				  //exibe a tabela  com conteúdos de ResultSet						
				DefaultTableModel modelo = new DefaultTableModel(linha, coluna);
							
					  JTable table = new JTable(modelo);
					  table.setModel(modelo);
					  scroller = new JScrollPane(table);
					  scroller.setLayout(null);
					  scroller.setAutoscrolls(true);
					  scroller.setBounds(30, 70, 700, 350);	
					  			
					   this.add(scroller);
					   table.validate();
			  	
			  }catch(Exception e){
				  JOptionPane.showMessageDialog(null, "ERRO: " + e,  "Pesquisa", 1);
				  e.printStackTrace();
			  }
			}
	}

	private Object getProximaLinha(ResultSet rs, ResultSetMetaData rsmd) throws DAOException, SQLException{
		Vector linhaCorrente = new Vector();

		for ( int i = 1; i<= rsmd.getColumnCount(); ++i )
			linhaCorrente.addElement( rs.getString(i) );

		return linhaCorrente;
	}
keller

Essa sua classe extends a que ? pois voce faz um…

this.add(scroller);

bom se ela extende a JPanel é só adicionar ela no seu JFrame [e posicionar] deveria funcionar sem problemas, ela nem aparece ? nao ocorre nenhum NullPointerException ? nada do tipo ?

C

Olá. Ela extends um JPanel mesmo.
Estou fazendo this.add(scroller) la no meu método pesquisa() vc viu?
Ja tentei de tudo mas não consigo mostrar isso.
Vc pode me passar um email seu? De repente te mando todo o meu projeto. E então vc poderia dar uma olhada e me dizer o q posso fazer pra fazer isso funcionar.
Pra falar a verdade, eu tb tentei fazer de outro jeito: ao invés de chamar o método pesquisa e tentar adicionar o scroller no JPainel, eu crio uma instância de um JFrame e tô adionando la o resultado da minha pesquisa. Estou usando outro construtor para o JTabel. do tipo (String[][], String[]). Mas pra falar a verdade não estou conseguindo manipular os valores. Só consigo mostrar uma linha com os dados certos. Se o retorno da pesquisa for uns 5 registros… só consigo mostrar o primeiro. Entendeu?
Bom, estou meio perdida. :frowning:

Vc num faria esse favor de dar uma olhada no meu projeto pra mim? :slight_smile: Se sim, vc me passa um email seguro e ai eu te mando.
Muito obrigada.

Criado 17 de dezembro de 2004
Ultima resposta 23 de dez. de 2004
Respostas 5
Participantes 3