Olá pessoal! Eu novamente! =P
Segue meu código, ele está dando um erro de Exception.
Ele compila bonitinho, mas na hora de rodar =/ .
Contato, Relatorio e ManipulaArquivo são classes que isoladamentes estao funcionando.
Desde já agradecido.
Att.
import java.awt.*;
import java.awt.event.*;
import java.io.*; /*Arquivos*/
import java.io.Serializable;
import javax.swing.*;
import javax.swing.JMenuBar;
import java.util.*; /*HashTable*/
import java.util.Hashtable; /*HashTable*/
import java.lang.*;
import java.lang.String;
public class Agenda extends JFrame{
// ### DECLARACAO DOS OBJETOS ######################################
//Container
private Container ctnJanelaPrincipal;
private BorderLayout bdrLayout;
//Diversos
Object objSimNao[] = {"Sim","Não"};
/*****************************************************/
//Cria a Hashtable
public Hashtable tblHasAgenda = new Hashtable();
//Cria o objeto ManipulaArquivo
public ManipulaArquivo manArqAgenda = new ManipulaArquivo();
//Cria enumeration
Enumeration enuTblHasAgenda;
//Strings de manipulacao da Hashtable
String strChave, strConteudo;
public String strListaResultados[];
/*****************************************************/
//Barra de menu
private JMenuBar menBarBarraMenu = new JMenuBar();
private JMenu menMenu = new JMenu( "Arquivo" );
private JMenuItem menIteAtualizarRegistro = new JMenuItem( "Atualizar Registro" );
private JMenuItem menIteSair = new JMenuItem( "Sair" );
//Outros componentes [visuais]
private JLabel lblTitulo = new JLabel( "Agenda Telefônica - TES01" );
private JLabel lblResultado = new JLabel( "Nomes encontrados: " );
private JLabel lblConsulta = new JLabel( "Nome a ser pesquisado: " );
private JLabel lblNome = new JLabel( "Nome: " );
private JLabel lblTelefonePessoal = new JLabel( "Telefone Pessoal: " );
private JLabel lblTelefoneComercial = new JLabel( "Telefone Comercial: " );
private JLabel lblEmail = new JLabel( "E-mail: " );
private JTextField txtFldNome = new JTextField(20);
private JTextField txtFldTelefonePessoal = new JTextField(20);
private JTextField txtFldTelefoneComercial = new JTextField(20);
private JTextField txtFldEmail = new JTextField(20);
private JTextField txtFldConsulta = new JTextField(26);
private JList lstResultadoConsulta; /* = new JList();*/
// private JButton btnPesquisar = new JButton( "Pesquisar" );
private JButton btnInserirContato = new JButton( "Inserir" );
private JButton btnAlterarContato = new JButton( "Alterar" );
private JButton btnExcluirContato = new JButton( "Excluir" );
private JButton btnListarContato = new JButton( "Listar" );
private JButton btnSair = new JButton( "Sair" );
private JPanel pnlNortePai = new JPanel();
private JPanel pnlNorteN = new JPanel();
private JPanel pnlNorteC = new JPanel();
private JPanel pnlNorteS = new JPanel();
private JPanel pnlCentro = new JPanel();
private JPanel pnlOestePai = new JPanel();
private JPanel pnlOesteN = new JPanel();
private JPanel pnlOesteC = new JPanel();
private JPanel pnlSulPai = new JPanel();
private JPanel pnlSulN = new JPanel();
private JPanel pnlSulC = new JPanel();
private JPanel pnlSulCc = new JPanel();
private JPanel pnlSulCe = new JPanel();
// ### DECLARACAO DOS OBJETOS ######################################
// ### DECLARACAO CONSTRUTOR @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
public Agenda(){
//Layout principal
super( "Agenda Telefônica" );
ctnJanelaPrincipal = getContentPane();
bdrLayout = new BorderLayout(7,7);
ctnJanelaPrincipal.setLayout( bdrLayout );
//Faz a leitura dos dados no inicio do programa
manArqAgenda.leDados(tblHasAgenda);
//Seta Menu
menMenu.add(menIteAtualizarRegistro);
menMenu.add(menIteSair);
menBarBarraMenu.add(menMenu);
setJMenuBar(menBarBarraMenu); /*Seta menu para aparecer na JanelaPrincipal*/
//Seta Objetos
//Norte
pnlNortePai.setLayout( new BorderLayout(5,5) );
pnlNorteN.setLayout( new FlowLayout() );
pnlNorteN.add( new JLabel("") );
pnlNorteC.setLayout( new FlowLayout() );
pnlNorteC.add(lblTitulo);
pnlNorteS.setLayout( new FlowLayout() );
pnlNorteS.add( new JLabel("") );
pnlNortePai.add(pnlNorteN, BorderLayout.NORTH);
pnlNortePai.add(pnlNorteC, BorderLayout.CENTER);
pnlNortePai.add(pnlNorteS, BorderLayout.SOUTH);
//Centro
pnlCentro.setLayout( new GridLayout(9,1) );
pnlCentro.add(lblNome);
pnlCentro.add(txtFldNome);
pnlCentro.add( new JLabel("") );
pnlCentro.add(lblTelefonePessoal);
pnlCentro.add(txtFldTelefonePessoal);
pnlCentro.add(lblTelefoneComercial);
pnlCentro.add(txtFldTelefoneComercial);
pnlCentro.add(lblEmail);
pnlCentro.add(txtFldEmail);
//Oeste
pnlOestePai.setLayout( new BorderLayout(5,5) );
pnlOesteN.setLayout( new GridLayout(4,1) );
pnlOesteN.add(lblConsulta);
pnlOesteN.add(txtFldConsulta);
pnlOesteN.add( new JLabel("") );
pnlOesteN.add(lblResultado);
pnlOesteC.setLayout( new GridLayout(1,1) );
pnlOesteC.add(lstResultadoConsulta);
pnlOestePai.add(pnlOesteN, BorderLayout.NORTH);
pnlOestePai.add(pnlOesteC, BorderLayout.CENTER);
//Sul
pnlSulPai.setLayout( new BorderLayout(5,5) );
pnlSulN.setLayout( new FlowLayout() );
pnlSulN.add( new JLabel("") );
pnlSulC.setLayout( new BorderLayout(5,5) );
pnlSulCc.setLayout( new FlowLayout() );
pnlSulCc.add(btnInserirContato);
pnlSulCc.add(btnAlterarContato);
pnlSulCc.add(btnExcluirContato);
pnlSulCc.add(btnListarContato);
pnlSulCe.setLayout( new FlowLayout() );
pnlSulCe.add(btnSair);
pnlSulC.add(pnlSulCc, BorderLayout.WEST);
pnlSulC.add(pnlSulCe, BorderLayout.EAST);
pnlSulPai.add(pnlSulN, BorderLayout.NORTH);
pnlSulPai.add(pnlSulC, BorderLayout.CENTER);
//Trata os ouvintes do eventos
BtnOuvinte ouvinteBtn = new BtnOuvinte();
btnInserirContato.addActionListener( ouvinteBtn );
btnAlterarContato.addActionListener( ouvinteBtn );
btnExcluirContato.addActionListener( ouvinteBtn );
btnListarContato.addActionListener( ouvinteBtn );
btnSair.addActionListener( ouvinteBtn );
TxtFldOuvinte ouvinteTxtFld = new TxtFldOuvinte();
txtFldConsulta.addKeyListener( ouvinteTxtFld );
ctnJanelaPrincipal.add(pnlNortePai, BorderLayout.NORTH);
ctnJanelaPrincipal.add(pnlCentro, BorderLayout.CENTER);
ctnJanelaPrincipal.add(pnlOestePai, BorderLayout.WEST);
ctnJanelaPrincipal.add(pnlSulPai, BorderLayout.SOUTH);
//Seta apresentacao
setSize(600,360);
setLocationRelativeTo(null);
setResizable(false);
show();
}
// ### DECLARACAO CONSTRUTOR @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*
//#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*
// ### DECLARACAO CLASSES INTERNAS *********************************
//Classe interna para tratamento de ouvintes (TxtFields)
public class TxtFldOuvinte implements KeyListener {
public void keyPressed( KeyEvent evento){
//coloca o(s) caractere(s) fornecidos pelo usuario na String strConsulta
String strConsulta = evento.getKeyText(evento.getKeyCode());
//Cria string e objetos que recebera informacoes da tabela
int TAM = tblHasAgenda.size();
int j = 0;
int TAMConsulta = strConsulta.length();
String strResultado = "";
Contato cntContatos = new Contato();
//Manipula Tabelahash
enuTblHasAgenda = tblHasAgenda.keys();
while (enuTblHasAgenda.hasMoreElements()) {
strChave = enuTblHasAgenda.nextElement().toString();
cntContatos = (Contato)tblHasAgenda.get(strChave);
strResultado += cntContatos.getNome();
for( int i = 0; i < strResultado.length(); i++ ){
if(strResultado.substring( i, (TAMConsulta+i)).equals(strConsulta)){
strListaResultados[j] = strResultado;
j++;
}
}
strResultado = " ";
}
//Coloca valores na JList
lstResultadoConsulta = new JList(strListaResultados);
lstResultadoConsulta.setVisibleRowCount(5);
}
public void keyReleased ( KeyEvent evento){
/*
//coloca o(s) caractere(s) fornecidos pelo usuario na String strConsulta
String strConsulta = evento.getKeyText(evento.getKeyCode());
//Cria string e objetos que recebera informacoes da tabela
int TAM = tblHasAgenda.size();
int j = 0;
int TAMConsulta = strConsulta.length();
String strResultado = "";
Contato cntContatos = new Contato();
//Manipula Tabelahash
enuTblHasAgenda = tblHasAgenda.keys();
while (enuTblHasAgenda.hasMoreElements()) {
strChave = enuTblHasAgenda.nextElement().toString();
cntContatos = (Contato)tblHasAgenda.get(strChave);
strResultado += cntContatos.getNome();
for( int i = 0; i < strResultado.length(); i++ ){
if(strResultado.substring( i, (TAMConsulta+i)).equals(strConsulta)){
strListaResultados[j] = strResultado;
j++;
}
}
strResultado = " ";
}
//Coloca valores na JList
lstResultadoConsulta = new JList(strListaResultados);
lstResultadoConsulta.setVisibleRowCount(5);
*/
}
public void keyTyped( KeyEvent evento){
}
}
//Classe interna para tratamento de ouvintes (Botoes)
private class BtnOuvinte implements ActionListener {
public void actionPerformed( ActionEvent evento ) {
if( evento.getSource() == btnInserirContato ) //INSERIR CONTATO
{
if(txtFldNome.getText().trim().equals("") ||
txtFldTelefonePessoal.getText().trim().equals("") ||
txtFldTelefoneComercial.getText().trim().equals("") ||
txtFldEmail.getText().trim().equals("")) {
JOptionPane.showMessageDialog(null, "Nenhum campo pode estar vazio.",
"Dados Inválidos", JOptionPane.ERROR_MESSAGE);
//coloca cursor em nome
txtFldNome.requestFocus();
}
else if(tblHasAgenda.containsKey(txtFldTelefonePessoal.toString())){
JOptionPane.showMessageDialog(null,
"Ja existe um contato proprietario deste numero de telefone\nPor favor, insira outro numero ou coloque este como Comercial",
"Chave já existente", JOptionPane.ERROR_MESSAGE);
//coloca cursor em telefone pessoal
txtFldTelefonePessoal.requestFocus();
}
else{
Contato cntContato = new Contato(txtFldNome.toString(),
txtFldTelefonePessoal.toString(),
txtFldTelefoneComercial.toString(),
txtFldEmail.toString());
//Grava o objeto da Classe Contato na tabela hash
tblHasAgenda.put(cntContato.getTelefonePessoal(), cntContato);
//Informa sucesso
JOptionPane.showMessageDialog(null,
"Registro Inserido com sucesso!", "Inclusão de Registro",
JOptionPane.INFORMATION_MESSAGE);
//limpa os campos e seta o cursor no nome
txtFldNome.setText("");
txtFldTelefonePessoal.setText("");
txtFldTelefoneComercial.setText("");
txtFldEmail.setText("");
txtFldNome.requestFocus();
}
}
/*
if( evento.getSource() == btnAlterarContato ) //ALTERAR CONTATO
{
if(txtFldNome.getText().trim().equals("") ||
txtFldTelefonePessoal.getText().trim().equals("") ||
txtFldTelefoneComercial.getText().trim().equals("") ||
txtFldEmail.getText().trim().equals("")) {
JOptionPane.showMessageDialog(null, "Nenhum campo pode estar vazio.",
"Dados Inválidos", JOptionPane.ERROR_MESSAGE);
txtFldNome.requestFocus();
}
}
if( evento.getSource() == btnExcluirContato ) //EXCLUIR CONTATO
{
if(txtFldNome.getText().trim().equals("") ||
txtFldTelefonePessoal.getText().trim().equals("") ||
txtFldTelefoneComercial.getText().trim().equals("") ||
txtFldEmail.getText().trim().equals("")) {
JOptionPane.showMessageDialog(null, "Nenhum campo pode estar vazio.",
"Dados Inválidos", JOptionPane.ERROR_MESSAGE);
txtFldNome.requestFocus();
}
}
*/
if( evento.getSource() == btnListarContato ) //LISTAR CONTATOS
{
String listagem = " ";
listagem += "Nome Telefone Pessoal Telefone Comercial E-mail \n\n";
Font fonte;
fonte = new Font("Courier", Font.PLAIN, 12);
//Manipula Tabelahash
enuTblHasAgenda = tblHasAgenda.keys();
while (enuTblHasAgenda.hasMoreElements()) {
strChave = enuTblHasAgenda.nextElement().toString();
strConteudo = tblHasAgenda.get(strChave).toString();
listagem += " "; // margem esquerda
listagem += strChave+" "; // telefone pessoal
listagem += strConteudo.substring( 0, 20 )+" "; // nome
listagem += strConteudo.substring( 21, 40 )+" "; // telefone comercial
listagem += strConteudo.substring( 41, 60 )+" "; // e-mail
}
Relatorio relatorio1 = new Relatorio();
relatorio1.criaRelatorio( "Listagem dos dados cadastrados", listagem, 810, 300 );
}
if( evento.getSource() == btnSair) //SAIR
{
int i = JOptionPane.showOptionDialog(null, "Deseja sair do programa e salvar os dados em disco?",
"Confirmação de saída", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE, null, objSimNao, objSimNao[0]);
if (i == JOptionPane.YES_OPTION) {
//Faz a gravacao dos dados na saida do programa
manArqAgenda.gravaDados(tblHasAgenda);
//Encerra o programa
System.exit(0);
}
else{
txtFldConsulta.requestFocus();
}
}
}
}
// ### DECLARACAO CLASSES INTERNAS *********************************
// ### DECLARACAO DE MAIN ##########################################
public static void main(String[] args) {
Agenda objAgenda = new Agenda();
objAgenda.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}