Problema com JLabel e JFrame

7 respostas
W

pessoal estava com duvidas sobre como conectar no banco de dados e resgatar os dados…
enfim consegui fazer isso e fiz um loop… ele funcionou normal com System.out.println mas com swing nao foi como esperado… só mosra os dados do segundo JLabel.
Abaixo segue o codigo fonte:

import java.sql.*;
import javax.swing.*;
class BuscaFornecedores extends JFrame{
	public static void main(String args[]){
		JFrame frame = new JFrame("Busca de Fornecedores");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		try {  
			Class.forName("org.postgresql.Driver");
			Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/antares", "postgres", "postgres");
			String busca = "SELECT * FROM fornecedores";
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(busca);
			while (rs.next()) {
				String nome = "Nome: "+rs.getString("nome");
				String cnpj = "CNPJ/CPF: "+rs.getString("cnpj");
				JLabel NOME = new JLabel(nome);
				JLabel CNPJ = new JLabel(cnpj);
				frame.getContentPane().add(NOME); //o resultado dessa linha não aparece no JFrame
				frame.getContentPane().add(CNPJ); //Essa linha nunca aparece no JFrame
				frame.pack();
			}
			frame.setVisible(true);
			//frame.pack();
		}
		catch (ClassNotFoundException e) {   
			System.out.println("System error");      
		}
		catch (SQLException e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
			System.out.println("It can't connect to the database");
		}

	}
}

qualquer ajuda é bem vinda e obrigado pela atenção

7 Respostas

filiperangel

Talvez o segundo jLabel esteja aparecendo por cima do 1º, visto que os 2 estão indo pra uma posição default.

tente o seguinte:

frame.getContentPane().add(NOME);
NOME.setLocation(10,20); //numeros demonstrativos

frame.getContentPane().add(CNPJ);
CNPJ.setLocation(55,50);//numeros demonstrativos

Faz o teste, dps você os posiciona como quiser!

Dica: não use nome de variáveis começando com letras maiúsculas, Assim você consegue facimente diferenciar classes de objetos/variáveis.

W

Obrigado pela ajuda cara mas nao funcionou não…
questão eh que ele nao joga por cima nao senao ficaria ilegivel os campos…
mas eu tentei o que vc disse e nada…
eh como se ele so adcionasse o ultimo JLabel ao JFrame. abaixo vai uma Print Screen

doug

Olá…
Tenta setar um layout para o frame (grid ou flow)…
pode ser que eles te ajudem na hora de adicionar os componentes

Espero ter ajudado
flwsss

W

sou iniciante em gava mas vou dar uma lida e tentar fazer isso qualquer coisa posto aki depois o resultado. obrigado

filiperangel

tenta

frame.getContentPane().setLayout(null);

depois faça o que eu disse aí em cima.

W

funcionou tambem não cara…

eu pude observar uma coisa… vou postar o codigo e outra printscreen
o que me intriga eh por que ele faz certo com o cnpj e nao faz da mesma forma com o nome

JFrame frame = new JFrame("Busca Fornecedores");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	//frame.getContentPane().setLayout(null);
        //se eu descomentar a linha acima nao aparece nada na janela
	
	try {  
		Class.forName("org.postgresql.Driver");
		Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/antares", "postgres", "postgres");
		String busca = "SELECT * FROM fornecedores";
		Statement stmt = con.createStatement();
		ResultSet rs = stmt.executeQuery(busca);
		while (rs.next()) {
			String nome = "Nome: "+rs.getString("nome");
			String cnpj = "CNPJ/CPF: "+rs.getString("cnpj");
			JLabel NOME = new JLabel(nome);
			JLabel CNPJ = new JLabel(cnpj);
			frame.getContentPane().add(NOME);
			frame.pack();
			NOME.setLocation(50,30);
			frame.getContentPane().add(CNPJ);
			frame.pack();
			CNPJ.setLocation(70,50);
			/*se eu comentar os dois frame.pack(); ali
			em cima retorno ao problema original só
			mostra o ultimo cnpj do banco de dados*/
			
        	}
        }
	frame.setVisible(true);

W

adcionei frame.getContentPane().setLayout(new java.awt.FlowLayout()); depois de criar a janela como disse o thiago.filadelfo e resolveu parcialmente o meu problema…
mas qdo maximizo a janela ele monta tudo numa linha só.
queria ter a liberdade de posicionar meus dados aonde quizer na tela, de preferencia numa tabela podendo posicionar a tabela em qualquer ponto, de preferencia usando valores relativos como posicionamento por % de tela. desde já agradeço a ajuda

Criado 20 de abril de 2008
Ultima resposta 22 de abr. de 2008
Respostas 7
Participantes 3