Problema com JDialog

2 respostas
Spotik

OPa,

Estou tendo problemas com retorno do JDialog...

Tenho uma classe para a tela e uma outra classe controle para essa mesma tela...

package View;

import java.awt.Font;


public class RetornaCliente extends JDialog
{
	public JTextField txNome;
	public JTextField txCodigo;
	public JTextField txCpf;
	public JTextField txCnpj;
	public ResourceBundle bn = null;
	public JButton btnBuscar;
	public JRadioButton rbCpf;
	public JRadioButton rbCnpj;
	public JRadioButton rbCodigo;
	public JRadioButton rbNome;
	public JScrollPane spConsultaCli;
	public JTable tbConsulta;
	public DefaultTableModel modelo = new DefaultTableModel();
	public JButton btnSelecionar;

	public RetornaCliente(ResourceBundle idioma)
	{  	      

		this.setModal(true);
		this.setVisible(true);		
		this.setSize(534, 475);

		bn = idioma;
		getContentPane().setLayout(null);

		//***Definindo Rotulos***      
		JLabel lblConsultarCliente = new JLabel(bn.getString("TelaConsultarCliente1.Label.ConsultarCliente")); 
		lblConsultarCliente.setFont(new Font("Tahoma", Font.PLAIN, 14)); 
		lblConsultarCliente.setBounds(10, 11, 140, 14);
		getContentPane().add(lblConsultarCliente);

		JLabel lblConsultaPor = new JLabel(bn.getString("TelaConsultarCliente1.Label.Consultarpor")); 
		lblConsultaPor.setBounds(26, 68, 100, 14);
		getContentPane().add(lblConsultaPor);
		//***Fim dos Rotulos***    

		//Definindo Grupo RadioButton
		ButtonGroup busca = new ButtonGroup();  

		//***Definindo RadioButtons***      
		rbNome = new JRadioButton(bn.getString("TelaConsultarCliente1.RadioButton.Nome")); 
		rbNome.setBounds(26, 100, 65, 23);
		rbNome.setSelected(true);
		getContentPane().add(rbNome);
		busca.add(rbNome);

		rbCodigo = new JRadioButton(bn.getString("TelaConsultarCliente1.RadioButton.Codigo")); 
		rbCodigo.setBounds(26, 126, 70, 23);
		getContentPane().add(rbCodigo);
		busca.add(rbCodigo);

		rbCpf = new JRadioButton(bn.getString("TelaConsultarCliente1.RadioButton.CPF")); 
		rbCpf.setBounds(26, 152, 65, 23);
		getContentPane().add(rbCpf);
		busca.add(rbCpf);

		rbCnpj = new JRadioButton(bn.getString("TelaConsultarCliente1.RadioButton.CNPJ")); 
		rbCnpj.setBounds(26, 183, 65, 23);
		getContentPane().add(rbCnpj);
		busca.add(rbCnpj); 
		//***Fim dos RadioButtons***      


		//***Definindo TextFields***  
		txNome = new JTextField();
		txNome.setBounds(116, 101, 230, 20);
		txNome.setEnabled(false);
		getContentPane().add(txNome);
		txNome.setColumns(10);

		txCodigo = new JTextField();
		txCodigo.setBounds(116, 127, 230, 20);
		getContentPane().add(txCodigo);
		txCodigo.setEnabled(false);
		txCodigo.setColumns(10);

		txCpf = new JTextField();
		txCpf.setBounds(116, 158, 230, 20);
		getContentPane().add(txCpf);
		txCpf.setEnabled(false);
		txCpf.setColumns(10);

		txCnpj = new JTextField();
		txCnpj.setBounds(116, 184, 230, 20);
		getContentPane().add(txCnpj);
		txCnpj.setEnabled(false);
		txCnpj.setColumns(10);

		btnBuscar = new JButton(bn.getString("TelaConsultarCliente1.Button.Buscar")); 
		btnBuscar.setBounds(116, 210, 140, 23);
		getContentPane().add(btnBuscar);
		
		spConsultaCli = new JScrollPane();
		spConsultaCli.setBounds(26, 246, 457, 133);
		getContentPane().add(spConsultaCli);
		
		btnSelecionar = new JButton("Selecionar");
		btnSelecionar.setBounds(184, 390, 140, 23);
		getContentPane().add(btnSelecionar);
		btnSelecionar.setVisible(true);
		criaTabela();

	}

	public void criaTabela(){
		tbConsulta = new JTable(modelo);
		modelo.addColumn("Codigo");
		modelo.addColumn("Nome");
		modelo.addColumn("CPF");
		modelo.addColumn("Telefone");
		tbConsulta.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tbConsulta.getColumnModel().getColumn(0).setPreferredWidth(5);
		tbConsulta.getColumnModel().getColumn(1).setPreferredWidth(50);
		tbConsulta.getColumnModel().getColumn(2).setPreferredWidth(15);
		tbConsulta.getColumnModel().getColumn(3).setPreferredWidth(15);
		spConsultaCli.setViewportView(tbConsulta);
	}
	
	public void adicionaListener(final ActionListener listen)
	{
		this.btnBuscar.addActionListener(listen);
		this.btnSelecionar.addActionListener(listen);
		this.rbCpf.addActionListener(listen);
		this.rbCnpj.addActionListener(listen);
		this.rbCodigo.addActionListener(listen);
		this.rbNome.addActionListener(listen);		
	}
	
}

Classe Controle

package Controle;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import javax.swing.JOptionPane;


import DAO.ClientePFDAO;
import Modelo.ClientePF;
import View.RetornaCliente;

public class ControleRetornaCliente {
	
	public RetornaCliente gui;
	String id, nome, cpf, telefone;
	public ClientePF clienteSelecionado = null;
	
	public ControleRetornaCliente(ResourceBundle bn)
	{
		
		gui = new RetornaCliente(bn);
		
		
		gui.adicionaListener(new Listener());
		
	}
	
	
	public ClientePF getClienteSelecionado() {
		return clienteSelecionado;
	}
	



	public void coletaDados(ClientePF cliente)
	{
		id = "" + cliente.getCodigo();
		nome = cliente.getNome();
		cpf = cliente.getCpf();
		telefone = cliente.getTelefoneRes();
	}
	
	
	class Listener implements ActionListener{

		List<ClientePF> clientes = new ArrayList<ClientePF>(); //Instancia um arraylist para ser preenchido com resultados


		public void actionPerformed(ActionEvent ev)
		{
			String tipoBusca = "";

			//Define o tipo de busca por nome
			if(gui.rbNome.isSelected())
			{
				gui.txNome.setEnabled(true);
				gui.txCpf.setEnabled(false);
				gui.txCnpj.setEnabled(false);
				gui.txCodigo.setEnabled(false);
				gui.txCpf.setText("");
				gui.txCnpj.setText("");
				gui.txCodigo.setText("");
				tipoBusca = "nome";
			}

			//Define o tipo de busca por código
			if(gui.rbCodigo.isSelected())
			{
				gui.txNome.setEnabled(false);
				gui.txCpf.setEnabled(false);
				gui.txCnpj.setEnabled(false);
				gui.txCodigo.setEnabled(true);
				gui.txNome.setText("");
				gui.txCpf.setText("");
				gui.txCnpj.setText("");
				tipoBusca = "codigo";
			}

			//Define o tipo de busca por cpf
			if(gui.rbCpf.isSelected())
			{
				gui.txNome.setEnabled(false);
				gui.txCpf.setEnabled(true);
				gui.txCnpj.setEnabled(false);
				gui.txCodigo.setEnabled(false);
				gui.txNome.setText("");
				gui.txCnpj.setText("");
				gui.txCodigo.setText("");
				tipoBusca = "cpf";
			}

			//Define o tipo de busca por cnpj
			if(gui.rbCnpj.isSelected())
			{
				gui.txNome.setEnabled(false);
				gui.txCpf.setEnabled(false);
				gui.txCnpj.setEnabled(true);
				gui.txCodigo.setEnabled(false);
				gui.txNome.setText("");
				gui.txCpf.setText("");
				gui.txCodigo.setText("");
				tipoBusca = "cnpj";
			}

			//Implementa ação do botão buscar
			if(ev.getSource() == gui.btnBuscar)
			{	
				//Define o critério da busca
				String dado = ""+  gui.txCnpj.getText() + gui.txNome.getText() +  gui.txCpf.getText() +  gui.txCodigo.getText();	
				gui.modelo.setNumRows(0);
				ClientePFDAO cliDAO = new ClientePFDAO(); //Instancia classe DAO para manipulação de banco


				try {
					//Retorna um cliente da consulta de acordo com o critério e tipo de busca
					clientes = cliDAO.consultarCliente(dado, tipoBusca);
				} catch (SQLException e) {
					e.printStackTrace();
				}

				//Checa se a busca deu resultado
				if(clientes.size() != 0) 
				{
					for (int i = 0; i <= clientes.size() - 1; i++)
					{
						coletaDados(clientes.get(i));
						gui.modelo.addRow(new String [] {id, nome, cpf, telefone});
					}
				}
				else
					//Caso negativo, apresenta tela de erro
					JOptionPane.showMessageDialog(null, "cliente não cadastrado");
			}



			if(ev.getSource()== gui.btnSelecionar)
			{
				
                                //Seta o obj clienteSelecionado com o obj selecionado na tabela
                                int linha = gui.tbConsulta.getSelectedRow();
				clienteSelecionado = clientes.get(linha);
				gui.setVisible(false);
			}
		}
	}

}

Eu estou chamando essa outra janela em um botão dentro de uma outra classe... o código do botão é esse abaixo!

if(ev.getSource() == gui.btnSelecionarCliente)
			{

				ControleRetornaCliente cl = new ControleRetornaCliente(gui.bn);
				clienteLocacao = cl.getClienteSelecionado();
				gui.txNomeCli.setText(clienteLocacao.getNome()); //Seta o campo nome com o nome do cliente
				gui.txCodigoCli.setText(clienteLocacao.getCodigo()); //Seta o campo código com o código do cliente
				
			}
Assim que eu clico no botão da erro de "java.lang.NullPointerException" pois antes de eu setar o cliente no "clienteLocacao" o codigo já chama:
clienteLocacao = cl.getClienteSelecionado();
Tentei usar o Modal desta forma:
cl.SetModal(true);
Mas não funciona pq ele nem enxerga o método setmodal. Se eu coloco diretamente no construtor da classe "RetornaCliente":
public RetornaCliente(ResourceBundle idioma)
	{  	      

		this.setModal(true);
		this.setVisible(true);		
		this.setSize(534, 475);

Abre uma janela nda a ver, com componente nenhum...

E se eu ponho no construtor da classe Controle:
public ControleRetornaCliente(ResourceBundle bn)
	{
		
		gui = new RetornaCliente(bn);
gui.setModal(true);
gui.setModal(true);
		gui.adicionaListener(new Listener());

Tbm da erro Null...

Alguém tem alguma idéia do q pode ser?

2 Respostas

Ivan_Alves

Coloque o log do erro completo ai…

shinoob
tenta colocar o

this.setModal(true);

this.setVisible(true);

this.setSize(534, 475);

depois de criar tudo

ou tente tb o pack();

Criado 19 de outubro de 2011
Ultima resposta 19 de out. de 2011
Respostas 2
Participantes 3