Comunicação entre Classes

1 resposta
S

Olá Pessoal!!

Olha só, tenho a Classe PainelCadastraAreas que armazena seus dados na Classe Areas. E preciso desses dados para preencher uma ComboBox numa terceira Classe chamada PainelCadastraExames. Porque pra qualquer exame q eu cadastre, precisa ter uma área já cadastrada. No evento do botão Salvar, na Classe PainelCadastraAreas estou colocando um vetor.size() para saber o tamanho final dele, armazenando em qtd (da classe Areas) pra pegar esse valor e preencher a ComboBox que precisar ser numa String… O problema é que quando vou tentar pegar qtd, na Classe PainelCadastraExames, ta dando vetor nulo. Que eu faço?

Códigos:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
import java.util.Vector;

import javax.swing.*;
import javax.swing.GroupLayout.Alignment;


public class PainelCadastraAreas extends JFrame implements ActionListener{
	private static Vector vetorArea = new Vector();
	private JTextField nome,tNome,tDesc, tCodigo;
	JButton botaoLimpar,botaoSalvar;
	JPanel painelGeral = new JPanel();
	JPanel pBotao = new JPanel();
	boolean valido;
	private int cod=0;
	JLabel codigo= new JLabel(Integer.toString(cod),JLabel.CENTER);
	
	//método construtor
	
	PainelCadastraAreas(){
		JPanel pAreas = new JPanel(); 
		painelGeral.setOpaque(true);
		painelGeral.setLayout(new BorderLayout());
		pAreas.setLayout(new GridLayout(3,2,10,10));
		
		JLabel cod1 = new JLabel("Codigo: ");
		pAreas.add(cod1);
		tCodigo = new JTextField();
		pAreas.add(tCodigo);
		
		JLabel nome = new JLabel("Nome: ");
		pAreas.add(nome);
		tNome = new JTextField();
		pAreas.add(tNome);
		
		JLabel descricao = new JLabel("Descrição: ");
		pAreas.add(descricao);
		tDesc = new JTextField();
		pAreas.add(tDesc);
		
		painelGeral.add(pAreas,BorderLayout.CENTER);
		painelGeral.setBorder(BorderFactory.createTitledBorder("Cadastro Áreas"));
		botaoLimpar = new JButton ("Limpar");
		botaoSalvar=new JButton("Salvar");
		pBotao.add(botaoSalvar);
		pBotao.add(botaoLimpar);
		botaoLimpar.addActionListener(this);
		botaoSalvar.addActionListener(this);
		painelGeral.add(pBotao,BorderLayout.SOUTH);
	}
	 public JPanel cadastraArea(){
		   return painelGeral;
	   }

	public void recebeCod (int qnt){
		cod=qnt;
		codigo.setText(Integer.toString(cod));
		codigo.setBorder(BorderFactory.createLineBorder(Color.GRAY));
	}
	
	
	public boolean validaDados(){
		if (tNome.getText().equals("")||
				tDesc.getText().equals("")){
			return false;
		}
		else{
			return true;
		}
	}
	
	public void limpaDados(){
		tCodigo.setText("");
		tNome.setText("");
		tDesc.setText("");
	}	
	
	public JLabel getLCod() {
		return codigo;
	}
	public void setLCod(JLabel cod) {
		codigo= cod;
	}
	public JTextField getTNome() {
		return tNome;
	}
	public void setTNome(JTextField nome) {
		tNome = nome;
	}
	public JTextField getTDesc() {
		return tDesc;
	}
	public void setTDesc(JTextField descricao) {
		tDesc = descricao;
	}

public void actionPerformed(ActionEvent e) {
		
		if (e.getSource() == botaoLimpar){
			limpaDados();
		}
		if(e.getSource() == botaoSalvar){
			if(validaDados() == false){
				JOptionPane.showMessageDialog(null,"Não foi possível salvar por falta de dados !","Hospital",JOptionPane.WARNING_MESSAGE);
			}
			else{
				Areas area = new Areas();	
				if ((validaNomeCodigo(vetorArea, tNome.getText(),
						Integer.parseInt(codigo.getText()))) == true){
					
					area.setCodigo(Integer.parseInt(codigo.getText()));
					area.setNome(tNome.getText());
					area.setDescricao(tDesc.getText());
					vetorArea.add(area);
					JOptionPane.showMessageDialog(null,"Cadastro realizado!","Hospital",JOptionPane.INFORMATION_MESSAGE);
					area.setQtd(vetorArea.size());
					limpaDados();
				}
			}
		}
		
	}
	
	public boolean validaNomeCodigo(Vector vtArea, String nome, Integer cod){          
		for (int aux=0; aux<vtArea.size(); aux++){     
			Areas area = (Areas) vtArea.get(aux);     
             
			if((nome.equalsIgnoreCase(area.getNome())) || (cod.equals(area.getCodigo()))){     
				JOptionPane.showMessageDialog(null,"Dados inválidos!","Hospital",JOptionPane.WARNING_MESSAGE);
				limpaDados();
        	
				return false;
			}
		}
		return true;
	}
}
public class Areas {
	private Integer codigo, qtd;
	private String nome, descricao;
	
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public String getNome() {
		return nome;
	}
	public Integer getCodigo() {
		return codigo;
	}
	public String getDescricao() {
		return descricao;
	}
	public Integer getQtd() {
		return qtd;
	}
	public void setQtd(Integer qtd) {
		this.qtd = qtd;
	}	
}
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.*;
import javax.swing.GroupLayout.Alignment;


public class PainelCadastraExames extends JFrame implements ActionListener{
	private static Vector vetorExame = new Vector();
	private JTextField nome,tNome,tCrm,tValor,tExame;
	JButton botaoLimpar,botaoSalvar,botaoSair;
	JPanel painelGeral = new JPanel();
	JPanel pBotao = new JPanel();
	boolean valido;
	private int cod=0;
	JLabel codigo= new JLabel(Integer.toString(cod),JLabel.CENTER);
	JComboBox comboArea;
	
	//método construtor
	
	PainelCadastraExames(){
		JPanel pExames = new JPanel(); 
		painelGeral.setOpaque(true);
		painelGeral.setLayout(new BorderLayout());
		pExames.setLayout(new GridLayout(5,2,10,10));
		
		JLabel cod1 = new JLabel("Codigo: ");
		pExames.add(cod1);
		pExames.add(codigo);
		
		JLabel nome = new JLabel("Médico responsável: ");
		pExames.add(nome);
		tNome = new JTextField();
		pExames.add(tNome);
		
		JLabel descricao = new JLabel("Crm do médico: ");
		pExames.add(descricao);
		tCrm = new JTextField();
		pExames.add(tCrm);
		
		JLabel valor = new JLabel("Valor : ");
		pExames.add(valor);
		tValor = new JTextField();
		pExames.add(tValor);
		
		JLabel nomeExame = new JLabel("Nome do exame : ");
		pExames.add(nomeExame);
		tExame = new JTextField();
		pExames.add(tExame);
		
		Areas qtdArea = new Areas();
		Integer qtd = qtdArea.getQtd();
		String[] areas = new String[qtd];
		if(qtd != null){
			Vector vetor = new Vector();
			
			for (int aux=0; aux<vetor.size(); aux++){     
				Areas area = (Areas) vetor.get(aux);
			
				areas[aux] = area.getNome();
			}
		}
		
		//String qtdArea[] = {"casa", "boia", "lua", "sol"};
		comboArea = new JComboBox(areas);
		pExames.add(comboArea);
		
		
		painelGeral.add(pExames,BorderLayout.CENTER);
		painelGeral.setBorder(BorderFactory.createTitledBorder("Cadastro Exames"));
		
		botaoLimpar = new JButton ("Limpar");
		botaoSalvar=new JButton("Salvar");
		botaoSair=new JButton("Sair");
		pBotao.add(botaoSalvar);
		pBotao.add(botaoLimpar);
		pBotao.add(botaoSair);
		botaoLimpar.addActionListener(this);
		botaoSalvar.addActionListener(this);
		botaoSair.addActionListener(this);
		painelGeral.add(pBotao,BorderLayout.SOUTH);
	}
	 public JPanel cadastraExame(){
		   return painelGeral;
	   }
	public void recebeCod (int qnt){
		cod=qnt;
		codigo.setText(Integer.toString(cod));
		codigo.setBorder(BorderFactory.createLineBorder(Color.GRAY));
	}
	
	
	public boolean validaDados(){
		if (tNome.getText().equals("") || tCrm.getText().equals("") 
				|| tValor.getText().equals("") || tExame.getText().equals("")){
			return false;
		}
		else{
			return true;
			
		}
	}
	
	public void limpaDados(){
		tNome.setText("");
		tCrm.setText("");
		tValor.setText("");
		tExame.setText("");
	}	
	
	public JLabel getLCod() {
		return codigo;
	}
	public void setLCod(JLabel cod) {
		codigo= cod;
	}
	public JTextField getNome() {
		return tNome;
	}
	public void setNome(JTextField nome) {
		tNome = nome;
	}
	public JTextField getCrm() {
		return tCrm;
	}
	public void setCrm(JTextField crm) {
		tCrm = crm;
	}
	public JTextField getValor() {
		return tValor;
	}
	public void setValor(JTextField valor) {
		tValor = valor;
	}
	public JTextField getExame() {
		return tExame;
	}
	public void setExame(JTextField exame) {
		tExame = exame;
	}
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == botaoLimpar){
			limpaDados();
		}
		if(e.getSource() == botaoSalvar){
			if(validaDados() == false){
				JOptionPane.showMessageDialog(null,"Não foi possível salvar por falta de dados !","Hospital",JOptionPane.WARNING_MESSAGE);
			}
			else{
				Exames exame = new Exames();	
					
					exame.setNomeMedico(tNome.getText());
					exame.setCrmMedico(tCrm.getText());
					exame.setValor(Double.parseDouble(tValor.getText()));
					vetorExame.add(exame);
					JOptionPane.showMessageDialog(null,"Cadastro realizado!","Hospital",JOptionPane.INFORMATION_MESSAGE);
					limpaDados();
			}
		}
	}
}

1 Resposta

Jesuino_Master

Boa Tarde,

O problema não seria porque o seu vetor é estatico?

private static Vector vetorArea = new Vector();

Tente fazer o seguinte:

/*
Tire a declaração de estático
*/
     private Vector vetorArea;
     private JTextField nome,tNome,tDesc, tCodigo;  
       
/*
... Seu código
*/
     //método construtor  
       
     PainelCadastraAreas(){  
         JPanel pAreas = new JPanel();   
         painelGeral.setOpaque(true);  
         painelGeral.setLayout(new BorderLayout());  
/*
instancie o vetor no construtor!
*/
         Vector vetorArea = new Vector();  

/*
.... Seu código

*/

Creio que irá funcionar(não testei)! Boa sorte!!!

OBS: O construtor não é um método! :smiley:

Criado 6 de junho de 2009
Ultima resposta 6 de jun. de 2009
Respostas 1
Participantes 2