Beruflich Dokumente
Kultur Dokumente
www.athanazio.com
Pgina 2
ndice geral
conceitos bsicos...................................................................................................................... 7 Configurao do ambiente.................................................................................................... 8 instalando e configurando................................................................................................. 8 testando o ambiente............................................................................................................. 8 Entendendo a linguagem.................................................................................................... 10 Como funciona o java ?.................................................................................................. 10 caractersticas da linguagem.......................................................................................... 11 Iniciando a sintaxe.............................................................................................................. 12 Entendendo o Ola mundo............................................................................................... 12 Elementos bsicos da linguagem....................................................................................... 12 regra para nome de identificadores................................................................................ 12 palavras reservadas........................................................................................................ 12 Comentrios................................................................................................................... 13 Tipos de dados e declarao de variveis...................................................................... 13 Operadores..................................................................................................................... 15 Estruturas de controle......................................................................................................... 16 Interrompendo os fluxos de controle.............................................................................. 16 se.................................................................................................................................... 17 Variando......................................................................................................................... 18 Enquanto........................................................................................................................ 19 Caso............................................................................................................................... 19 Classes bsicas.................................................................................................................. 21 String............................................................................................................................... 21 Classes para nmeros.................................................................................................... 22 Vetores................................................................................................................................ 24 Lista de exerccios.............................................................................................................. 27 Orientao a Objetos.................................................................................................................................... 29 Conceitos............................................................................................................................ 30 Novas palavras, velhas idias........................................................................................ 30 As novas palavras............................................................................................................... 30 Classes........................................................................................................................... 30 Atributos.......................................................................................................................... 30 Mtodos.......................................................................................................................... 30 Encapsulamento............................................................................................................. 30 Herana.......................................................................................................................... 30 Representando classes....................................................................................................... 31 Introduo....................................................................................................................... 31 Diagrama de classes...................................................................................................... 31 Associao...................................................................................................................... 31 Herana.......................................................................................................................... 32 OO na prtica................................................................................................................. 32 Usando Java........................................................................................................................... 33 Classes e objetos................................................................................................................ 33
Melhorando as classes....................................................................................................... 34 Construtores................................................................................................................... 34 Sobrecarga..................................................................................................................... 34 Controle de acesso......................................................................................................... 34 Constantes...................................................................................................................... 35 Elementos classe............................................................................................................ 35 Exerccios Capitulo 2............................................................................................................... 36 Orientao a Objetos 2................................................................................................................................. 38 Mais OO.............................................................................................................................. 39 Herana............................................................................................................................... 39 Anulao............................................................................................................................. 39 Verificao de tipo.............................................................................................................. 39 Molde de tipo.................................................................................................................. 39 Classes sem objetos........................................................................................................... 41 Classes e mtodos abstratos......................................................................................... 41 Interfaces........................................................................................................................ 43 Organizao da casa.............................................................................................................. 44 criao de pacotes.............................................................................................................. 44 tratando erros.......................................................................................................................... 46 Tratamento de erros........................................................................................................... 47 banco de dados....................................................................................................................... 49 JDBC Conceitos ................................................................................................................. 50 Usando JDBC..................................................................................................................... 51 JDBC na veia...................................................................................................................... 51 Ola Mundo JDBC............................................................................................................ 51 Mais funcionalidades...................................................................................................... 51 Interfaces com usurio usando AWT........................................................................................................................... 52 Descrio da AWT.............................................................................................................. 53 novos nomes....................................................................................................................... 54 Container........................................................................................................................ 54 Components................................................................................................................... 54 Gerentes de layout.......................................................................................................... 56 Como funciona um aplicao ............................................................................................. 57 Gerentes de layout.............................................................................................................. 59 FlowLayout...................................................................................................................... 59 BorderLayout.................................................................................................................. 61 GridLayout...................................................................................................................... 63 Combinando gerentes de layout......................................................................................... 64 Desenhando na tela............................................................................................................ 66 Componentes visuais.......................................................................................................... 68 Tratando Eventos................................................................................................................ 71 Como funciona ?............................................................................................................. 71 Eventos de janelas.......................................................................................................... 74 Criando menus.................................................................................................................... 77 exemplos de solues............................................................................................................. 80 Capitulo 1, exerccio 1......................................................................................................... 81
Pgina 4
Capitulo 1, exerccio 2......................................................................................................... 83 Capitulo 1, exerccio 3......................................................................................................... 84 Capitulo 1, exerccio 4......................................................................................................... 85 Capitulo 1, exerccio 5......................................................................................................... 86 Capitulo 1, exerccio 6......................................................................................................... 87 Capitulo 1, exerccio 7......................................................................................................... 88 Capitulo 1, exerccio 8......................................................................................................... 89 Capitulo 1, exerccio 9......................................................................................................... 90 Capitulo 1, exerccio 10....................................................................................................... 92 exemplo de Aplicao MDI..................................................................................................... 94
Legenda
No use software pirata use software livre, este indicar alternativas livres de software
Controle de verses 25/07/2003 adicionados instrues e exemplos de JDBC 28/06/2003 reunidos todos os documentos em um s 30/10/2002 criado novo documento o incio 11/10/2002 reviso geral e migrao de sgml para openoffice 01/10/2002 adicionado controle de eventos ActionEvent 25/09/2002 verso inicial, captulo de AWT 14/10/2001 concludo Orientao a objetos 2 e Manipulao de arquivos 08/10/2001 concluso de Orientao a objetos 1 e Orientao a objetos 2, at interfaces 01/10/2001 Orientao a objetos 1 melhorando as classes e lista de exercicios 15/09/2001 concluso de Orientao a objetos 1 e remodelagem sem AWT 21/07/2001 Orientao a objetos 1 Feito com
Pgina 6
CONCEITOS BSICOS
Depois de instalado, precisaremos configurar uma varivel de ambiente, para o funcionamento correto do compilador Java. Quando o compilador for executado o mesmo precisar saber onde encontrar as bibliotecas da linguagem Java e possveis bibliotecas criadas pelo programador. A biblioteca Java encontrada automaticamente, porm as desenvolvidas - precisamos indicar onde encontrar atravs de definio da varivel de ambiente CLASSPATH, esta varivel define o caminho para encontrar classes usadas por um programa, iremos configurar o nosso caminho de procura para o diretrio atual, no Prompt do Ms-DOS com os seguintes comandos:
c:\>set CLASSPATH=. c:\> c:\>echo %CLASSPATH% . c:\>
configurando CLASSPATH
Nota: Observar que ao executar a linha acima do set CLASSPATH=. iremos definir a varivel de ambiente somente para a sesso do Ms-DOS que estiver aberta no momento. para garantir que esta configurao esteja disponvel para todas as sesses do Ms-DOS que utilizarmos a linha de definio set CLASSPATH=. dever ser includa no final do arquivo autoexec.bat
Pgina 8
testando o ambiente
Para criar seu primeiro arquivo utilize qualquer editor de textos ASCII puro, por exemplo o bloco de notas do windows (notepad.exe), ou o edit do DOS. Crie uma arquivo conforme o exemplo abaixo :
class olamundo{ public static void main ( String args[] ){ System.out.println( "Ol mundo" ); } }
olamundo.java
Para salvar arquivos com extenso diferente de .txt no bloco de notas, ser necessrio colocar o nome do arquivo entre aspas, por exemplo: "olamundo.java"
Nosso teste de ambiente consistir em compilar e executar o olamundo.java recm criado, no diretrio onde foi criado olamundo.java siga os comandos abaixo:
c:\>javac olamundo.java c:\>java olamundo Ola mundo c:\>
Nota: javac olamundo.java realiza a compilao do arquivo fonte .java e cria um arquivo .class que ser executado pelo comando java olamundo. Observar que o compilador javac precisa que seja informada a extenso do arquivo, e o interpretador java no, pois assume a extenso .class
A Virtual Machine garante o funcionamento de programas Java em diversas plataformas, desde servidores corporativos a dispositivos portteis. Isto permite uma flexibilidade e economia enorme, pois torna possvel "write once, run anywhere".
Pgina 10
A criao de um programa Java pode ser dividida em 3 etapas: etapa 1. codificao do programa em um arquivo .java etapa 2. compilao do programa usando javac nomearquivo.java etapa 3. execuo do bytecode, que o arquivo .class usando java nomearquivo
caractersticas da linguagem
Qualificando a linguagem Java podemos citar as seguintes caractersticas:
Recursos essenciais de uma linguagem - Objetos, Strings, Threads, data e hora, estruturas de controle, armazenamento de dados, entrada e sada, etc ... Applets - criao de aplicaes embutidas em pginas html que so executadas no cliente Recursos de Rede - comunicao via TCP/IP, UDP, etc ... Componentes de Software - chamados JavaBeans Java Database Connectivity (JDBC) - Conexo a praticamente todos bancos de dados do mercado
Explicao define o nome da classe, observar que todo programa em java uma classe, e que o nome da classe deve ser o mesmo nome do arquivo Os elementos da classe em questo esto delimitados pelas chaves "{..}"
Cria o mtodo main da aplicao java, os qualificadores antes do nome main sero discutidos em lies posteriores. Todo mtodo main deve estar pronto para receber os parmetros da linha de comando que o executou, desta forma criado um vetor de String chamado args que contm os parmetros recebidos na execuo do programa o mtodo println, um procedimento da Classe System, e exibe os parmetros que recebe na sada padro do ambiente de execuo java em questo
String args[]
Permite letras e nmeros Comea com uma letra "$" ou "_" Possui tamanho ilimitado No pode ser uma das palavras reservadas "Case sensitive" , diferencia maisculas de minsculas
palavras reservadas
abstract - boolean - break - byte - case - catch - char - class - const - continue - default - do - double - else extends - final - finally - float - for - goto - if - implements - import - instanceof - int - interface - long - native new - null - package - private - protected - public - return - short - static - super - switch - synchronized - this throw - throws - transient - try - void - volatile - while
Pgina 12
Comentrios
Existem 3 tipos de comentrios na linguagem Java
Comentrio de bloco "/*...*/" Comentrio na linha"//" Comentrio de bloco com documentao "/**...*/"
/** * Titulo: comentado.java * Descrio: ilustra comentrios na linguagem java * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ class comentado { // main chamada automaticamente ... public static void main ( String args[] ) { /* esta uma verso do olamundo.java elterada para exibir comentrios System.out.println( "Ol mundo" ); */ } System.out.println( "Eu tenho comentrios" ); // exibe a mensagem
comentado.java
Inteiros - byte, short, int, long Ponto flutuante - float, double Caracter - char ( "a" "\n" "\u001B" ) Boleano - boolean (true ou false)
A declarao das variveis realizada usando o formato : tipo varivel Os literais das variveis ponto flutuante devem possuir um F ou um D aps o valor para indicar se o mesmo trata-se de um double ou de um float. por default sero sempre double, logo para atribuir um literal para um varivel float deve-se informar que o mesmo um float com o sufixo F aps o nmero.
/** * Titulo: variaveis.java * Descrio: ilustra declaracoes de variaveis * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ class variaveis { // main chamada automaticamente ... public static void main ( String args[] ) { int Quantidade = 123; System.out.println( "Quantidade = " + Quantidade ); char Letra = 'A'; char LetraQualquer = Letra; // um valor com casas decimais por default double double MaiorValor = 60000.45; // logo para usa-lo em um float necessrio indicar com o F float Valor = 2546.34F; float OutroValor = 1500; System.out.println( "Valor = " + Valor ); boolean Permitido = false; System.out.println( "Permitido = " + Permitido ); } }
variaveis.java
Pgina 14
Operadores
igual "==" diferente "!=" atribuio "=" Maior ">" Menor "<" Maior ou igual ">=" Menor ou igual "<=" E "&" OU "|" Negao "!" E otimizado "&&" OU otimizado"||" Aritmticos padro "+" "-" "*" "/" Aritmticos Unrios "+=" "-=" "*=" "/=" Incremento unrio "++" Decremento unrio "--" Resto da diviso "%"
/** * Titulo: variaveis.java * Descrio: ilustra operadores * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ class operadores { public static void main ( String args[] ) { int numero = 10; boolean falso = false & ( numero++ < 200 ); System.out.println( "AND & normal - numero = " + numero ); numero = 10; falso = false && ( numero++ < 200 ); System.out.println( "AND && otimizado - numero = " + numero ); float valor /= 10; /* a legibilidade desta operador no das melhores seria melhor : valor = valor / 10
*/ valor /= 2; System.out.println( "/= valor " + valor ); int resto = 10 % 3; System.out.println( "% resto da diviso inteira " + resto ); } }
operadores.java Nota: Os operadores lgicos otimizados, devem ser usados com especial cuidado pois funcionam da seguinte maneira: o "&&" AND ao encontrar algum item da expresso com valor falso, no executa o resto da expresso, e o OR "||" ao encontrar algum elemento da expresso que seja verdadeiro no executa o resto da expresso.
Estruturas de controle
Nota: Todas as estruturas de controle executam blocos de cdigo, que so delimitados pelas chaves "{..}", identificadores criados dentro de um bloco possuem escopo somente para o referido bloco.
return - interrompe a execuo do mtodo em questo retornando o controle para o mtodo chamador break - interrompe a execuo do fluxo atual saindo para a linha de comando imediatamente posterior ao final do bloco de execuo continue - desvia a execuo do programa para o incio do bloco de execuo, evitando a execuo dos trechos posteriores a chamada do continue
Pgina 16
se
o exemplo a seguir ilustra as possveis maneiras de utilizar o if em java, vale ressaltar que a expresso da condio deve possuir um resultado boleano
/** * Titulo: variaveis.java * Descrio: ilustra uso do ife do else * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ class se { public static void main ( String args[] ) { int numero = 10; if ( numero >= 5 ) System.out.println( "maior ou igual " + numero ); // esta forma oferece maior legibilidade if ( numero >= 5 ) { System.out.println( "maior ou igual " + numero ); } char A = 'A'; char B = 'B'; if ( A == B ) { System.out.println( A + " igual a B " + B ); } else { System.out.println( A + " diferente de " + B ); } } }
se.java
Variando
O variando dividido em 3 partes:
inicializao da varivel de controle - tambm pode ser realizada a declarao da mesma Condio de parada - exepresso que deve retornar um valor booleano modificao1 da varivel de controle - pode ser ps ou pr-fixado, ou ainda ser uma expresso
/** * Titulo: variaveis.java * Descrio: ilustra uso do for * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ class variando { public static void main ( String args[] ) { int limite = 10; for ( int n = 1 ; n <= limite ; n ++ ) { System.out.println( n ); } long fatorial = 1; int quantidade = 18; for ( int n = 1 ; n <= quantidade ; { fatorial *= n; } n ++ )
variando.java
1 Observar que no um incremento, pois em alguns casos esta expresso de modificao realiza decrementos, nos casos em que o for precisa que a varvel de controle possua valores decrementais Pgina 18
Enquanto
Utilizado normalmente quando precisamos executar um bloco e no podemos determinar com antecedncia a quantidade de vezes, pois a quantidade ir depender de resultados da execuo do bloco
/** * Titulo: variaveis.java * Descrio: ilustra uso do while * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ class enquanto { public static void main ( String args[] ) { boolean condicao = true; int n = 1; int limite = 20; while ( condicao ) { System.out.print( n + " " ); n ++; if ( n > limite ) { condicao = false; }
enquanto.java
Caso
o switch avalia uma expresso com resultado inteiro, logo pode ser usado para avalizar um char, podendo comparar tanto com o literal char quanto com o literal inteiro - no caso do literal inteiro ser usado para comparao com o valor da tabela ASCII do caracter Caso o break no seja usado o switch continua avaliando as prximas condies .
/** * Titulo: variaveis.java * Descrio: ilustra uso do switch * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ class caso { public static void main ( String args[] ) { int mes = 8; String NomeMes; switch ( mes ) { case 1: NomeMes case 2: NomeMes case 3: NomeMes case 4: NomeMes case 5: NomeMes case 6: NomeMes case 7: NomeMes case 8: NomeMes case 9: NomeMes case 10: NomeMes case 11: NomeMes case 12: NomeMes case 32: NomeMes }
= = = = = = = = = = = = =
"Janeiro"; break; "Fevereiro"; break; "Maro"; break; "Abril"; break; "Maio"; break; "Junho"; break; "Julho"; break; "Agosto"; break; "Setembro"; break; "Outubro"; break; "Novembro"; break; "Dezembro"; break; "Espao"; break;
System.out.println( "Mes " + mes + " = " + NomeMes ); char letra = 'B'; String msg ; switch { case case case } ( letra ) 'A': msg = "a letra A"; break; 'B': msg = "b a segunda"; break; 'C': msg = "c o comeo de comeo"; break;
System.out.println( msg ); } }
caso.java
Pgina 20
/** * Titulo: variaveis.java * Descrio: ilustra uso da classe String * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ class texto { public static void main ( String args[] ) { String nome1 = "Joo"; String nome2 = "Joo"; String nome3 = new String( "Joo" ) ; if ( nome1 == nome2 ) System.out.println( "nome1 igual nome2" ); else System.out.println( "nome1 diferente nome2" ); if ( nome1 == nome3 ) System.out.println( "nome1 igual nome3" ); else System.out.println( "nome1 diferente nome3" ); if ( nome1.equals( nome2 ) ) System.out.println( "nome1 equals nome2" ); if ( "Joo".equals( nome2 ) ) System.out.println( "Joo equals nome2" ); if ( "Joo" == nome2 ) System.out.println( "Joo == nome2" ); System.out.println( "comprimento " + "Joo".length() ); System.out.println( "substr(0,2) = " + "Joo".substring(0,2) ); System.out.println( "substr(0,2) = " + nome3.substring(0,2) );
texto.java A Converso de outros tipos de dados para String pode ser realizada usando o mtodo toString() que herdado por todas as classes da superclasse Object, ou usando o mtodo valueOf da classe String.
System.out.println( String.valueOf( Math.PI ).substring(0,7) ); System.out.println( new Float( 15.43384786F ).toString().substring(0,4) );
/** * Titulo: variaveis.java * Descrio: ilustra uso daa conversao de tipos numericos * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ class numeros { public static void main ( String args[] ) { int numeroi = Integer.parseInt("45"); float numerof = Float.parseFloat("45.23F"); double numerod = Double.parseDouble("50.23F"); Float oFloat = new Float( numerof ); Integer oInteger = new Integer( numeroi ); numeroi = (int) numerof; System.out.println( "float para int = " + numeroi ); numeroi = oFloat.intValue(); System.out.println( "Float para int = " + numeroi ); numeroi = (int) numerod; System.out.println( "double para int = " + numeroi ); numerof = (float) numeroi; System.out.println( "int para float = " + numerof );
Pgina 22
numeros.java
Para gerar nmeros formatados use a classe NumberFormat, e o mtodo setMinimumFractionDigits(), por exemplo que determina o nmero minimo de casas decimais a serem exibidas veja o exemplo abaixo do uso da classe NumberFormat
/** * Titulo: FormatoNumerico.java * Descrio: ilustra uso da formatao de nmeros * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ class FormatoNumerico { public static void main ( String args[] ){ double numero = 10.456789; java.text.NumberFormat nf = java.text.NumberFormat.getInstance(); nf.setMinimumFractionDigits(2); nf.setMinimumIntegerDigits(2); System.out.println( "Pi " + nf.format( Math.PI ) ); System.out.println( "10.456789 " + nf.format( numero ) ); nf.setMinimumFractionDigits(5); System.out.println( "Pi (5) " + nf.format( Math.PI ) ); } }
FormatoNumerico.java
Vetores
Merece destaque o fato de que o primeiro elemento de um array em Java o zero. A declarao de vetores realizada com o uso de colchetes "[ ]". A declarao consiste em adicionar na declarao da varivel os colchetes, podendo ser antes ou depois do nome da varivel.
int [] vetorInteiros; int NovovetorInteiros [];
O vetor em java possui um tamanho definido, a definio deste tamanho realizada na inicializao do vetor. Esta pode ocorrer no momento da declarao ou posteriormente. Podemos usar o formato onde informamos o tipo de dados e o tamanho entre colchetes, ou informamos os valores dos elementos do vetor entre chaves, e separados por vrgulas. A quantidade de elementos do vetor ser definida pela quantidade de elementos informados entre chaves, veja nos exemplos abaixo:
Pgina 24
Nota: Observar que a inicializao de vetores usando os valores entre chaves somente pode ser usado na declarao do vetor Vetores de objetos, possuem particularidade, alm de definir os elementos e informar o tamanho do vetor, necessrio instanciar cada objeto nas respectivas posies do vetor, pois ao definir o tamanho do mesmo, somente reservamos espao na memria para comportar os objetos. Vetores multidimensionais so declarados usando mais de um par de colchetes, podendo no momento de instanciar o objeto vetor, informar o tamanho das diversas dimenses. Ou informar uma e as subdimenses informar posteriormente. Para inicializar com valores os elementos de um vetor multidimensional, basta a cada elemento dentro das chaves colocar outros elementos dentro de chaves. O exemplo abaixo mostra diversos usos de vetores, inclusive ressalta o fato que a main recebe as lista de parmetros da execuo em um vetor de Strings, e que o tamanho de um vetor pode ser obtido atravs do atributo length.
/** * Titulo: vetores.java * Descrio: ilustra uso daa conversao de tipos numericos * @author Hamilton Lima Jr athanazio@pobox.com * @version 0.0 * */ import java.text.*; class vetores { public static void main ( String args [] ) { // recebe parametros da linha de comando // em args Float parametros [] = new Float [ args.length ]; for ( int n = 0 ; n < args.length; n ++ ) { parametros[ n ] = new Float( args[n] ); } int vetorInteiros [] ; int NovovetorInteiros [] = { 1, 3, 4 }; // trs elementos; vetorInteiros = new int[10]; System.out.println( vetorInteiros [1] ); System.out.println( NovovetorInteiros [1] ); // este new somente declara um VETOR de Float no um objeto Float Float [] valores = new Float[4];
= = = =
System.out.println( "tamanho = " + valores.length ); NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits( 2 ); nf.setMinimumFractionDigits( 2 ); for ( int n = 0; n < valores.length ; n ++ ) { System.out.println( "valor + 70% = " + (valores[n].floatValue() * 1.7) ); float valorf = valores[n].floatValue() * 1.7F; System.out.println( "valor + 70% = " + nf.format(valorf) );
};
for( int n = 0; n < nomes.length; n ++ ){ for( int m = 0; m < nomes[n].length; m ++ ){ System.out.println( "nomes[" + n + "][" + m + "] = " + nomes[n][m] ); } } } }
vetores.java
Chateado com a limitao de arrays possuirem tamanho fixo ? use a classe java.util.Vector, e seja feliz
Pgina 26
Lista de exerccios
1. Receba 3 nmeros como parmetro, exiba o maior o menor e o do meio 2. Receba uma frase como parmetro (a frase deve ser digitada entre aspas) e informe o nmero de palavras que a frase contm. 3. Declare um vetor contendo 10 Strings, realize a inverso deste vetor - colocando o elemento 10 como 1, o 9 como 2 e assim por diante, e aps isto exiba o contedo do vetor invertido 4. Receba uma lista de nmeros como parmetro, aps isto exiba a mdia dos nmeros recebidos - independente da quantidade de nmeros 5. Exiba na tela a tabela ASCII, exibindo o nmero do caracter e o seu respectivo caracter - exibir de 1 a 255 6. Crie um vetor multidimensional de objetos, que possua duas dimenses, na primeira adicione um vetor de strings com os nomes dos funcionrios, na segunda um vetor de Float com os salrios dos funcionrios Receba como parmetro o percentual de aumento salarial a ser aplicado para cada funcionrio, aps isto exiba na tela os nomes dos funcionrios acompanhado do salrio atualizado pelo ndice recebido 7. Crie uma calculadora que funcione atravs da linha de comando, esta calculadora deve receber comandos aritmticos semelhantes a linguagem cobol, aps receber cada comando deve realizar o clculo e exibir o resultado MULTIPLY A BY B DIVIDE A BY B ADD A TO B SUBTRACT A FROM B 8. Receba um nome como parmetro e indique quantas vogais e quantas consoantes contm o nome, e a vogal que mais ocorreu 9. Crie uma calculadora de minutos que receba a hora inicial a a hora final e exiba a quantidade de minutos entre os dois horrios - receba os parmetros no seguinte formato HH:MM HH:MM, onde HH significa hora e MM os minutos 10. Receba o nmero do ms e o ano, e aps isto exiba o calendrio para o ms e ano solicitado no seguinte formato:
c:\>java calendario 08 2001 Agosto 2001 Dom Seg Ter Qua 1 5 6 7 8 12 13 14 15 19 20 21 22 26 27 28 29 c:\> Qui 2 9 16 23 30 Sex 3 10 17 24 31 Sab 4 11 18 25
Use a classe GregorianCalendar, mas cuidado com a representao de meses, pois nesta classe comea com ZERO !
Pgina 28
CONCEITOS DE O R I E N TA O A OBJETOS
Conceitos Novas palavras, velhas idias
Quando falamos sobre Orientao a Objetos ( OO ), pensamos logo em algo complexo Obscuro, e as vezes beirando o mgico - os que conhecem esta tecnologia acabam se assemelhando a magos ... Mas na verdade a idia no nova, muito menos original, somente um aperfeicoamento natural da idia de "Reaproveitamento de cdigo", da idia de "Escreva uma vez, e s uma mesmo". Reaproveitamento de cdigo um desafio antigo. Crivamos bibliotecas de cdigo, modelos de trabalho, "receitas de bolo", entre outras coisas. At que funcionava, porm s vezes no. O conceito mais importante em OO, entender que se trata de uma metodologia. Se desejamos colher seus frutos, devemos planejar mais do que j fazemos, porque seno, a nica mudana que teremos uma nova e trabalhosa sintaxe - que no nos oferece muito.
Atributos
A estas caractersticas que mudam de indivduo para indivduo, chamamos "Atributos". So as informaes que o plano de um objeto - uma classe possui, determinando que informaoes o objeto necessitar para determinar seu comportamento e relacionamento com outros objetos.
Mtodos
O comportamento de um objeto, est na definio de seus "Mtodos" que so na verdade onde residem a programao de fato - onde as estruturas de controle aparecem. So blocos de cdigo, que utilizam os atributos do objeto para realizarem seus objetivos, e s vezes recebem informaes do mundo externo - parmetros -
quando os atributos da classe no so suficientes para a realizao de suas atividades. Considerando a classe seuhumano e o mtodo informarIidade(), consideramos os seguintes fatos: No preciso informar a voc a data do seu nascimento para que voc me diga sua idade ! Esta informao - a data de nascimento - j um atributo seu. Porm se pergunto se vc poderia me emprestar algum dinheiro, preciso passar como parmetro para este mtodo o valor desejado, para que a resposta possa acontecer corretamente.
Encapsulamento
Um conceito vital de OO, o "Encapsulamento" . Ele determina que os atributos de uma classe devem ser privativos dela, garantindo assim a confiabilidade das informaes registradas ali. Para tal so necessrios mtodos de leitura e de gravao para os atributos que precisam ser acessados por outros objetos.
Herana
Coroando OO, vem o conceito de "Herana" que determina que classes podem herdar caractersticas de outras, permitindo que comportamentos que j esto definidos em uma classe no precisem ser redefinidos em outras classes, basta criar entre elas um relacionamento de herana, para as chamadas subclasses - isto no as torna menos importantes, somente determina o sentido da herana - utilizarem as definies realizadas nas chamadas superclasses .
Diagrama de classes
Figura 2-1. Uma Classe
A representao de uma classe feita atravs de um retngulo dividido em trs partes horizontais
Lista de mtodos
Para cada um dos itens da classe podemos informar a sua "Visibilidade" que indica como o atributo ou mtodo da classe ser acessado por outras classes
(-) Privativo - representado por um hfen antes do nome do item, e somente a prpria classe tem acesso (+) Publico - representado por um + antes do nome do item, e todas classes tem acesso (#) Protegido - representado por um # antes do nome do item, e todas subclasses tem acesso
Associao
Figura 2-2. Associaes
As associaes entre as classes so representadas por linhas que interligam os retngulos das classes, Alm da linha que estabelece o relacionamento ainda temos a informao da "cardinalidade" que informa as quatidades possveis para o relacionamento, e por fim o nome do relacionamento que fica escrito prximo da linha Podemos ter dois nveis de leitura para um diagrama de classes, a leitura objetiva e a subjetiva Leitura objetiva
um Animal se alimenta de uma ou vrias Dietas uma Dieta pode alimentar vrios Animais ou nenhum Nem toda dieta serve a um Animal Podemos informar Dietas antes mesmo que um animal v se alimentar dela Nem toda dieta serve a um Animal Podemos informar Dietas antes mesmo que um animal v se alimentar dela Sempre que informar-mos um animal sua dieta deve ser informada antes
Herana
A herana em um diagrama de classes representada atravs de uma linha que une as duas classes, a superclasse indicada por um tringulo que exibido prximo da referida classe conforme vemos no exemplo abaixo, Onde as classes Passaro e Peixe so subclasses de Animal, e Animal superclasse de de Passaro e Peixe Figura 2-3. Herana
Ilustrao 4herana
Pgina 32
U S A N D O J AVA
Classes e objetos
Ao criar uma instncia de uma classe, criamos um objeto para usarmos os mtodos definidos na classe, o exemplo a seguir demonstra isto Exemplo 2-1. Instanciando classes
public class MeuObjeto { private String nome; public MeuObjeto( String nome ) { this.nome = nome; } public String getNomeSeparado() { String retorno = ""; for (int i = 0; i < nome.length(); i++) { retorno += nome.charAt(i) + " "; } } } return retorno;
MeuObjeto.java
public class AppObjeto { public static void main(String[] args) { MeuObjeto o = new MeuObjeto("Jos"); MeuObjeto lista[] = { new MeuObjeto("Ana"), new MeuObjeto("Joo"), new MeuObjeto("Maria") }; for (int i = 0; i < lista.length; i++) { System.out.println( lista[i].getNomeSeparado() ); } }
AppObjeto.java
auto referncia da classe, para fazer referncia a instncia atual da classe, usamos a palavra reservada "this" que permite por exemplo em um mtodo receber um parmetro com o mesmo nome de uma atributo, e ser realizada a referncia ao atributo usando :
public class Exemplo { private String nome; public MeuObjeto( String nome ) { this.nome = nome; } }
todos os atributos possuem escopo dentro do bloco onde foi declarado, se declarado na classe possuir escopo da classe, se declarado dentro de um "for" somente estar visvel dentro do bloco do "for"
Sobrecarga
por vezes desejamos usar um mtodo com o mesmo nome porm com parmetros diferentes na sua chamada, a isto chamamos sobrecarga de mtodos, para realizar, basta declarar os mtodos com o mesmo nome e parmetros diferentes. No momento da chamada ao mtodo basta passar os parmetros no tipo e quantidade definidos em uma das declaraes de mtodos Dica: A sobrecarga tambm pode ser utilizada para construtores realizando assim a sobrecarga de construtores
Controle de acesso
a visibilidade determina como ser o relacionamento da classe com os outras classes, observar que estes qualificadores podem ser usados para qualquer elemento, seja uma classe, um mtodo ou um atributo
private - somente a prpria classe tem acesso public - todas classes tem acesso protected - somente as subclasses tem acesso
Constantes
Para definir valores constantes, basta adicionar a palavra reservada "final" aps a definio da visibilidade e
Pgina 34
antes do tipo de dado do atributo ou do mtodo Tabela 2-2. Descrio do uso do final Elemento Atributo Mtodo Classe Descrio impede que o valor atribuido na declarao seja alterado, usualmente so declarados com nome todo em maisculas no permite que subclasses sobreescrevam o mtodo, garantindo para toda a hierarquia de classes uma determinada forma de implementao no permite que hajam subclasses desta classe, impedindo desta forma que a herana ocorra
Elementos classe
por vezes desejamos usar mtodos ou ainda atributos de classes sem ter que realizar um instncia, isto promovido atravs do uso da palavra reservada "static" que define atributos e mtodos classe, usando o exemplo abaixo para acessar o valor do indice bastaria usar "Salario.INDICE"
public class Salario { private float Salario = 0; public static final float INDICE = 3.56F; public static float Calculo( float Salario ) { return Salario * INDICE; } Salario( float Salario ) { this.Salario = Salario; } Salario( String Salario ) { this.Salario = Float.parseFloat( Salario ); } }
Salario.java
Lista de exerccios
1. Receba uma lista de nomes como parmetro da linha de comando. para cada nome recebido instanciar um objeto da classe pessoa em um vetor de objetos. A classe pessoa deve possuir um atributo idade que calculado de acordo com o comprimento do nome vezes 10. O nome da pessoa informado atravs do construtor da classe pessoa, aps instnciar todos os objetos Pessoa, percorrer a lista de objetos de maneira a exibir o nome da pessoa mais velha da lista
Crie as classes descritas no diagrama acima e uma aplicao para usar a classe salrio de acordo com os requisitos abaixo descritos A classe Salario possuir um "Vector" de objetos "Verba", sendo que os objetos sero na verdade instncias das subclasses de verba, que estaro descrevendo dados necessrios para o clculo do salrio Cada subclasse de verba dever atribuir a superclasse, em seu construtor os atributos : Descricao, quantidade e valor. E dever receber em seu construtor a quantidade Observar que a classe Descontos, deve atribuir o valor negativo para a superclasse verba de maneira que os valortotal dos objetos referentes a desconto sejam negativo Verba.Valor = valor unitrio da verba em questo verba.valortotal() = retorna valor * quantidade salario.valortotal() = retorna a soma do valortotal de cada verba do Vector de verbas Em uma classe de aplicao crie um objeto do tipo Salario e execute o metodo AdicionarVerba que deve receber como parmetro objetos do tipo verba ( horas normais, horas extras, descontos ). Exibir aps isto o mtodo valortotal() da classe Salario, para exibir o valor do salrio a ser pago
Pgina 36
O R I E N TA O A OBJETOS
Herana
para permitir que as subclasses recebam os mtodos e atributos declarados na superclasse precisamos usar a palavra reservada "extends" que determina que a subclasse possui esta relao com a superclasse Exemplo 3-1. criando subclasses
public class mae { private String nome = ""; public void metodo( String n ) { setNome( "mae " + n + "\n" ); } public void setNome( String nome) { this.nome = this.nome + nome; } public String getNome() { return nome; } }
mae.java
public class filha extends mae { public void metodo( String n ) { super.metodo( n ); setNome( "filha " + n + "\n" ); } }
filha.java
Anulao
quando declaramos um mtodo na subclasse com a mesma assinatura da superclasse estamos realizando a anulao ou "override", isto determina que na subclasse ao executarmos o mtodo em questo estaremos usando o declarado na classe filha Dica: no confundir "override" com "overload" que a sobrecarga, pois a anulao oculta o mtodo da classe me, enquanto que a sobrecarga oferece mais uma alternativa de uso do mesmo mtodo por vezes precisamos no mtodo que est anulando o mtodo da classe me, usar a implementao da classe me, para isto chamamos o mtodo usando a palavra "super" seguido de um ponto e do nome do mtodo que desejamos chamar
permitido com necessidade de molde de tipo, e todas as chamadas a metodos da subclasse tambm so permitidos, pois a varivel v, possui na verdade uma instncia de Subclasse Dica: para verificar o tipo de um objeto pode ser usado o operador "instanceof"
Pgina 38
heranca.java
Ilustrao 6verbas
Pgina 40
public String getDescricao() { return Descricao; } public int getQuantidade() { return Quantidade; } public float getValor() { return Valor; } public float ValorTotal() { return Valor * Quantidade; } public void setDescricao( String Descricao ){ this.Descricao = Descricao; } public void setQuantidade( int Quantidade ){ this.Quantidade = Quantidade; } public void setValor( float Valor ){ this.Valor = Valor; } }
Verba.java
Interfaces
interfaces so muito semelhantes a classes abstratas, porm com algumas diferenas essenciais que determinam a necessidade da linguagem possuir dois recursos interfaces permitem definir assinaturas de mtodos ( implicitamente so public e abstract ) que devero ser implementados nas classes que implementam as interfaces, alm disto permitem criar atributos que implicitamente so: public, static, e final Exemplo 3-4. Uso de interface
interface Isql { String sql(); }
neta.java
interface InterfaceHtml { String html(); }
Isql.java
public class neta extends filha implements Isql, InterfaceHtml { public void metodo( String n ) { super.metodo( n ); setNome( "filha " + n + "\n" ); } public String sql(){ return "" + getNome() + ""; } public String html(){ return "<b>" + getNome() + "</b>"; } }
InterfaceHtml.java Tabela 3-2. Comparao classe abstrata e interface Recurso Classe abstrata permite definir mtodos abstratos (sem implementao) sim permite mesclar mtodos abstratos e comuns sim permite herana mltipla no Dica: Interfaces so timos lugares para guardar valores contantes Interface sim no sim
Pgina 42
ORGANIZAO DA CASA
criao de pacotes
pacotes so criados para agrupar as classes de forma organizada e promover (se necessrio) o compartilhamento de atributos e/ou mtodos entre as classes do mesmo pacote, porm mantendo estes elementos fora do alcance das classes de fora do pacote para identificar a que pacote uma classe pertence, basta que na primeira linha do arquivo seja adicionada a palavra reservada "package" seguida do nome do pacote o nome do pacote pode ser formado por vrias partes, separadas por pontos, comum as empresas colocarem como nome dos pacotes com o nome de domnio invertido, seguido do nome de fato do pacote, como : org.athanazio.sgml observar que um pacote como o citado acima dever possuir seus arquivos em um diretorio org\athanazio\sgml e no momento da compilao os arquivos devem estar dentro deste diretrio para usar classes e/ou interfaces que esto dentro de um pacote precisamos importar estes elementos. Para tal usamos a palavra chave "import" seguida do caminho completo do pacote, mais o nome do elemento que deseja importar, ou um asterisco representando que deseja importar todas as classes que esto naquele pacote Dica: O COMANDO IMPORT NO RECURSIVO Exemplo 3-5. usando pacotes
package org.athanazio.sgml; interface entidadeSgml { public String sgml( String texto ); }
entidadeSgml.java
package org.athanazio.sgml; public class para implements entidadeSgml { public String sgml( String texto ) { return "<para>" + texto + "</para>"; } }
para.java
import org.athanazio.sgml.*; public class Testesgml { public static void main( String arg [] ){ para p = new para(); System.out.println( p.sgml( "Java Rockz!" ) ); } }
Testesgml.java
Pgina 44
T R ATA N D O ERROS
Tratamento de erros
A gerao de erros no Java gera objetos de classe de erro, o tratamento dos mesmos passa pela manipulao destes objetos de erro O tratamento de erros em Java baseado nas palavras reservadas "try ... catch ... finally", para executar um bloco de cdigo protegido por um tratamento de erros, basta colocar o mesmo em um bloco aps a palavra "try", e para cada erro que desejamos tratar devemos colocar uma clusula "catch ( TipoErro variavel-erro ) {}" ou uma clusula "finally" que executada aps a execuo do bloco "try" quando um mtodo indica que pode gerar um determinado erro atravs da clusula "throws" ao ser chamado este mtodo dever estar dentro de um bloco de "try" A figura abaixo mostra a hierarquia de classes envolvidas no tratamento de erros Figura 4-1. Classes para Erros
para criar erros personalizados os mesmos devem ser subclasses de Exception, de maneira que ao declarar os mtodos que podem gerar os erros personalizados deve ser citado o erro que pode ser gerado com a clusula "throws", observar que erros da classe "Error" ocorrem quando erros da Java Virtual Machine ocorrem de maneira que os mesmos no podem ser tratados Os erros da classe "RunTimeException" possuem uma particularidade : quando so citados numa clusula "throws" no obrigatrio que a execuo ocorra num bloco de "try", isto porque se tratam de erros como acesso a um objeto no instnciado, acesso a elementos de vetor que no existem
TesteException.java
Pgina 46
BANCO DE DADOS
JDBC Conceitos
"Java Database Conectivity", ou uma maneira muito simptica de construir uma camada de acesso a banco de dados independente de plataforma Como um dos objetivos da linguagem Java, escrever uma vez e executar em qualquer lugar, nada mais justo que proporcionar este tipo de alternativa para acesso a banco de dados. O desafio seria possuir drivers de acesso a banco de dados que no dependessem de recursos espcficos de plataforma, ou da biblioteca XYZ do fabricante do banco de dados para realizar o acesso. Sendo assim surgiram os drivers JDBC escritos em Java, nem todos os drivers JDBC so totalmente independentes de bibliotecas do fabricante do banco de dados, mas o ideal sempre adotar os drivers que so escritos totalmente em Java, reduzindo assim a dependencia externa.
Usando JDBC
etapa O que fazer
1. obter o driver JDBC para Acesse http://www.mysql.com/products/connector-j/index.html e procure pela acesso ao Mysql ultima verso estavel do driver 2. obter o banco de dados Mysql Realize o download da ultima verso estavel em www.mysql.com
3. instalar o banco de dados Caso o instalador esteja compactado, descompacte, procure por um arquivo Mysql chamado setup.exe, execute o mesmo, aceite os padro oferecidos ( observar que especialmente o diretrio de instalao no deve ser mudado, pois se realizar esta mudana ser necessrio configurar o banco para funcionar em outro diretorio ) 4. fazendo o banco de dados Procure no diretrio onde o banco de dados foi instalado (Ex. C:\mysql ) pelo funcionar diretrio bin, execute o programa mysqld este programa ir iniciar o banco de dados e permitir acesso ao mesmo (ateno execute somente uma vez)
etapa
O que fazer
5. como verificar se o banco O banco de dados estar ouvindo na porta 3306 por padro portanto, para de dados Mysql est verificar se esta porta estaberta, execute no prompt do MS-Dos : netstat -an e pronto ? procure pela porta 3306, veja o exemplo abaixo
0.0.0.0:0
LISTENING
indica que o computador est esperando conexes TCP/IP na porta 3306, ou seja muito provevel que o programa que est esperando tais conexes seja o banco de dados Mysql para confirmar que de fato o banco de dados Mysql que est esperando na porta 3306, execute o seguinte comando: c:\mysql\bin\mysql.exe (substitua c:\mysql\bin pelo diretrio onde foi instalado o mysql em sua maquina) voc ver uma tela semehante a esta
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: 3.23.46-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
Pgina 48
O que fazer Para executar nosso exemplo, precisamos criar uma tabela no banco de dados, e para isto iremos executar um script de banco dados que nada mais que um arquivo texto com diversos comandos para o banco de dados. Noss script ir executar as seguintes tarefas : a. criao do banco de dados java b. criacao do usuario teste com senha 123 c. criao da tabela cliente d. insero de dados na tabela cliente para criar o script basta colar o contedo abaixo em um arquivo texto e salvar no diretrio c:\mysql\bin
create database java; use mysql; delete from user where user = "teste"; nsert into user ( User, Password , Host ) values ("teste", password("123"), "localhost" ); insert into user ( User, Password , Host ) values ("teste", password("123"), "%" ); flush privileges; grant all on java.* to teste; flush privileges; use java; create table cliente ( id int auto_increment not null primary key, nome varchar(30) ); nsert into cliente ( nome ) values ('joao'); insert into cliente ( nome ) values ('jose'); insert into cliente ( nome ) values ('pedro');
aps criar o arquivo com o nome de banco.sql por exemplo para executa-lo basta o seguinte comando: c:\mysql\bin\mysql < c:\mysql\bin\banco.sql 7. configurando o uso do driver a. crie um diretorio c:\mysql\jdbc b. copie o arquivo .JAR do driver JDBC para o diretorio c. altere a variavel de ambiente CLASSPATH para o seguinte : CLASSPATH=.;c:\mysql\jdbc\nome-do-arquivo-jar-do-jdbc caso o conteudo de CLASSPATH ja possua algo altere para o seguinte : CLASSPATH=%CLASSPATH%;.;;c:\mysql\jdbc\nome-do-arquivo-jar-do-jdbc substitua nome-do-arquivo-jar-do-jdbc pelo nome do arquivo jar do driver jdbc :o)
import java.sql.*; public class LerBanco { static Connection conexao = null; static ResultSet resultado = null; static Statement instrucao = null; static String caminho = "jdbc:mysql://127.0.0.1:3306/java?user=teste&password=123"; public static void main ( String arg[] ) throws Exception { try { System.out.println( "1. nova instancia" ); Class.forName("org.gjt.mm.mysql.Driver").newInstance(); System.out.println( "2. conexao" ); conexao = DriverManager.getConnection( caminho ); instrucao = conexao.createStatement(); System.out.println( "3. executa query" ); resultado = instrucao.executeQuery( "SELECT * FROM cliente ORDER BY nome"); String nome; while ( resultado.next() ) { nome = resultado.getString("nome"); System.out.println( nome ); } } catch (SQLException E) { System.out.println("---------------------------------" ); System.out.println("Erro ao acessar o banco de dados"); System.out.println("SQLException: " + E.getMessage()); System.out.println("SQLState: " + E.getSQLState()); System.out.println("VendorError: " + E.getErrorCode()); System.out.println("---------------------------------" ); E.printStackTrace(); } // try-catch if ( resultado != null) { resultado.close(); } if ( instrucao != null) { instrucao.close(); } if ( conexao != null) { conexao.close(); } } // main } // classe
LerBanco.java
Pgina 50
import java.sql.*; public class IncluirBanco { static Connection conexao = null; static ResultSet resultado = null; static Statement instrucao = null; static String caminho = "jdbc:mysql://127.0.0.1:3306/java?user=teste&password=123"; public static void main ( String arg[] ) throws Exception { if (arg.length < 1) { System.out.println( "Uso incorreto \n" + "devem ser informados ao menos um nome para inclusao no \n" + "banco de dados" ); return; } try { System.out.println( "1. nova instancia" ); Class.forName("org.gjt.mm.mysql.Driver").newInstance(); System.out.println( "2. conexao" ); conexao = DriverManager.getConnection( caminho ); instrucao = conexao.createStatement(); System.out.println( "3. executa query" ); instrucao.executeUpdate( "INSERT INTO cliente ( nome ) VALUES ('" + arg[0] + "')"); } catch (SQLException E) { System.out.println("---------------------------------" ); System.out.println("Erro ao acessar o banco de dados"); System.out.println("SQLException: " + E.getMessage()); System.out.println("SQLState: " + E.getSQLState()); System.out.println("VendorError: " + E.getErrorCode()); System.out.println("---------------------------------" ); E.printStackTrace(); } // try-catch if ( instrucao != null) { instrucao.close(); } if ( conexao != null) { conexao.close(); } } // main } // classe
IncluirBanco.java
I N T E R FA C E S COM USURIO U S A N D O AW T
Pgina 52
Descrio da AWT
Abstract Window Toolkit, permite a gerao de interfaces grficas convencionais usando a linguagem java, entenda convencional como interface que possue janelas, botes, caixas de texto, e outros elementos grficos. A AWT, faz uso das API2 de desenho de interface de cada sistema operacional, logo um interface construda com AWT vai seguir a identidade visual do ambiente em que estiver sendo executada. O pacote de classe java.awt oferece diversas classes para a composio das interfaces, sendo que todas elas sero filhas das classes Component ou MenuComponent. O diagrama abaixo mostra as principais classes do pacote AWT (os gerentes de contedo no esto includos)
2 Application Program Interface conjunto de chamadas oferecidas ao programador, permitindo ao mesmo utilizar recursos sem precisar conhecer o seu funcionamento, ou seja partes de funcionamento interno de um sistema operacional ou programa que so disponibilizados para uso externo
Frame jabela com ttulo e bordas que permitem redimensionamento, e permite adicionar componente MenuBar Dialog janela simples, no redimensionvel, que no pode conter um MenuBar Panel rea retangular onde podem ser adicionados componentes visuais, observar que deve ser usando dentro de uma Window, ou na janela de um browser
Components
os componentes visuais so a essncia das interfaces, pois atravs dos mesmos que a interao com o usurios acontece, cada componente visual serve a propsitos especficos, como por exemplo um caixa de texto, normalmente usada para o usurio inserir um texto atravs do teclado, usar uma caixa de texto para que o usurio clique com o mouse para selecionar algo parece no mnimo uma interface esfinge3. Veja algumas das classes que pacote awt oferece como componentes visuais:
Button - boto CheckBox caixa de seleo permitindo assinalar sim ou no Choice caixa suspensa TextArea rea de texto com vrias linhas Label texto a ser exibido List lista de seleo TextField rea de texto com somente uma linha
3 Diz a lenda que a terrvel esfinge, criatura alada que misturava o corpo de mulher ao de leo, se postava na entrada da cidade de Tebas e propunha um enigma aos moradores. Decifra-me ou te devoro. Quem no soubesse a resposta era aniquilado. O monstro se apresentou com essa mesma ordem a dipo, o mitolgico heri grego, que acertou a adivinhao e despachou o bicho para sempre. http://www.terra.com.br/istoe/1704/ciencia/1704_palavras_dos_deuses.htm Pgina 54
Gerentes de layout
A posio e tamanho dos componentes adicionados aos containers depende dos gerentes de contedo. O container quando precisa exibir seus componentes, usa o gerente de layout que possuir atualmente para organizar os componentes visuais. Sendo assim problemas como resoluo de vdeo e diferenas de vdeo entre plataformas no precisaro entrar na lista de preocupaes de sua interface visto que o posicionamento ser realizado pelos gerentes de layout mesmo sabendo das facilidades oferecidas pelos gerentes de layout, se desejar que o container no use um gerente de layout deve alterar o mesmo para null
containerFulano.setLayout(null);
definindo o gerente de layout como null ser necessrio usar os mtodos setLocation(), setSize() ou o setBounds() para definir posicionamento e tamanho dos componentes visuais.
Caso deseje gerenciar o layout sem usar os gerentes de leyout existentes a melhor prtica criar uma classe extenda as funcionalidades da classe LayoutManager, construindo assim seu prprio gerente de layout.
import java.awt.*; public class FrameExemplo { private Frame f; public FrameExemplo(){ f = new Frame("Titulo da janela"); } public void exibir(){ f.setSize(200,100); f.setBackground( Color.blue ); f.setVisible(true); } public static void main( String args[]){ FrameExemplo janela = new FrameExemplo(); janela.exibir(); }
FrameExemplo.java
Pgina 56
o exemplo abaixo adiciona um painel ao frame e remove o gerenciador de leyout mantendo o painel na posio inicial do frame
import java.awt.*; public class FrameComPainel { private Frame f; private Panel p; public FrameComPainel(String titulo){ f = new Frame( titulo ); p = new Panel(); } public void exibir(){ f.setSize(200,100); f.setBackground( Color.blue ); f.setLayout(null); p.setSize(100,50); p.setBackground(Color.yellow); f.add(p); f.setVisible(true);
public static void main( String args[]){ FrameComPainel janela = new FrameComPainel("com painel"); janela.exibir(); }
FrameComPainel.java
Gerentes de layout
Iremos abrodar os seguintes gerentes contedo:
FlowLayout permite que cada componente seja colocado um ao lado do outro enquanto houver espao BorderLayout divide o container em 5 regies GridLayout separa o container em linhas e colunas
Cada Container possui um gerente de loyout padro de acordo com a lista abaixo :
FlowLayout gerente de layout padro de : Panel BorderLayout gerente de layout padro de Window, Dialog e Frame
FlowLayout
O exemplo de cdigo abaixo ilustra a alterao de gerente de layout em um Frame:
import java.awt.*; public class ExemploLayout { private Frame f; private Button b1; private Button b2; public ExemploLayout(String titulo){ f = new Frame( titulo ); b1 = new Button("me toque"); b2 = new Button("NO ME TOQUE"); } public void exibir(){ f.setLayout( new FlowLayout() ); f.add(b1); f.add(b2); f.pack(); } f.setVisible(true);
public static void main( String args[]){ ExemploLayout janela = new ExemploLayout("toques"); janela.exibir(); } }
ExemploLayout.java
Pgina 58
O cdigo ExemploLayout gera janela conforme as imagens acima, observe que a janela da direita foi redimensionada e os botes foram reposiionados pois o gerente de Layout FlowLayout realiza esta tarefa automaticamente. Observar que o mtodo pack() foi chamado, este mtodo faz com os valores iniciais de tamanho do Frame, zero de altura e zero de largura, sejam alterados para permitir a visualizao dos componentes que foram acicionados a ele, sem deixar desperdcio de tela. Observar que o FlowLayout possui 3 construtores diferentes :
// alinhamento a direita, espao horizontal 15 e vertical 30 setLayout( new FlowLayout( FlowLayout.RIGHT, 15, 30 ) ); // alinhamento a esquerda setLayout( new FlowLayout( FlowLayout.LEFT) );
Consulte o javadoc em java.awt na classe FlowLayout para conhecer todos alinhamentos existentes (CENTER, LEADING, LEFT, RIGHT, TRAILING) observar que todos estes valores so atributos classe e inteiros.
BorderLayout
Este gerente de layout divide a tela em 5 regies:
BorderLayout.NORTH BorderLayout.WEST BorderLayout.EAST
BorderLayout.CENTER
BorderLayout.SOUTH
Para usar um BorderLayout basta utilizar um dos seus construtores: BorderLayout() BorderLayout( espao horizontal, espao vertical ) para adicionar elementos a um container que possua o gerente de layout como o BorderLayout devemos usar o mtodo add() porm alm do objeto devemos informar em que regio do BorderLayout desejamos adicionar o elemento, conforme as opes : BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.CENTER, orderLayout.WEST e BorderLayout.EAST. o cdigo abaixo adiciona um boto em um container Painel que pode ser adicionado a outro container para ser visualizado
Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add(new Button("Teste"), BorderLayout.SOUTH);
Ao adicionarmos mais de um componente em uma mesma regio de um BorderLayout somente o ltimo adicionado ficar visvel, contudo existem telas em que desejamos mais de um componente em uma determinada regio, para isto uma soluo seria criar um Panel com FlowLayout adicionar os componentes nele e adicionar o painel na regio do BorderLayout
Pgina 60
O Exemplo a seguir produz a primeira tela com o redimensionamento temos o segundo exemplo onde os elementos grficos so redimensionados.
import java.awt.*; public class ExemploBorder { private private private private private private Frame f; Button bn; Button bs; Button bc; Button bw; Button be;
public ExemploBorder(String titulo){ f = new Frame( titulo ); bn = new Button("NORTE"); bs = new Button("SUL"); bc = new Button("CENTRO"); bw = new Button("OESTE"); be = new Button("LESTE"); } public void exibir(){ f.setLayout( new BorderLayout() ); f.add(bn, BorderLayout.NORTH ); f.add(bs, BorderLayout.SOUTH ); f.add(bc, BorderLayout.CENTER ); f.add(bw, BorderLayout.WEST ); f.add(be, BorderLayout.EAST ); f.pack(); } f.setVisible(true);
public static void main( String args[]){ ExemploBorder janela = new ExemploBorder("regioes"); janela.exibir(); } }
ExemploBorder.java
GridLayout
este gerente de Layout permite a flexibilidade de dividir o container em linhas e colunas, e a cada chamada do mtodo add() um componente adicionado na grade construda no sentido da esquerda para a direita e de cima para baixo. So trs os construtores de GridLayout: GridLayout() - cria um layout de 1 linha por 1 coluna GridLayout( linhas, colunas ) GridLayout( linhas, colunas, espao horizontal, espao vertical ) o exemplo abaixo demonstra a criao de uma interface usando o GridLayout:
import java.awt.*; public class ExemploGrid { private Frame f; private Button b1, b2, b3, b4, b5; public ExemploGrid(String titulo){ f = new Frame( titulo ); b1 = new Button("1"); b2 = new Button("2"); b3 = new Button("3"); b4 = new Button("4"); b5 = new Button("5"); } public void exibir(){ f.setLayout( new GridLayout( 2, 3 ) ); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.pack(); f.setVisible(true);
public static void main( String args[]){ ExemploGrid janela = new ExemploGrid("botoes & cia"); janela.exibir(); } }
ExemploGrid.java
Pgina 62
import java.awt.*; public class Calculadora { private private private private Frame f; Panel botoes; Button b1, b2, b3, b4, b5, b6, b7, b8, b9, b0; TextField valor;
public Calculadora(String titulo){ f = new Frame( titulo ); b1 = new Button("1"); b2 = new b3 = new Button("3"); b4 = new b5 = new Button("5"); b6 = new b7 = new Button("7"); b8 = new b9 = new Button("9"); b0 = new botoes = new Panel(); valor = new TextField();
public void exibir(){ f.setLayout( new BorderLayout() ); botoes.setLayout( new GridLayout( 4, 3 ) ); botoes.add(b1); botoes.add(b2); botoes.add(b3); botoes.add(b4); botoes.add(b5); botoes.add(b6); botoes.add(b7); botoes.add(b8); botoes.add(b9); botoes.add( new Label("")); botoes.add(b0); f.add( valor , BorderLayout.NORTH ); f.add( botoes, BorderLayout.CENTER ); f.pack(); f.setVisible(true);
public static void main( String args[]){ Calculadora janela = new Calculadora("botoes e botoes"); janela.exibir(); } }
Calculadora.java
1. crie uma layout de calculadora que adicione os botes de operaes a serem realizadas 2. crie uma tela para incluso de dados de um cliente, onde deve ser exibido um label a esquerda de cada caixa de texto (nome e email) e na regio inferior da tela deve ser exibido um boto de ok e outro de cancelar um ao lado do outro
Pgina 64
Desenhando na tela
O compoente Canvas deve ser usado quando desejamos construir um desenho personalizado na tela, para tal basta criar uma subclasse de canvas e sobreescrever o mtodo paint. Observar que o mtodo paint recebe como parmetro um objeto Graphics que possui diversas funcionalidades de primitiva de desenho, o que permite construir qualquer elemento visual personalizado, o exemplo abaixo cria uma classe boneco que desenha um boneco palito, este novo componente usado no exemplo abaixo para desenhar uma famlia de bonecos.
import java.awt.*; public class Boneco extends Canvas{ private Rectangle dimensoes; public Boneco(){ setSize( 60, 100 ); } public void paint(Graphics g){ dimensoes = getBounds(); setBackground( Color.WHITE ); g.clearRect( dimensoes.x, dimensoes.y, dimensoes.width, dimensoes.height ); int areav = (int) (dimensoes.height / 3); int areah = (int) (dimensoes.width / 4); // desenha cabeca g.drawOval( areah, 0, 2*areah, areav ); // desenha corpo g.drawLine( 2*areah, areav, 2*areah, 2*areav ); // desenha braos g.drawLine( 2*areah, (int)(1.5*areav), 3*areah, (int)(1.5*areav) ); g.drawLine( 2*areah, (int) (1.5*areav), areah, (int)(1.5*areav) ); // desenha pernas g.drawLine( 2*areah, 2*areav, 3*areah, 3*areav ); g.drawLine( 2*areah, 2*areav, areah, 3*areav ); } }
Boneco.java
import java.awt.*; public class ExemploBoneco { private private private private Frame f; Boneco b1; Boneco b2; Boneco b3;
public ExemploBoneco(String titulo){ f = new Frame( titulo ); b1 = new Boneco(); b2 = new Boneco(); b3 = new Boneco(); } public void exibir(){ f.setLayout( new GridLayout( 0, 3 ) ); f.add(b1); f.add(b2); f.add(b3); f.pack(); f.setVisible(true);
public static void main( String args[]){ ExemploBoneco janela = new ExemploBoneco("Familia boneco"); janela.exibir(); } }
ExemploBoneco.java
1. pesquise os mtodos primitivos de desenho oferecidos pela classe Graphics 2. faa uma variao da classe boneco em que o corpo do mesmo seja uma retangulo e seja passado como parmetro no seu construtor a cor de preenchimento da cabea e do corpo
Pgina 66
Componentes visuais
A tabela abaixo vai oferecer um referncia simplificada sobre os componentes visuais oferecidos pela AWT
Componente Button Uso comum Permitir ao usurio atravs do clique do mouse indicar uma ao a ser tomada Permite ao usurio indicar se verdadeiro ou falso deve ser usado o mtodo getState() para verificar se esta marcado ou no Exemplos
b0 = new Button("0"); f.add( b0 ); f.add( new Button(boto) );
CheckBox
setLayout(new GridLayout(3, 1)); /* assinala como null o grupo de checkbox e marca como selecionado */ add(new Checkbox("one", null, true)); add(new Checkbox("two")); add(new Checkbox("three"));
para torna-los mutuamente exclusivos necessrio criar um grupo de checkbox e usar o mtodo getSelectedCheckbox() para recuperar que componente est selecionado
setLayout(new GridLayout(3, 1)); CheckboxGroup cbg = new CheckboxGroup(); add(new Checkbox("one", cbg, true)); add(new Checkbox("two", cbg, false)); add(new Checkbox("three", cbg, false));
Choice
Componente TextField
Exemplos
TextField ed1, ed2, ed3, ed4; // campo de texto vazio ed1 = new TextField(); // vazio com 20 colunas ed2 = new TextField("", 20); // texto a ser exibido predefinido ed3 = new TextField("Ola"); // texto predefinido com 30 colunas ed4 = new TextField("Ola", 30); // define que a caixa de texto ir // exibir * ao invs dos caracteres // difitados ed1.setEchoChar('*'); // recupera o valor do editor 2 String texto = ed2.getText(); // define o valor dos campos // ed3 e ed4 ed3.setText( ed4.getText() ); ed4.setText( texto );
Label
setLayout(new FlowLayout( FlowLayout.CENTER, 10, 10)); add(new Label("ol")); add(new Label("ol de novo"));
Pgina 68
Componente List
Uso comum Exibe uma lista permitindo ao usurio escolher um dos itens da lista
Exemplos
// exibir quatro elementos na tela // e no permitir multiplas selees List lst = new List(4, false); lst.add("Mercury"); lst.add("Venus"); lst.add("Earth"); lst.add("JavaSoft"); lst.add("Mars"); lst.add("Jupiter"); lst.add("Saturn"); lst.add("Uranus"); lst.add("Neptune"); lst.add("Pluto"); cnt.add(lst);
diferente do choice o component list possui um mtodo que retorna a string ou strings selecionadas atravs dos mtodos :
// retorna uma String getSelectedItem() // retorna um array de String getSelectedItems()
TextArea
// define uma rea de texto com // 5 linhas e 40 colunas new TextArea("ols", 5, 40);
Tratando Eventos
Interfaces grficas orientadas a eventos, coisa antiga, pois mesmo quando a interface era somente texto, j faziamos programas para tratar eventos do usurio. O que mudou agora a quantidade, e diversidade de eventos que precisamos tratar. Antigamente os eventos ocorriam um por vez, e eram coisas do tipo: o usurio pressionou a tecla A... Hoje temos : o usurio clicou, arrastou, clicou com o direiro, dropou pressionou Alt e clicou, passou com mouse por cima, fechou, abriu, moveu, apertou Page down, up, esquerda, direita, ... muito evento, mas felizmente escrever rotinas para tratar eventos em java muito simples, eventos pra que te quero !
Como funciona ?
As interaes do usurio com a interface gera um evento, a JVM (Java Virtual Machine) cria o objeto com os dados do evento, procura por algum objeto que esteja esperando por eventos deste determinado tipo e executa deste objeto o mtodo referente ao evento ocorrido. O objeto que espera o evento ocorrer chamado de listener, o mtodo que executado para tratar o evento chamasse event-handler. Sendo assim importante observar que caso no haja um listener adequado para um tipo de evento, quando o mesmo ocorrer no ser tratado. O listener pode ser um objeto da prpria classe ou ainda de outra classe, veja o exemplo abaixo, onde o trtador de eventos uma classe separada :
import java.awt.*; public class TesteEvento1 { private Frame f; private Button b1; private Button b2; public TesteEvento1(String titulo){ f = new Frame( titulo ); b1 = new Button("Clique em mim (1)"); b1.setActionCommand("1"); b2 = new Button("Clique em mim (2)"); b2.setActionCommand("2");
public void exibir(){ f.setLayout( new FlowLayout() ); b1.addActionListener( new TratadorBotao() ); b2.addActionListener( new TratadorBotao() ); f.add(b1);
Pgina 70
public static void main( String args[]){ TesteEvento1 janela = new TesteEvento1("Eventos"); janela.exibir(); } }
TesteEvento1.java
import java.awt.event.*; public class TratadorBotao implements ActionListener { public void actionPerformed( ActionEvent e ) { System.out.println("Ocorreu uma ao"); System.out.println("comando do boto = " + e.getActionCommand() );
} }
TratadorBotao.java A chamada setActionCommand(1), determina que String ser enviada para o tratador de eventos, visando possibilitar a correta interpretao do comando enviado para o tratador de eventos. Determinando assim para cada boto um comando diferente fazendo com que cada um seja interpretado de forma diferente. O trecho addActionListener( new TratadorBotao() ) associa uma instncia da classe TratadorBotao ao boto indicando este objeto como sendo o tratador de de eventos para o mesmo. O mtodo ActionPerformed( ActionEvent e ) da classe TratadorBotao executado recebendo como parmetro um objeto de ActionEvent que descreve o evento ocorrido, entre outras intformaes, possui o ActionCommand do componente que disparou o evento. Neste outro exemplo de tratador de eventos, possumos somente uma instncia do tratador de eventos, chamamos esta classe de singleton, pois a mesma somente possuir uma instncia (observe que o construtor private), e usamos o mtodo classe get() para recuperar esta instncia. O tratador de eventos recupera o ActionCommand e usa o mesmo para identificar a posio no vetor de contadores a ser incrementada.
import java.awt.event.*; public class TratadorBotaoContador implements ActionListener { private int [] contador; private static TratadorBotaoContador instancia; public static TratadorBotaoContador get(){ if ( instancia == null ){ instancia = new TratadorBotaoContador(); } return instancia; } private TratadorBotaoContador(){ contador = new int[10]; for( int i=0; i <10; i ++ ){ contador[i] = 0; }
public void actionPerformed( ActionEvent e ) { int posicao = Integer.parseInt( e.getActionCommand() ); contador[posicao] ++; for( int i=0; i <10; i ++ ){ if ( contador[i] > 0 ){ System.out.println("contador[" + i + "]=" + contador[i] ); } }
TratadorBotaoContador.java
Pgina 72
Eventos de janelas
Os eventos de janelas so controlados a partir da interface WindowListener, que indica que a classe que a implementa deve fornecer implementao para os mtodos :
dos quais o mais comum o WindowClosing onde tornamos a janela invisvel e depois abandonamos o programa atual. Observar que neste tratador de evento seria uma bom lugar para se colocar uma pergunta ao usurio se deseja realmente abandonar o programa, ou um bom lugar para gravar configuraes do usurio. Veja o exemplo a seguir que demonstra o uso destes eventos.
import java.awt.*; import java.awt.event.*; /** * exemplo de manipulacao de eventos de janela * * @author Hamilton Lima athanazio@pobox.com * @version 17/11/2002 */ public class ExemploJanela extends Frame implements WindowListener { public ExemploJanela(String titulo){ super(titulo); init(); } private void init(){ addWindowListener(this); setSize(200,100); } public void exibir(){ setVisible(true); } public void windowClosing(WindowEvent e) { System.out.println("evento : closing"); setVisible(false); System.exit(0);
public void windowOpened(WindowEvent e) { System.out.println("evento : opened"); } public void windowIconified(WindowEvent e) { System.out.println("evento : iconified"); } public void windowDeiconified(WindowEvent e) { System.out.println("evento : deiconified"); } public void windowActivated(WindowEvent e) { System.out.println("evento : activated"); } public void windowDeactivated(WindowEvent e) { System.out.println("evento : deactivated"); } public static void main( String arg[]){ ExemploJanela e = new ExemploJanela("tratando eventos de janela"); e.exibir(); }
ExemploJanela.java O tratamento de eventos pode ser simplificado atravs dos chamados Adapters classes analogas as interfaces de tratamento de eventos contudo que so classes e implementam as interfaces necessrias para o tratamento de um determinado evento, no sendo necessrios portanto implementar todos os mtodos, to somente aqueles que de fato precisa. A linguagem java inclusive permite um recurso muito elegante de programao que so as classes annimas, para tratamento de eventos, observe no exemplo abaixo que a classe SEM NOME declarada e passada como parmetro no mtodo addWindowListener onde est sendo definido que classe cuidar dos eventos de janela, observe tambm que assim a janela no precisa implementar todos aqueles mtodos vazios de WindowListener.
import java.awt.*; import java.awt.event.*; public class JanelaSimples extends Frame { public JanelaSimples(String titulo){ super(titulo); init(); } private void init(){ setSize(200,100); // tratador de eventos anonimo addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) {
Pgina 74
setVisible(false); System.exit(0); } }); } public void exibir(){ setVisible(true); } public static void main( String arg[]){ JanelaSimples e = new JanelaSimples("tratador de eventos anonimo"); e.exibir(); }
Criando menus
A criao de menus envolve duas classes:
MenuBar a barra dos menus Menu agrupamentos de itens de menu MenuItem cada item de menu
Para a criao de menus necessrio que haja um menu container como um Frame que possa receber o componente MenuBar com seus menu itens. O tratamento de eventos realizado atravs de um ActionListener que deve ser associado a cada item de menu. O exemplo abaixo demonstra a criao de um menu e o tratamento dos eventos ocorridos neles
import java.awt.*; import java.awt.event.*; /** * exemplo de manipulacao de eventos de menu para * abrir varias janelas * * @author Hamilton Lima athanazio@pobox.com * @version 17/11/2002 */ public class Janela1 extends Frame implements ActionListener { public static final String ITEMMENU_SAIR = "sair"; public static final String ITEMMENU_NOVO = "novo"; public static final String ITEMMENU_FECHAR = "fechar"; public Janela1(String titulo){ super(titulo); init(); } private void init(){ setSize(200,100); // tratador de eventos anonimo addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); System.exit(0); } }); // cria os componentes para o menu MenuBar menu = new MenuBar(); Menu arquivo = new Menu("arquivo"); Menu ajuda = new Menu("ajuda"); // cria os itens de menu MenuItem novo = new MenuItem( ITEMMENU_NOVO ); MenuItem fechar = new MenuItem( ITEMMENU_FECHAR ); MenuItem sair = new MenuItem( ITEMMENU_SAIR );
Pgina 76
// define o tratador de eventos dos itens de menu novo.addActionListener(this); fechar.addActionListener(this); sair.addActionListener(this); // adiciona os itens aos menus arquivo.add(novo); arquivo.add(fechar); arquivo.addSeparator(); arquivo.add(sair); // adiciona os menus a barra de menus menu.add(arquivo); menu.add(ajuda); // adiciona a barra de menus ao Frame setMenuBar(menu); } public void exibir(){ setVisible(true); } public void actionPerformed( ActionEvent e ) { String comando = e.getActionCommand(); if ( comando.equals( ITEMMENU_SAIR ) ){ setVisible(false); System.exit(0); } } System.out.println("comando = " + comando );
Janela1.java
public class AppJanela1 { public static void main( String arg[]){ Janela1 j = new Janela1("janela com menus"); j.exibir(); } }
Pgina 78
EXEMPLOS DE SOLUES
Capitulo 1, exerccio 1
Receba 3 nmeros como parmetro, exiba o maior o menor e o do meio Exemplo A-1. maior menor e do meio
public class Pweb_L1_Ex1 { public static void main (String args[]) { String uso = "Use : java Pweb_L1_Ex1 n1 n2 n3 nn"; if (args.length < 1) { System.out.println(uso); System.exit(0); } int MAX = args.length; int resultado[] = new int [ MAX ]; for (int i=0; i<MAX; i++) { resultado[i] = Integer.parseInt(args[i]); } Util obj = new Util(); resultado = obj.ordenaInt(resultado); for (int i=0; i<MAX; i++) { System.out.println(resultado[i]); } } }
Pweb_L1_Ex1.java
import java.util.*; public class Util { String[] split (String str, char ch) { Vector vec = new Vector(); int i, tmp = 0; // Elimina espaos iniciais e finais str.trim();
for (i=0; i < str.length(); i++) { if (str.charAt(i) == ch) { vec.add(str.substring(tmp, i)); tmp = i+1; } } vec.add(str.substring(tmp, i)); if (vec.capacity() < 1) { return null; } else { String []tmpStr; tmpStr = new String[(vec.lastIndexOf(vec.lastElement()) + 1)]; for (i=0; i <= vec.lastIndexOf(vec.lastElement()); i++) { tmpStr[i] = (String)vec.get(i); } return tmpStr; }
int[] ordenaInt (int x[]) { int min, aux; for (int i=0; i < ((x.length) - 1); i++) { min = i; for (int j=(i + 1); j < x.length; j++) { if (x[j] < x[min]) { min = j; } } aux = x[min]; x[min] = x[i]; x[i] = aux; } return x; } }
Util.java
Pgina 80
Capitulo 1, exerccio 2
Receba uma frase como parmetro (a frase deve ser digitada entre aspas) e informe o nmero de palavras que a frase contm Exemplo A-2. numero de palavras de uma frase
public class Pweb_L1_Ex2 { public static void main (String args[]) { String uso = "Use : java Pweb_L1_Ex2 \"FRASE\""; if (args.length < 1) { System.out.println(uso); System.exit(0); } String resultado[]; // Split do argumento, com o separador ' ' Util obj = new Util(); resultado = obj.split(args[0], ' '); for (int i=0; i<resultado.length; i++) { if (resultado[i].length() > 0) { System.out.println(resultado[i]); } } } }
Pweb_L1_Ex2.java
Capitulo 1, exerccio 3
Declare um vetor contendo 10 Strings, realize a inverso deste vetor - colocando o elemento 10 como 1, o 9 como 2 e assim por diante, e aps isto exiba o contedo do vetor invertido Exemplo A-3. Inverso de vetor
/** * * InverterVetorString * * @author athanazio * @version 24/07/2003 */ public class InverterVetorString { public static void main(String[] args) { String vetor[] = { "um", "dois", "tres", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez" }; String temp = null; // divisao de inteiros resultado inteiro int meio = vetor.length / 2; for (int i = 0; i < meio; i++) { temp = vetor[i]; vetor[i] = vetor[ (vetor.length-1) - i]; vetor[ (vetor.length-1) - i] = temp; } for (int i = 0; i < vetor.length; i++) { System.out.println( vetor[i] ); } } }
Pgina 82
Capitulo 1, exerccio 4
Receba uma lista nmeros como parmetro, aps isto exiba a mdia dos nmeros recebidos - independente da quantidade de nmeros Exemplo A-4. Mdia de nmeros
// Exercicio 4 public class Pweb_L1_Ex4 { public static void main (String args[]) { String uso = "Use : java Pweb_L1_Ex4 n1 n2 n3 nn"; if (args.length < 1) { System.out.println(uso); System.exit(0); } int contador, soma = 0; for (contador=0; contador < args.length; contador++) { soma += Integer.parseInt(args[contador]); } System.out.println((float)(soma / contador)); } }
Pweb_L1_Ex4.java
Capitulo 1, exerccio 5
Exiba na tela a tabela ASCII, exibindo o nmero do caracter e o seu respectivo caracter - exibir de 1 a 255 Exemplo A-5. Tabela ASCII
/** * * ListarTabelaASCII * * @author athanazio * @version 24/07/2003 */ public class ListarTabelaASCII { public static void main(String[] args) { for (int i = 0; i <= 255; i++) { System.out.println( i + " " + (char)i); } } }
Pgina 84
Capitulo 1, exerccio 6
Crie um vetor multidimensional de objetos, que possua duas dimenses, na primeira adicione um vator de strings com os nomes dos funcionrios, na segunda um vetor de Float com os salrios dos funcionrios Receba como parmetro o percentual de aumento salarial a ser aplicado para cada funcionrio, aps isto exiba na tela os nomes dos funcionrios acompanhado do salrio atualizado pelo ndice recebido Exemplo A-6. Vetor de objetos
Pweb_L1_Ex6.java
Capitulo 1, exerccio 7
Crie uma calculadora que funcione atravs da linha de comando, esta calculadora deve receber comandos aritmticos semelhantes a linguagem cobol, aps receber cada comando deve realizar o clculo e exibir o resultado
public class Pweb_L1_Ex7 { public static void main (String args[]) { String uso = "Use : java Pweb_L1_Ex7 MULTIPLY n1 BY n2 \n" + "java Pweb_L1_Ex7 DIVIDE n1 BY n2\n" + "java Pweb_L1_Ex7 ADD n1 TO n2 \n" + "java Pweb_L1_Ex7 SUBTRACT n1 FROM n2"; if (args.length < 4) { System.out.println(uso); System.exit(0); } String int n1 String int n2 double op1 = args[0]; = Integer.parseInt(args[1]); op2 = args[2]; = Integer.parseInt(args[3]); result = 0.0;
if (op1.equals("MULTIPLY") && op2.equals("BY")) { result = (double)(n1 * n2); } else if (op1.equals("DIVIDE") && op2.equals("BY")) { result = (double)n1 / (double)n2; } else if (op1.equals("ADD") && op2.equals("TO")) { result = (double)(n1 + n2); } else if (op1.equals("SUBTRACT") && op2.equals("FROM")) { result = (double)(n1 - n2); } else { System.out.println(uso); System.exit(0); } System.out.println(result); } }
Pweb_L1_Ex7.java
Pgina 86
Capitulo 1, exerccio 8
Receba um nome como parmetro e indique quantas vogais e quantas consoantes contm o nome, e a vogal que mais ocorreu Exemplo A-8. Contagem de vogais e consoantes
public class Pweb_L1_Ex8 { public static void main (String args[]) { String uso = "Use : java Pweb_L1_Ex8 nome"; if (args.length < 1) { System.out.println(uso); System.exit(0); } char []consoante = {'b','c','d','f','g','h','j','k','l', 'm','n','p','q','r','s','t', 'v','w','x','y','z'}; char []vogal = {'a','e','i','o','u'}; int []contadorVogais = new int [vogal.length]; int contador, somaC = 0, somaV = 0; for (contador=0; contador < args[0].length(); contador++) { for (int i=0; i < consoante.length; i++) { if (args[0].charAt(contador) == consoante[i]) { somaC++; break; } } for (int i=0; i < vogal.length; i++) { if (args[0].charAt(contador) == vogal[i]) { somaV++; contadorVogais[i]++; break; } } } int []contadorVogaisTmp = new int [vogal.length]; for (int i=0; i < vogal.length; i++) { contadorVogaisTmp[i] = contadorVogais[i]; } Util obj = new Util(); int resultado[] = obj.ordenaInt(contadorVogaisTmp); String maisVezes = ""; for (int i=0; i < vogal.length; i++) { if (contadorVogais[i] == resultado[resultado.length - 1]) { maisVezes += String.valueOf(vogal[i]); } } System.out.println("Total de Vogais : " + String.valueOf(somaV)); System.out.println("Total de Consoantes : " + String.valueOf(somaC)); System.out.println("Vogais que mais ocorreram : " + maisVezes);
Pweb_L1_Ex8.java
Capitulo 1, exerccio 9
Crie um calculadora de minutos que receba a hora inicial a a hora final e exiba a quantidade de minutos entre os dois horrios - receba os parmetros no seguinte formato HH:MM HH:MM, onde HH significa hora e MM os minutos Exemplo A-9. Calculadora de minutos
public class Pweb_L1_Ex9 { public static void main (String args[]) { String uso = "Use : java Pweb_L1_Ex9 HH:MM HH:MM"; if (args.length < 2) { System.out.println(uso); System.exit(0); } String tmp1[]; String tmp2[]; // Split do argumento, com o separador ':' Util obj = new Util(); tmp1 = obj.split(args[0], ':'); tmp2 = obj.split(args[1], ':'); // Testes p/ validar formato de hora if ((tmp1.length != 2) || (tmp2.length != 2) || ((Integer.parseInt(tmp1[0]) < 0) || (Integer.parseInt(tmp1[0]) > 23)) || ((Integer.parseInt(tmp2[0]) < 0) || (Integer.parseInt(tmp2[0]) > 23)) || ((Integer.parseInt(tmp1[1]) < 0) || (Integer.parseInt(tmp1[1]) > 59)) || ((Integer.parseInt(tmp2[1]) < 0) || (Integer.parseInt(tmp2[1]) > 59))) { System.out.println(uso); System.exit(0);
int minutos1 = (Integer.parseInt(tmp1[0]) * 60) + Integer.parseInt(tmp1[1]); int minutos2 = (Integer.parseInt(tmp2[0]) * 60) + Integer.parseInt(tmp2[1]); int resultado; // No faz sentido tempo negativo if (minutos1 > minutos2) { resultado = minutos1 - minutos2; } else {
Pgina 88
Pweb_L1_Ex9.java
Capitulo 1, exerccio 10
Receba o nmero do ms e o ano, e aps isto exiba o calendrio para o ms e ano solicitado no seguinte formato:
c:\>java calendario 08 2001 Agosto 2001 Dom Seg Ter Qua 1 5 6 7 8 12 13 14 15 19 20 21 22 26 27 28 29 c:\> Qui 2 9 16 23 30 Sex 3 10 17 24 31 Sab 4 11 18 25
Pgina 90
// Primeiro e Ultimo dia do mes utilizado int primeiroDia = cal.getActualMinimum(Calendar.DATE); int ultimoDia = cal.getActualMaximum(Calendar.DATE); int ultimoDiaSemana = cal.getFirstDayOfWeek() - 1; // Carregamento do Array Calendario for (int i=primeiroDia; i <= ultimoDia; i++) { // Guarda o dia na posicao em que deve aparecer no calendario calendario[linhaCorrente][(cal.get(Calendar.DAY_OF_WEEK) - 1)] = String.valueOf(i); // Adiciona um dia no objeto cal ( // nossa instancia do GregorianCalendar) cal.add(Calendar.DATE, 1); // Se ultimo dia da semana, pula linha if (cal.get(Calendar.DAY_OF_WEEK) == ultimoDiaSemana) { linhaCorrente++; }
// Impressao na tela - Cabecalho System.out.println("\n " + meses[mes] + " " + String.valueOf(ano) + "\n"); for (int i=0; i < dias.length; i++) { System.out.print(dias[i] + " "); } System.out.println(""); // Impressao na tela - dados do Array calendario for (int i=0; i < maxLinhas; i++) { for (int ii=0; ii < colunas; ii++) { if (calendario[i][ii].length() == 1) { System.out.print(" "); } System.out.print(calendario[i][ii] + " "); } System.out.println(""); } }
Pweb_L1_Ex10.java
AppMDI.java aplicao que chama janela principal MDIPrincipal.java janela principal que controla as janelas existentes MDIFilha.java Classe modelo para janelas filhas MDISobre tela modal de ajuda com crditos da aplicao
public class AppMDI { public static void main( String arg[]){ MDIPrincipal mdi = new MDIPrincipal("Janela MDI"); mdi.exibir(); } }
AppMDI.java
/** * MDIPrincipal * exemplo de aplicacao MDI * janela principal * * @author Hamilton Lima athanazio@pobox.com * @version 17/11/2002 */ public class MDIPrincipal extends JFrame implements ActionListener { public static final String ITEMMENU_SAIR = "sair";
Pgina 92
public static final String ITEMMENU_NOVO = "novo"; public static final String ITEMMENU_FECHAR = "fechar"; public static final String ITEMMENU_SOBRE = "sobre"; public static final String MENU_ARQUIVO = "arquivo"; public static final String MENU_AJUDA = "ajuda"; public static final String MENU_JANELA = "janela"; public static final String PREFIXO_JANELA protected protected protected protected MenuBar barraMenu; Menu menuArquivo; Menu menuJanela; Menu menuAjuda; = "Janela";
// area interna protected JDesktopPane desktop; public MDIPrincipal(String titulo){ super(titulo); init(); } private void init(){ setSize(400,300); desktop = new JDesktopPane(); desktop.setPreferredSize(new Dimension(400,300)); setContentPane(desktop); // tratador de eventos anonimo addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); System.exit(0); } }); // cria os componentes para o menu barraMenu = new MenuBar(); menuArquivo = new Menu( MENU_ARQUIVO ); menuJanela = new Menu( MENU_JANELA ); menuAjuda = new Menu( MENU_AJUDA ); // cria os itens de menu MenuItem novo = new MenuItem( ITEMMENU_NOVO ); MenuItem fechar = new MenuItem( ITEMMENU_FECHAR ); MenuItem sair = new MenuItem( ITEMMENU_SAIR ); MenuItem sobre = new MenuItem( ITEMMENU_SOBRE ); // define o tratador de eventos dos itens de menu novo.addActionListener(this); fechar.addActionListener(this); sair.addActionListener(this); sobre.addActionListener(this); // adiciona os itens aos menus menuArquivo.add(novo); menuArquivo.add(fechar); menuArquivo.addSeparator(); menuArquivo.add(sair); menuAjuda.add( sobre );
// adiciona os menus a barra de menus barraMenu.add(menuArquivo); barraMenu.add(menuJanela); barraMenu.add(menuAjuda); // adiciona a barra de menus ao Frame setMenuBar(barraMenu);
public void exibir(){ setVisible(true); } public void actionPerformed( ActionEvent e ) { String comando = e.getActionCommand(); if ( comando.equals( ITEMMENU_SAIR ) ){ setVisible(false); System.exit(0); } if ( comando.equals( ITEMMENU_NOVO ) ) novo(); if ( comando.equals( ITEMMENU_FECHAR ) ) fechar(); if ( comando.equals( ITEMMENU_SOBRE ) ) sobre(); } selecionarJanela( comando );
protected void selecionarJanela( String comando ){ Iterator iterator = listaJanelas.iterator(); MDIFilha filha = null; while (iterator.hasNext()){ filha = (MDIFilha)iterator.next(); if ( filha.toString().equals( comando ) ){ filha.show(); filha.toFront(); try { filha.setSelected(true); } catch( Exception e ){ System.out.println( "erro ao selecionar janela filha"); } break; } } } public void sobre(){ MDISobre j = new MDISobre( this ); j.show(); } private int contadorJanelas = 1; public void novo(){ atual = new MDIFilha( this, "Janela" + Integer.toString( contadorJanelas ++ ) );
Pgina 94
atual.reshape( 0, 0, 200, 100 ); // adiciona ao controle interno de janelas listaJanelas.add( atual ); // adiciona a area visivel da janela desktop.add( atual ); //exibe a janela atual.show(); //adiciona ao menu MenuItem filha = new MenuItem( atual.toString() ); filha.addActionListener(this); menuJanela.add(filha); } public void fechar(){ if ( atual != null ){ atual.fechar(); } } // metodos para o controle das janelas filhas MDIFilha atual = null; Vector listaJanelas = new Vector(); public void abrindo( MDIFilha janela ){ atual = janela; } public void fechando( MDIFilha janela ){ if ( janela == atual ) atual = null; // remove da lista Iterator iterator = listaJanelas.iterator(); while (iterator.hasNext()){ if ( iterator.next() == janela ) iterator.remove(); } // remove do menu int maximo = menuJanela.getItemCount(); for( int n = 0; n < maximo; n ++ ){ if ( menuJanela.getItem(n).getLabel().equals( janela.toString() )){ menuJanela.remove(n); break; } }
public void minimizando( MDIFilha janela ){ if ( janela == atual ) atual = null; } public void restaurando( MDIFilha janela ){ atual = janela; } public void desativando( MDIFilha janela ){ if ( janela == atual ) atual = null;
MDIPrincipal.java
/** * MDIFilha * exemplo de aplicacao MDI * janela base para criacao das janelas internas * * @author Hamilton Lima athanazio@pobox.com * @version 17/11/2002 */ public class MDIFilha extends JInternalFrame implements InternalFrameListener { MDIPrincipal dono; public MDIFilha( Frame dono, String titulo ) { super( titulo, true, true, true, true ); setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE ); addInternalFrameListener(this); this.dono = (MDIPrincipal)dono; public void fechar(){ setVisible(false); dono.fechando( this ); } public String toString(){ return getTitle(); } public void internalFrameClosing(InternalFrameEvent e) { dono.fechando( this ); } public void internalFrameClosed(InternalFrameEvent e) { } public void internalFrameOpened(InternalFrameEvent e) { dono.abrindo( this ); } public void internalFrameIconified(InternalFrameEvent e) { dono.minimizando( this ); } public void internalFrameDeiconified(InternalFrameEvent e) { dono.restaurando( this ); } public void internalFrameActivated(InternalFrameEvent e) { dono.ativando( this );
Pgina 96
MDIFilha.java
import java.awt.*; import java.awt.event.*; /** * MDISobre * exemplo de aplicacao MDI * janela de ajuda com creditos da aplicacao * * @author Hamilton Lima athanazio@pobox.com * @version 17/11/2002 */ public class MDISobre extends Dialog { public static final int LARGURA = 250; public static final int ALTURA = 150; protected static String titulo = "sobre"; public MDISobre( Frame owner ){ super( owner, titulo, true ); setLayout( new GridLayout( 3, 1, 10, 10 ) ); // calcula para centralizar a janela Rectangle r = owner.getBounds(); int x = r.x + (int)((( r.width - r.x ) - LARGURA )/2); int y = r.y + (int)((( r.height - r.y ) - ALTURA )/2); reshape( x, y, LARGURA, ALTURA ); Label label = new Label.CENTER Label autor = new Label.CENTER Label("Exemplo de aplicacao MDI", ); Label("www.athanazio.org 2002", );
Button botao = new Button("Fechar"); botao.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e){ dispose(); } }); Panel panel = new Panel( new FlowLayout( FlowLayout.CENTER ) ); panel.add( botao ); add( label ); add( autor ); add( panel );
MDISobre.java
Pgina 98