Você está na página 1de 35

Curso de Java - Semana Acadmica e

Augusto Mecking Caringi caringi.sul@terra.com.br Outubro de 2002

Conte do u
1 Introduo ca 1.1 Histria . . . . . . . . . . . . . . . . . . . o 1.2 Caracter sticas da Linguagem . . . . . . . 1.2.1 Simples . . . . . . . . . . . . . . . 1.2.2 Orientada a Objetos . . . . . . . . 1.2.3 Distribu da . . . . . . . . . . . . . 1.2.4 Robusta . . . . . . . . . . . . . . . 1.2.5 Segura . . . . . . . . . . . . . . . . 1.2.6 Neutra em Relao ` Arquitetura . ca a 1.2.7 Portvel . . . . . . . . . . . . . . . a 1.2.8 Interpretada . . . . . . . . . . . . 1.2.9 Eciente . . . . . . . . . . . . . . . 1.2.10 Suporta Concorrncia . . . . . . . e 1.2.11 Dinmica . . . . . . . . . . . . . . a 1.3 Diferenas entre C++ e Java . . . . . . . c 1.4 Java API . . . . . . . . . . . . . . . . . . 1.5 Java SDK . . . . . . . . . . . . . . . . . . 1.6 Ambientes de Desenvolvimento Integrado 2 Fundamentos 2.1 Primeiro Exemplo: Hello World! 2.2 Tipos Primitivos . . . . . . . . . 2.3 Estruturas de Controle e Seleo ca 2.3.1 Estruturas de Seleo . . ca 2.3.2 Estruturas de Controle . . 2.4 Manipulao de Strings . . . . . ca 2.5 Funes Matemticas . . . . . . . co a 2.6 Vetores e Matrizes . . . . . . . . 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 7 8 8 8 9 9 9 10 10 11 13 13 14 15 16 18

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

3 Programao Grca: Swing ca a 3.1 Usando JOptionPane . . . . . . . . . . . . . . . . . 3.2 Criando uma Janela . . . . . . . . . . . . . . . . . 3.3 Adicionando Componentes e Manipulando Eventos 3.4 Trabalhando com Menus . . . . . . . . . . . . . . . 3.5 Selecionando a Aparncia e Comportamento . . . . e 1

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

4 Desenvolvimento de Applets 4.1 A Tag HTML Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Segurana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c 5 Manipulao de Arquivos ca 5.1 Lendo Arquivos . . . . . . . . . . . . . 5.2 Gravando Arquivos . . . . . . . . . . . 5.3 Listando o Contedo de um Diretrio u o 5.4 Obtendo Entrada do Console . . . . .

20 21 21 22 22 23 23 24 25 25 26 28 28 29 29 30 32 32

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

6 Programao Concorrente: Multithreading ca 6.1 Criando uma Linha de Execuo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 6.2 Sincronizando Dados Compartilhados entre Linhas . . . . . . . . . . . . . . . . . . . . . . 7 Programao em Rede ca 7.1 Lendo um Arquivo atravs e 7.2 Trabalhando com Sockets 7.3 Criando um ServerSocket 7.4 Cliente Multithreaded . .

da . . . . . .

Internet . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

8 Conectividade com Banco de Dados: JDBC 8.1 Fazendo uma Consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Cap tulo 1

Introduo ca
1.1 Histria o

No in cio da dcada de 90, a Sun Microsystems trabalhava no projeto Green, que tinha como objetivo e desenvolver novos e revolucionrios dispositivos, como por exemplo o Star7, uma espcie de controle a e remoto capaz de interagir com os mais diversos equipamentos, desde a televiso at o cortador de grama. a e O sistema operacional do Star7 estava sendo programado em C++, entretando os engenheiros do projeto a consideravam uma linguagem muito complexa e propensa a erros, foi ento que resolveram a desenvolver uma nova linguagem, aproveitando as caracter sticas positivas do C++ e elimando os aspectos que a tornavam uma linguagem d cil. Para demonstrar o potencial da linguagem Java e evitar que o projeto de pesquisa fosse engavetado, foi criado, em 1994, um navegador da Web que podia executar Applets Java. Embora a linguagem tenha recebido muita ateno da comunidade da Web, ela s decolou realmente depois que a Netscape se ca o tornou a primeira empresa a licenci-la, em agosto de 1995. Logo aps o primeiro lanamento pblico da a o c u linguagem, a Sun ampliou os esforos para o desenvolvimento da Java com uma nova subsidiria, chamada c a JavaSoft, e contratou centenas de funcionrios para continuar a expandir a linguagem. a

1.2
1.2.1

Caracter sticas da Linguagem


Simples

Ainda que Java tenha por base o C++, ela omite muitas das caracter sticas tidas como confusas do C++, incluindo aquelas que causam mais problemas aos iniciantes: ponteiros, sobrecarga de operadores, herana c mltipla e templates. Ao mesmo tempo, Java adiciona uma caracter u stica importante que simplica a programao: coleta de lixo automtica. ca a

1.2.2

Orientada a Objetos

A portabilidade uma das caracter e sticas que se inclui nos objetivos almejados por uma linguagem orientada a objetos. Em Java ela foi obtida de maneira inovadora com relao ao grupo atual de linguagens ca orientadas a objetos. Java suporta herana, mas no herana mltipla. A ausncia de herana mltipla c a c u e c u pode ser compensada pelo uso de herana e interfaces, onde uma classe herda o comportamento de sua c

superclasse alm de oferecer uma implementao para uma ou mais interfaces. Java permite a criao de e ca ca classes abstratas.

1.2.3

Distribu da

A linguagem Java tem uma biblioteca extensa de rotinas para lidar com protocolos TCP/IP, como HTTP e FTP. Os aplicativos Java podem abrir e acessar objetos na Internet atravs de URLs com a mesma e facilidade que se acessa um arquivo no sistema local.

1.2.4

Robusta

Java tem a inteno de escrever programas que precisam ser conveis de vrias formas. O Java coloca ca a a nfase na vericao antecipada de poss e ca veis problemas, na vericao dinmica posterior (em tempo de ca a execuo), e na eliminao de situaes sujeitas a erros... A unica e grande diferena entre o Java e o C++ ca ca co c est em que o java usa um modelo de ponteiros que elimina a possibilidade de sobrescrita de memria e a o conseqente destruio de dados. u ca

1.2.5

Segura

A presena de coleta automtica de lixo, evita erros comuns que os programadores cometem quando so c a a obrigados a gerenciar diretamente a memria (C , C++, Pascal). A eliminao do uso de ponteiros, em o ca favor do uso de vetores, objetos e outras estruturas substitutivas traz benef cios em termos de segurana. c O programador proibido de obter acesso a memria que no pertence ao seu programa, alm de no ter e o a e a chances de cometer erros comuns tais como reference aliasinge uso indevido de aritmtica de ponteiros. e Estas medidas so particularmente uteis quando pensarmos em aplicaes comerciais desenvolvidas para a co a internet. Ser fortemente tipada tambm uma vantagem em termos de segurana, que est aliada e e c a a eliminao de converses impl ca o citas de tipos de C++. A presena de mecanismos de tratamento de c excees torna as aplicaes mais robustas, no permitindo que elas abortem, mesmo quando rodando co co a sob condies anormais. O tratamento de excees ser util na segunda parte para modelar situaes tais co co a co como falhas de transmisso e formatos incompat a veis de arquivos.

1.2.6

Neutra em Relaao ` Arquitetura c a

O compilador gera um formato de arquivo de objeto neutro em relao a arquitetura - o cdigo compilado ca o executvel em muitos processadores, desde que exista uma mquina virtual. O compilador Java faz isso e a a gerando instrues em bytecodes que nada tm a ver com uma arquitetura particular de um computador co e espec co. Em vez disso, elas so projetadas para serem fceis de interpretar em qualquer mquina e a a a convertidas facilmente para o cdigo nativo da mquina em tempo real. o a

1.2.7

Portvel a

Java foi criada para ser portvel. O byte-codegerado pelo compilador para a sua aplicao espec a ca ca pode ser transportado entre plataformas distintas que suportam Java (Solaris, Windows, Mac/Os etc). No necessrio recompilar um programa para que ele rode numa mquina e sistema diferente, ao contrrio a e a a a do que acontece por exemplo com programas escritos em C e outras linguagens. Esta portabilidade e importante para a criao de aplicaes para a internet. O prprio compilador Java escrito em Java, de ca co o e modo que ele portvel para qualquer sistema que possua o interpretador de byte-codes. e a 4

1.2.8

Interpretada

O interpretador Java pode executar Java diretamente em qualquer mquina na qual o interpretador tenha a sido escrito.

1.2.9

Eciente

Como Java foi criada para ser usada em computadores pequenos, ela exige pouco espao, pouca memria. c o Java muito mais eciente que grande parte das linguagens de scriptingexistentes, embora seja cerca e de 20 vezes mais lenta que C, o que no um marco denitivo. Com a evoluo da linguagem, esto a e ca a sendo criados compiladores just-in-timecada vez mais otimizados que traro as marcas de desempenho a da linguagem cada vez mais prximas das de C++ e C. o

1.2.10

Suporta Concorrncia e

A linguagem permite a criao de maneira fcil, de vrias threadsde execuo. Threads so muito ca a a ca a importantes no desenvolvimento de aplicaes modernas que fazem comunicao em rede, aplicaes com co ca co interface grca, ou qualquer outra aplicao que seja necessrio executar vrias tarefas ao mesmo tempo. a ca a a

1.2.11

Dinmica a

De vrias formas, o Java uma linguagem mais dinmica que o C ou C++, tanto pela alocao de objetos a e a ca na memria, que feita de forma dinmica , como pelos recursos de instrospeco de classes da linguagem. o e a ca

1.3

Diferenas entre C++ e Java c

Java baseia-se em C++, entretanto conta com uma srie de aprimoramentos que tem como objetivo tornar e a linguagem mais simples, menos confusa e segura. A seguir discutiremos detalhadamente os principais destes aprimoramentos. Java no permite o uso de ponteiros: C/C++ so muitas vezes classicadas como linguagens de a a mdio n e vel, mais prximas das linguagens de mquina do que as outras linguagens de alto n o a vel como Pascal, por permitirem manipulao direta de endereos de memria atravs de ponteiros, ca c o e que no nada mais que um tipo de varivel capaz de armazenar endereos de memria. Embora a e a c o os ponteiros sejam um elemento chave em C/C++, muitos programadores consideram a utilizao ca dos ponteiros dif e sujeita a erros. cil Java no utiliza pr-processador: Antes de se compilador um programa em C/C++, ele submetido a e e a um pr-processador. O pr-processador tem vrios objetivos como substituio de macros e conse e a ca tantes, compilao condicional, etc. Java por sua vez no tem necessidade de um pr-processador ca a e pois prov alternativas que possibilitam resultados similares. e Java passa parmetros de tipo primitivo sempre por valor e parmetros de tipo Array e Objeto a a sempre por referncia: em C/C++ se utiliza ponteiros para fazer passagem de parmetro por e a refrencia (chamada por referncia), Java fazendo isto automaticamente torna desnecessrio o uso e e a de ponteiros para esta tarefa.

Os programas Java liberam automaticamente a memria alocada: Java utiliza uma tcnica chamada o e coleta de lixo (garbage collection) para detectar quando o seu programa no utiliza mais um objeto. a Diferentemente de C/C++, voc no precisa fazer chamadas expl e a citas `s funes delete ou free. a co As condies de lao em Java devero ser do tipo boolean: Em C/C++ poss ter uma condio co c a e vel ca contendo uma expresso que retorne qualquer tipo de valor (inteiro, ponto utuante, etc.), isso se a deve ao fato de C/C++ serem linguagens fracamente tipadas e isso pode ser a fonte de muitos bugs. Java elimina esses poss veis bugs obrigando que as condies sejam do tipo boolean (verdadeiro ou co falso apenas).

1.4

Java API

A linguagem Java pequena e simples, bem menor do que C++ e pode-se at dizer que seja menor do que e e C. Entretanto, ela vem com uma grande e sempre em expanso biblioteca de classes. Felizmente, voc soa e mente precisa conhecer aquelas partes da biblioteca realmente necessrias, pode-se aprender um pouco dela a de cada vez, alm disso, existe uma excelente documentao online em http://java.sun.com/j2se/1.4/docs/api/. e ca As classes so agrupadas em pacotes (packages). A Java 2 API contm por volta de 60 pacotes. Para a e o desenvolvimento de aplicaes simples, voc provavelmente s precisar conhecer classes destes trs co e o a e pacotes: java.lang contm classes para manipular strings, e outros recursos built-inda linguagem; e java.io contm classes que do suporte a entrada e sa e a da; java.util contm classes uteis como estruturas de dados, classes para se trabalhar com nmeros e u aleatrios, etc. o Alguns dos principais pacotes da Java API: Pacote java.applet java.awt java.io java.lang java.math java.net java.sql java.text java.util javax.swing Descrio ca The Java Applet Package The Java Abstract Windowing Toolkit Package The Java Input/Output Package The Java Language Package The Java Arbitrary Precision Math Package The Java Networking Package The Java Database Connectivity Package The Java Text Package The Java Utilities Package The Java Swing GUI Components Package

1.5

Java SDK

O ambiente de desenvolvimento de software Java, Java SDK (antigamente, JDK), E formado essencialmente por um conjunto de aplicativos que permite, entre outras tarefas, realizar a compilao e a execuo ca ca 6

de programas escritos na linguagem Java. Ele pode ser baixado gratuitamente a partir do site ocial do Java http://java.sun.com As ferramentas bsicas do kit de desenvolvimento Java so: a a o compilador Java, javac, o interpretador de aplicaes Java (mquina virtual), java e co a o interpretador de applets Java, appletviewer. Alm dessas, o Java SDK oferece os aplicativos de desenvolvimento javadoc, um gerador de documentao e ca para programas Java; jar, um manipulador de arquivos comprimidos no formato Java Archive, jdb, um depurador de programas Java; javap, um disassembler de classes Java; e javah, um gerador de arquivos header para integrao com cdigo nativo em C. Java oferece tambm aplicativos para o desenvolvimento ca o e e execuo de aplicaes Java distribu ca co das.

1.6

Ambientes de Desenvolvimento Integrado

Um ambiente de desenvolvimento Integrado (IDE - Integrated Development Environment) um conjunto e de programas que combinam um editor de cdigo-fonte, um compilador, um depurador e outras ferrao mentas, tais como proler e utilitrio de impresso etc., capazes de proporcionar um maior conforto no a a desenvolvimento de programas. Existe um grande nmero de IDE Java, desde iniciativas acadmicas at u e e ferramentas comerciais de uso prossional. Entre os mais utilizados podemos citar: JBuilder (Borland) Forte (Sun) Visual Caf (Symantec) e Visual J++ (Microsoft)

Cap tulo 2

Fundamentos
2.1 Primeiro Exemplo: Hello World!

// HelloWorld.java public class HelloWorld { public static void main(String arguments[]) { System.out.println("Hello World."); } }

2.2

Tipos Primitivos

Ao declarar variveis, deve-se informar ao compilador Java o nome e o tipo da varivel. Java uma a a e linguagem fortemente tipada, o que signica que todas as variveis devero ter um tipo declarado. Um a a tipo dene o conjunto de valores que a varivel poder armazenar. Java conta com 8 tipos primitivos: a a Nome do Tipo long int short byte double oat char boolean Tamanho 8 bytes 4 bytes 2 bytes 1 byte 8 bytes 4 bytes 2 bytes 1 bit Variao ca -9.223.372.036.854.775.808L at -9.223.372.036.854.775.807L e -2.147.483.648 at 2.147.483.647 e -32.768 at 32.767 e -128 at 127 e +/- 1,79759313486231570E+308 (15 d gitos signicativos) +/- 3,40282347E+38 (7 d gitos signicativos) 65.536 caracteres poss veis verdadeiro ou falso

2.3
2.3.1

Estruturas de Controle e Seleao c


Estruturas de Seleao c

A instruo condicional mais simples em Java tem a forma: ca if (condi~o) instru~o; ca ca Mas em Java, como na maioria das linguagens de programao, freqentemente se quer executar vrias ca u a instrues quando uma condio apenas verdadeira. Neste caso, a instruo condicional toma a forma: co ca e ca if (condi~o) {bloco} ca A construo if/else pode ser incmoda quando se tem de lidar com vrias selees com muitas ca o a co alternativas. A linguagem Java, seguindo os passos do C/C++, usa a instruo switch. Pode-se testar ca somente o tipo char e todos os tipos inteiros, menos long; e no se pode usar conjunto de valores. a switch(opcao) { case 1: . . . break; case 2: . . . break; case 3: . . . break; case 4: . . . break; default: . . . break; }

2.3.2

Estruturas de Controle

As estruturas de repetio da linguagem Java so muito semelhantes as do C/C++. So elas: lao while, ca a a c lao for e lao do. c c while (condi~o) ca { // Instru~es aqui co } for (valor_inicial; condi~o_de_encerramento; valor_de_incremento) ca { // Instru~es para executar co }

A instruo while permite repetir uma ou mais instrues at que uma condio espec ca co e ca ca seja verdadeira. Da mesma maneira, a instruo for permite repetir uma ou mais instrues por um nmero ca co u espec co de vezes. Por sua vez, a instruo do permite executar uma ou mais instrues pelo menos uma ca co vez, e depois, se for necessrio, repetir as instrues. a co do { // Bloco de instru~es co } while (condi~o) ca

2.4

Manipulaao de Strings c

Quando voc trabalha com strings de caractetes em Java, voc utiliza instncias da classe java.lang.String. e e a Diferentemente das strings caractere em C/C++, os objetos String em Java no so terminados por null a a (terminados com um zero em ASCII). Alm disso, a classe String prov uma srie de mtodos uteis para e e e e se trabalhar com cadeias de caracteres. String vazio = ""; // string vazio String cumprimento = "oi"; Operao de Concatenao: Operao binria indicada por + onde os dois operandos strings so ca ca ca a a justapostos, criando um novo string. String A = "bana"; String B = "nada"; String C = A + B; A string C igual a bananada. e Quando uma string concatenada com um valor que no uma string, este valor convertido em e a e e uma string. Por exemplo: String disciplina = "CI0" + 55; Coloca na string disciplina o valor CI055. Isto feito frequentemente em comandos de impresso, como no exemplo a seguir: e a System.out.println("A resposta e " + resposta);

2.5

Funoes Matemticas c a

A classe java.lang.Math de Java oferece uma srie de mtodos estticos para exponenciao, trinometria, e e a ca funes de mximo e m co a nimo, etc. Como todos esses mtodos so estticos, poss referenci-los pelo e a a e vel a nome da classe sem ter de criar uma instncia da mesma. a Principais mtodos da classe Math: e

10

Mtodo e abs(x) ceil(x) cos(x) exp(x) floor(x) log(x) max(x, y) min(x, y) pow(x, y) sin(x) sqrt(x) tan(x)

Descrio ca valor absoluto de x (esse mtodo tambm tem e e verses para valores float, int e long). o arredonda x para o menor inteiro no menor que a x cosseno trigonomtrico de x (x em radianos) e mtodo exponencial e arredonda x para o maior inteiro no maior que a x logaritmo natural de x (base e) maior valor entre x e y (esse mtodo tambm e e tem verses para valores float, int e long). o menor valor entre x e y (esse mtodo tambm e e tem verses para valores float, int e long). o x elevado ` potncia y a e seno trigonomtrico de x (x em radianos) e raiz quadrada de x tangente trigonomtrica de x (x em radianos) e

2.6

Vetores e Matrizes

Vetores so objetos, eles possuem papel importante no estilo de programao desta linguagem que exclui a ca ponteiros. Por serem objetos, vetores so obrigatoriamente alocados de maneira dinmica. O exemplo a a a seguir aloca um vetor de inteiros com trs posies, seguindo uma sintaxe semelhante a de alocao de e co ca objetos: // VetorTest.java public class VetorTest { public static void main (String args[]) { int vetor[] = new int[3]; vetor[0]=0; //indexacao semelhante a C , C++ vetor[1]=10; vetor[2]=20; System.out.println(vetor[0] + " " + vetor[1] + " " + vetor[2] + " "); } } Perceba que a faixa util do vetor vai de 0 at (n - 1) onde n o valor dado como tamanho do vetor no e e momento de sua criao, no nosso caso 3. O mesmo ocorre com matrizes. Esta conveno pode confundir ca ca programadores Pascal onde a indexao vai de 1 at n. Java checa se voc usa corretamente os ca e e ndices

11

do vetor. Se ocorrer um acesso ao vetor[i] onde i um e ndice invlido (fora da faixa de valores pera mitidos), voc receber uma mensagem parecida com: java.lang.ArrayIndexOutOfBoundsException. e a Esta mensagem indica que houve uma tentativa do programa de acessar um elemento fora dos limites do vetor/matriz. Um atributo muito util quando se trabalha em um vetor de dados: vetor.length com isto podemos obter o nmero de elementos do vetor. u // InitArray.java import java.util.*; import javax.swing.*; public class InitArray { public static void main(String args[]) { String output = "ndice\tValor\n"; I int n[] = new int[10]; Random r = new Random(); for (int i = 0; i < n.length; i++) { n[i] = r.nextInt(100); output += i + "\t" + n[i] + "\n"; } JTextArea outputArea = new JTextArea(11, 10); outputArea.setText(output); JOptionPane.showMessageDialog(null, outputArea, "Vetor com valores do tipo inteiro", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } }

12

Cap tulo 3

Programao Grca: Swing ca a


Quando a linguagem Java chegou ao mercado em 1995, ela contava com um conjunto classes para desenvolvimento de interfaces grcas (GUI - Graphical User Interface) que a Sun chamou de AWT (Abstract a Windowing Toolkit, em portugus: kit de ferramentas de janelas abstratas), entretanto ela era limitada e e deixava a desejar em relao ao nmero de componentes, exibilidade, etc. Dessa forma, quando a verso ca u a 1.2 do Java foi lanada, a linguagem incorporou um conjunto de classes denominado Swing, oferecenc do uma gama de novos recursos: maior nmero de componentes (widgets), aparncia e comportamento u e plugveis, etc. a

3.1

Usando JOptionPane

Caixas de dilogo so janelas que em geral so utilizadas para exibir mensagens importantes para o usurio a a a a de um aplicativo. O pacote Swing conta com uma classe chamada JOptionPane que permite que voc e exiba facilmente uma caixa de dilogo contendo informaes ou para entrada de dados. a co // JOptionPaneTeste.java import javax.swing.*; public class JOptionPaneTeste { public static void main(String args[]) { String primeiroNumero, segundoNumero; int primeiro, segundo, soma; primeiroNumero = JOptionPane.showInputDialog("Entre com o primeiro nmero"); u segundoNumero = JOptionPane.showInputDialog("Entre com o segundo nmero"); u primeiro = Integer.parseInt(primeiroNumero); segundo = Integer.parseInt(segundoNumero); soma = primeiro + segundo; 13

JOptionPane.showMessageDialog(null, "A soma " + soma, "Resultado", e JOptionPane.PLAIN_MESSAGE); System.exit(0); } } Tipo de dilogo de mensagem a JOptionPane.ERROR MESSAGE JOptionPane.INFORMATION MESSAGE JOptionPane.WARNING MESSAGE JOptionPane.QUESTION MESSAGE Descrio ca Exibe uma caixa de dilogo que indica um erro a para o usurio do aplicativo. a Exibe uma caixa de dilogo com uma mensagem a informacional para o usurio do aplicativo. a Exibe um dilogo que adverte o usurio do aplia a cativo de um problema potencial. Exibe um dilogo que impe uma pergunta paa o ra o usurio do aplicativo. Isso normalmente a requer uma resposta como clicar em boto Yes a ou No. Exibe um dilogo que simplesmente contm uma a e mensagem sem cone.

JOptionPane.PLAIN MESSAGE

3.2

Criando uma Janela

// PrimeiraJanela.java import javax.swing.*; class Janela extends JFrame { public Janela() { setTitle("Primeira Janela"); setSize(400, 200); } } public class PrimeiraJanela { public static void main(String arguments[]) { Janela j = new Janela(); j.show(); 14

} }

3.3

Adicionando Componentes e Manipulando Eventos

// UsandoComponentes.java import java.awt.*; import java.awt.event.*; import javax.swing.*; class Janela extends JFrame { JTextField tfCampo1, tfCampo2, tfResultado; public Janela() { setTitle("Usando Componentes e Manipulando Eventos"); JLabel lValor1 = new JLabel("Primeiro Valor"); JLabel lValor2 = new JLabel("Segundo valor"); JButton bSomar = new JButton("Calcular"); tfCampo1 = new JTextField("0"); tfCampo2 = new JTextField("0"); tfResultado = new JTextField(); tfResultado.setEditable(false); bSomar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int v1 = Integer.parseInt(tfCampo1.getText()); int v2 = Integer.parseInt(tfCampo2.getText()); tfResultado.setText(String.valueOf(v1 + v2)); } }); Container c = getContentPane(); c.setLayout(new GridLayout(3, 2)); c.add(lValor1); c.add(tfCampo1); c.add(lValor2); c.add(tfCampo2); c.add(bSomar); c.add(tfResultado); pack(); 15

} } public class UsandoComponentes { public static void main(String arguments[]) { Janela j = new Janela(); j.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); j.show(); } }

Figura 3.1: Screenshot do segundo exemplo

3.4

Trabalhando com Menus

// MenuDemo.java import javax.swing.*; import java.awt.*; import java.awt.event.*; class Janela extends JFrame { JTextArea texto; public Janela() { setTitle("Visualizador de Arquivos"); JMenuBar bar = new JMenuBar(); setJMenuBar(bar); 16

JMenu menuArquivo = new JMenu("Arquivo"); menuArquivo.setMnemonic(A); JMenu menuEstilo = new JMenu("Estilo"); menuEstilo.setMnemonic(E); JMenu menuAjuda = new JMenu("Ajuda"); menuAjuda.setMnemonic(U); bar.add(menuArquivo); bar.add(menuEstilo); bar.add(menuAjuda); JMenuItem itemAbrir = new JMenuItem("Abrir"); itemAbrir.setMnemonic(A); itemAbrir.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showSaveDialog(Janela.this); } }); menuArquivo.add(itemAbrir); menuArquivo.addSeparator(); menuArquivo.add(new JMenuItem("Sair")); menuEstilo.add(new JMenuItem("Copiar")); menuEstilo.add(new JMenuItem("Colar")); menuEstilo.add(new JMenuItem("Recortar")); JMenuItem itemSobre = new JMenuItem("Sobre..."); itemSobre.setMnemonic(S); itemSobre.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "Mini Visualizador de Arquivos"); } }); menuAjuda.add(itemSobre); setSize(400, 200); texto = new JTextArea(); getContentPane().add(texto); } } public class MenuDemo { public static void main(String args[]) { Janela j = new Janela(); j.show(); 17

} }

3.5

Selecionando a Aparncia e Comportamento e

// MudaAparencia.java import javax.swing.*; import java.awt.*; class Janela extends JFrame { public Janela() { Container c = getContentPane(); c.setLayout(new GridLayout(2, 2)); c.add(new JButton("Teste")); c.add(new JTextField()); c.add(new JComboBox()); c.add(new JRadioButton("Teste")); pack(); } } public class MudaAparencia { public static void main(String args[]) { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); } catch (Exception e) { } Janela j = new Janela(); j.show(); } }

18

Argumento para setLookAndFeel UIManager.getCrossPlatformLookAndFeelClassName() UIManager.getSystemLookAndFeelClassName()

javax.swing.plaf.metal.MetalLookAndFeel" javax.swing.plaf.windows.WindowsLookAndFeel" com.sun.java.swing.plaf.motif.MotifLookAndFeel" javax.swing.plaf.mac.MacLookAndFeel"

Descrio ca Retorna a string do look-and-feel que garantie do funcionar: o Java Look-and-Feel. Especica o look-and-feel para a plataforma corrente. Em plataformas Win32, seta o look-andfeel do Windows, em plataformas Mac OS, o Mac OS Look-and-feel. Especica o Java look-and-feel (nome de cdigo o era Metal). Somente pode ser usado em plataformas Win32. Especica o look-and-feel CDE/Motif. Pode ser usado em qualquer plataforma. Especica o look-and-feel do Mac OS, somente pode ser usado em plataformas rodando Mac OS.

19

Cap tulo 4

Desenvolvimento de Applets
Applets so pequenos programas que podem ser embutidos em uma pgina web. Quando Java foi lanada, a a c a possibilidade do desenvolvimento de applets foi o carro chefe do marketing da linguagem. As applets trouxeram um grau de interatividade que at ento no era poss de ser encontrada na web. e a a vel // HelloWorldApplet.java import java.applet.Applet; import java.awt.Graphics; public class HelloWorldApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } } Para que o programa acima possa ser executado, ele precisa ser embutido em uma pgina html, como a a mostrada a seguir: <HTML> <HEAD> <TITLE> Hello World </TITLE> </HEAD> <BODY> <applet code="HelloWorldApplet.class" width="150" height="50"> </applet> </BODY> </HTML>

20

4.1

A Tag HTML Applet

Applets so embutidas em pginas web atravs das tags APPLET e /APPLET . A tag APPLET a a e e similar ` tag IMG . Assim como a tag IMG , APPLET referencia um arquivo que no faz parte da a a pgina HTML no qual ele embutido. A tag IMG faz isso atravs do atributo SRC, APPLET usa a e e para isso o atribudo CODE. O atributo CODE diz ao browser aonde encontrar um arquivo compilado .class.

4.2

Segurana c

A possibilidade de surfar na Internet, e executar applets em sites no conveis poderia ser um ser a a ssimo problema de segurana se no fossem os mecanismos de proteo e segurana da linguagem Java. Na c a ca c verdade, tanto applets como aplicativos Java so muito mais seguros do que cdigo escrito em linguagens a o tradicionais. Programas em Java so muito menos sucet a veis a erros comuns de programao envolvendo ca acesso a memria como em C. Applets, alm disso, implementam restries de segurana adicionais para o e co c proteger usurios de cdigo malicioso. a o O que uma applet pode fazer: Desenhar imagens; Criar uma nova janela; Efeitos sonoros; Receber entrada do usurio a partir do teclado ou mouse; a Fazer uma conexo de rede com o servidor a partir do qual a applet foi baixada. a Por outro lado, uma applet no tem permisso para: a a Escrever dados em qualquer unidade local; Ler dados de unidades locais sem permisso do usurio; a a Apagar arquivos; Ler ou escrever blocos arbitrrios de memria. Todo acesso a memria estritamente controlado. a o o e Fazer uma conexo de rede com exceo da mquina que a applet foi baixada; a ca a Introduzir um v rus ou um cavalo de tria no sistema; o

21

Cap tulo 5

Manipulao de Arquivos ca
5.1 Lendo Arquivos

// LeArquivo.java import java.io.*; public class LeArquivo { public static void main(String args[]) { try { FileInputStream file = new FileInputStream(args[0]); int cont = 0; int input; while (true) { input = file.read(); if (input == -1) break; System.out.print((char)input); cont++; } file.close(); System.out.println("\nBytes lidos: " + cont); } catch (IOException e) { System.out.println("Erro" + e.toString()); } } } 22

5.2

Gravando Arquivos

// GravaArquivo.java import java.io.*; public class GravaArquivo { public static void main(String args[]) { int[] data = { 71, 73, 70, 56, 57, 97, 15, 0, 15, 0, 128, 0, 0, 255, 255, 255, 0, 0, 0, 44, 0, 0, 0, 0, 15, 0, 15, 0, 0, 2, 33, 132, 127, 161, 200, 185, 205, 84, 128, 241, 81, 35, 175, 155, 26, 228, 254, 105, 33, 102, 121, 165, 201, 145, 169, 154, 142, 172, 116, 162, 240, 90, 197, 5, 0, 59 }; try { FileOutputStream file = new FileOutputStream("pix.gif"); for (int i = 0; i < data.length; i++) { file.write(data[i]); } file.close(); } catch (IOException e) { System.out.println("Erro:" + e.toString()); } } }

5.3

Listando o Conte do de um Diretrio u o

// Dir.java import java.io.*; public class Dir { public static void main(String args[]) { File dirAtual = new File("."); String listaArquivos[] = dirAtual.list();

23

for (int i = 0; i < listaArquivos.length; i++) { File arquivoAtual = new File(listaArquivos[i]); System.out.println(listaArquivos[i] + " [" + arquivoAtual.length() + " bytes]"); } } }

5.4

Obtendo Entrada do Console

// LendoConsole.java import java.io.*; public class LendoConsole { public static void main(String args[]) { BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); int v1, v2, soma; try { System.out.print("Digite o primeiro valor: "); v1 = Integer.parseInt(br.readLine()); System.out.print("Digite o segundo valor: "); v2 = Integer.parseInt(br.readLine()); soma = v1 + v2; System.out.println("Soma dos valores: " + soma); } catch (IOException e) { System.out.println("Erro de entrada: " + e); } } }

24

Cap tulo 6

Programao Concorrente: ca Multithreading


Java a unica entre as linguagens de programao de uso geral e popular que tem recursos nativos de e ca programao concorrente. Isso signica que um unico programa pode ter mltiplas linhas de execuo ca u ca rodando de forma simultnea. a

6.1

Criando uma Linha de Execuao c

// ThreadDemo1.java class Linha extends Thread { public void run() { for (int i = 0; i < 6; i++) { System.out.println("Teste" + i); try { sleep(10); } catch (InterruptedException e) { System.err.println(e.toString()); } } } } public class ThreadDemo1 { public static void main(String args[]) { Linha l1 = new Linha(); Linha l2 = new Linha();

25

l1.start(); l2.start(); } }

6.2

Sincronizando Dados Compartilhados entre Linhas

Compartilhar dados uma armadilha do sistema de linhas de execuo. Se duas linhas tm acesso come ca e partilhado ` mesma varivel, isto , se ambas tm acesso ` leitura e gravao, podem acontecer resultados a a e e a ca estranhos caso o seu programa no tome cuidados especiais para coordenar o acesso das linhas aos daa dos. Para sincronizar dados compartilhados, cria-se um mtodo para acessar os dados compartilhados, e e utiliza-se a palavra-chave synchronized na declarao do mtodo. Ento Java restringe o acesso ao ca e a mtodo para que somente uma linha de cada vez possa acess-lo. e a // DadosCompartilhados.java class Conta { static int balanco = 10000000; static int despesa = 0; static public synchronized void transacao(int montante) { if (montante <= balanco) { balanco = balanco - montante; for (float a = 0; a < 100000; a++); despesa = despesa + montante; System.out.print(balanco + despesa + " "); } else { System.out.println("Saldo inferior ao necessrio"); a } } } class minhaThread extends Thread { public void run() { for (int i = 0; i < 1000; i++) Conta.transacao((int)(Math.random() * 100)); } } 26

public class DadosCompartilhados { public static void main(String args[]) { new minhaThread().start(); new minhaThread().start(); new minhaThread().start(); new minhaThread().start(); new minhaThread().start(); new minhaThread().start(); } }

27

Cap tulo 7

Programao em Rede ca
Uma das metas do projeto Java era oferecer suporte ao desenvolvimento de programas complexos que fossem pequenos, livros de erros e fceis de entender. Em outras linguagens de programao, executar a ca a tarefa de rede mais simples pode exigir pginas de cdigo. Em Java muitas destas tarefas podem ser a o reduzidas a uma unica e simples intruo. ca

7.1

Lendo um Arquivo atravs da Internet e

// URLTeste.java import java.io.*; import java.net.*; public class URLTeste { public static void main(String args[]) { try { URL url = new URL(args[0]); DataInputStream dis = new DataInputStream(url.openStream()); String line = dis.readLine(); while (line != null) { System.out.println(line); line = dis.readLine(); } } catch (IOException e) { System.out.println("Erro: " + e.getMessage()); }

28

} }

7.2

Trabalhando com Sockets

// CriandoSocket.java import java.net.*; import java.io.*; public class CriandoSocket { public static void main(String args[]) { String host; int porta; host = args[0]; porta = Integer.parseInt(args[1]); try { Socket s = new Socket(host, porta); DataInputStream dis = new DataInputStream(s.getInputStream()); PrintStream ps = new PrintStream(s.getOutputStream()); ps.println("teste\n"); while (true) { String msg = dis.readLine(); if (msg == null) break; System.out.println(msg); } } catch (IOException e) { System.out.println("Erro: " + e ); } } }

7.3

Criando um ServerSocket

29

7.4

Cliente Multithreaded

// ClienteMultiThread.java import java.net.*; import java.io.*; public class ClienteMultiThread { public static void main(String args[]) { String host; int porta; InputStream istream = System.in; DataInputStream distream = new DataInputStream(istream); host = args[0]; porta = Integer.parseInt(args[1]); try { Socket s = new Socket(host, porta); PrintStream ps = new PrintStream(s.getOutputStream()); new MostraDados(s).start(); while (true) { ps.println(distream.readLine()); } } catch (IOException e) { System.out.println("Erro: " + e ); } } } class MostraDados extends Thread { Socket s; public MostraDados(Socket s) { this.s = s; } public void run() {

30

try { DataInputStream dis = new DataInputStream(s.getInputStream()); while (true) { String msg = dis.readLine(); if (msg == null) break; System.out.println(msg); } } catch (IOException e) { System.out.println("Erro: " + e); } } }

31

Cap tulo 8

Conectividade com Banco de Dados: JDBC


JDBC signica Java Database Connectivity (Conectividade de Banco de Dados em Java), e uma interface e de programao de aplicaes (API) desenvolvida pela Sun que permite a um programa Java acessar um ca co SGBD (Sistema Gerenciador de Banco de Dados). A JDBC facilita a conexo com um banco de dados, a o envio de instrues SQL e a obteno de resultados. co ca

8.1

Fazendo uma Consulta

// DatabaseTeste.java import java.net.*; import java.sql.*; public class DatabaseTeste { public static void main(String args[]) { java.sql.Connection conn = null; String dburl = "jdbc:mysql://localhost/pds?user=root&password="; String sql_str = "SELECT * FROM usuarios"; try { Class.forName("org.gjt.mm.mysql.Driver").newInstance(); conn = DriverManager.getConnection(dburl); Statement sq_stmt = conn.createStatement(); ResultSet rs = sq_stmt.executeQuery(sql_str); while (rs.next()) { int id = rs.getInt("id");

32

String nome = rs.getString("nome"); String endereco = rs.getString("endereco"); System.out.println("ID:" + id); System.out.println("Nome: " + nome); System.out.println("Endereco: " + endereco + "\n"); } } catch (Exception e) { System.out.println("Erro: " + e); } } }

33

Bibliograa
[1] Java 1001 Dicas de Programao. Mark C. Chan, Steven W. Grith, Anthony F. Iasi. Makron Books. ca 1999. [2] Aprenda Java 1.2 em 21 Dias. Laura Lemay, Rogers Cadenhead. Ed. Campus. 1999. [3] Java 2: Como Programar, H. M. Deitel, P. J. Deitel. Bookman. 3a edio. 2001. ca [4] Core Java Volume I - Fundamentos. Cay S. Horstmann, Gary Cornell. Makron Books. 2001.

34

Você também pode gostar