Ajude a montar esta Tela

5 respostas
J

Boa tarde pessoal.

Se alguém se dispor a me ajudar, estou com um problemão :!:…
Não consigo montar esta tela… Tendei dar um Debug também não ajudou muito

Exception in thread “main” java.lang.NullPointerException

at MontaTela.(MontaTela.java:28)

at Fornecedores.(Fornecedores.java:37)

at Fornecedores.main(Fornecedores.java:90)

Segue o código das 2 classes utilizadas.

Classe Fornecedores:

import java.sql.*;
import java.awt.*;
import java.awt.event.*;

import java.sql.Connection;
import java.sql.DriverManager;
import javax.swing.*;



public class Fornecedores extends JFrame{
	/*Estende a classes para obter duas facilidades
	 *uma para apresentação gráfica e a outra um container
	 *para disposição de outros componentes */
	
	
	/*Declaração dos objetos*/

	private JTextArea saida;
	private JScrollPane painelTexto;
	private BotaoPainel controles;
	private Connection conecta;
	private MontaTela mostraTela;
	private String url;
	
	
	/*Métoro construtor da classe, esse método é utilizado 
	 * para inicar as referências dos objetos, tratar as conexões e mostrar as interfaces*/
		public Fornecedores(){
			setTitle("Cadastro de Fornecedores");
			
			
			/*Declara um referencia Container e atribui um resultado ao método 
			 * getContentPane e retorna componenestes a interface*/
			Container tela = getContentPane();
			
			mostraTela = new MontaTela();
			
			/*Instancia a classe JTextArea e mostra o tramanho da janela
			 * para o texto serão de 2 linhas e 4colunas.*/
			saida = new JTextArea(2,4);
			
			
			/*Atribue uma referencia ao container que estamos definindo como layout no comando BorderLayout()*/
			tela.setLayout(new BorderLayout());
			tela.add(new JScrollPane(mostraTela),BorderLayout.CENTER);
			
			painelTexto = new JScrollPane(saida);
			
			tela.add(painelTexto,BorderLayout.SOUTH);
			
				controles = new BotaoPainel(conecta,mostraTela, saida);
				tela.add(controles, BorderLayout.NORTH);
				setSize(550,350);
			
				try{					
					/**Class.forName("sun.jdbc.odbc.jdbcodbcdriver");
					 * Carrega o driver de acesso ao banco de dados escolido.
					 * A classe DriverManager é utilizada para administrar e selecionar o driver apropriado, quando o
					 * comando é solicitado na execução do programa ele escolhe dentre uma lista de drivers 
					 * disponíveis e carregados para efetuar a conexão*/
					
					url = "jdbc:odbc:fornecedores";
					
					Class.forName("sun.jdbc.odbc.jdbcodbcdriver");
					conecta = DriverManager.getConnection(url);
					
					saida.append("Conexão Efetuada");
				}
				catch (ClassNotFoundException e){
					saida.append("não foi possivel efetuar");
				}
				catch (SQLException d){
					saida.append("Não foi possivel DB");
					}
				
			
				addWindowListener (new WindowAdapter() {
					public void windowClosing(WindowEvent e){
					System.exit(0);
				}}		);
				}
	


	
	public static void main(String[] args) {
	new Fornecedores().show();
	}

}

E a classe MontaTela:

import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class MontaTela extends JPanel{


	private JPanel telaPanel;
	private JLabel LCodigo, LNome, LSobrenome, LCidade, LEndereco, LEstado, LCep, mensagem;
	
	/*Foi trocado a identificador de acesso para public*/
	public JTextField Sobrenome, Nome, Codigo, Endereco, Cidade, Estado, Cep;
	/**
	 * 
	 */
		public MontaTela(){
			
			setLayout(null);
			
			LCodigo = new JLabel("Código");
			LCodigo.setBounds(15,10,70,20);
			add(LCodigo);
		
                        Codigo = new JTextField();
			Codigo.setBounds(95,10,30,20);
			Codigo.setEditable(false);
			add(Codigo);
		
			
			LNome = new JLabel ("Nome");
			LNome.setBounds(15,40,70,20);
			add(LNome);
			
			Nome = new JTextField();
			Nome.setBounds(95,40,300,20);
			add(Nome);
			
			LSobrenome = new JLabel ("Sobrenome");
			LSobrenome.setBounds(15,70,70,20);
			add(LSobrenome);
			
			Sobrenome = new JTextField();
			Sobrenome.setBounds(90,70,250,20);
			add(Sobrenome);
			
	
			
			LEndereco = new JLabel("Endereco");
			LEndereco.setBounds(15,100,70,20);
			add(LEndereco);
			Endereco = new JTextField();
			Endereco.setBounds(95,100,400,20);
			add(Endereco);
			
			LCidade = new JLabel ("Cidade");
			LCidade.setBounds(15,130,70,20);
			add(LCidade );
			Cidade = new JTextField();
			Cidade.setBounds(95,130,200,20);
			add(Cidade);
			
			LEstado = new JLabel ("Estado");
			LEstado.setBounds(15,160,70,20);
			add(LEstado);
			Estado = new JTextField();
			Estado.setBounds(95,160,23,20);
			add(Estado);
			
			LCep = new JLabel("Cep");
			LCep.setBounds(15,190,70,20);
			add(LCep);
			Cep = new JTextField();
			Cep.setBounds(95,190,70,20);
			add(Cep);
			
			mensagem = new JLabel ("Formato de Preenchimeto do CEP:99999999");
			mensagem.setBounds(200,190,300,20);
			add(mensagem);

		}

}

5 Respostas

A

Bacana, dá uma olhada na classe MontaTela, na linha 26 você tá tentando usar métodos de um objeto que não foi instanciado ainda.

ViniGodoy

Faltou dar “new” na variável Codigo.

Além disso, quando usar o debugger, procure ver o valor das variáveis. O erro foi bastante específico:
NullPointerException (ou seja, você tentou acessar uma variável que vale null), na classe MontaTela, na linha 26.

Finalmente, se você quiser telas que funcionem em mais de uma plataforma e que sejam redimensionáveis, não use setBounds. Aprenda a lidar com Layout managers:
http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html

J

Obrigado pessoal,

esse detalhe de não ter dado o new para o Codigo eu já havia concertado.

Porem o erro continua, o mesmo erro…

Exception in thread “main” java.lang.NullPointerException

at MontaTela.(MontaTela.java:28)

at Fornecedores.(Fornecedores.java:37)

at Fornecedores.main(Fornecedores.java:90)

Tentarei recriar essa tela usando outro modelo de layout.

Obrigado galera

F

cara primeira coisa, tenta dar uma alterada no nome dessas variáveis na classe MontaTela, nomes de variáveis começando com letra maiúscula dificulta bastante a visualização , já é feito assim para melhor diferenciar classes de objetos, variáveis e etc. Segundo não sei se isso resolve, mas ao invés de dar um setBounds, faça setPreferedSize(new Dimension(int value, int value)); e aliás o que você está usando para organizar esses componentes na tela?

ViniGodoy

Ou use o depurador e veja qual variável está nula nessa linha.

Criado 10 de maio de 2012
Ultima resposta 22 de mai. de 2012
Respostas 5
Participantes 4