Vous êtes sur la page 1sur 97

1

ndice
1 - Programao Visual Swing.........................................................................................................................2 1.1) Introduo.................................................................................................................................................2 1.2) Componentes do Swing............................................................................................................................3 1.3) Execute 1: Documentao do Swing.........................................................................................................5 1.4) Criando uma interface...............................................................................................................................5 1.5) Desenvolvendo uma estrutura ..................................................................................................................6 1.6) Execute 2 Desenvolvendo uma estrutura..................................................................................................6 1.7) Criando Botes..........................................................................................................................................7 1.8) Execute 3: Criando botes.........................................................................................................................7 1.9) Criando Rtulos.........................................................................................................................................8 1.10) Execute 4: Criando Rtulos.....................................................................................................................8 1.11) Criando Campos de Texto.......................................................................................................................9 1.12) Execute 5: Criando campos de texto.....................................................................................................10 1.13) Criando reas de texto..........................................................................................................................11 1.14) Execute 6: Criando reas de Texto.......................................................................................................11 1.15) Criando Painis deslizantes...................................................................................................................13 1.16) Execute 7: Criando painis deslizantes................................................................................................14 1.17) Criando Barras de rolagem....................................................................................................................15 1.18) Execute 8: Criando Barras de Rolagem................................................................................................15 1.19) Criando Caixas de verificao...............................................................................................................16 1.20) Execute 9: Criando caixa de verificao...............................................................................................17 1.21) Criando botes de rdio.........................................................................................................................18 1.22) Execute 10: Criando botes de escolha.................................................................................................18 1.23) Listas suspensas e caixas de combinao..............................................................................................19 1.24) Execute 11: Criando listas suspensas....................................................................................................20 1.25) Caixas de Dilogo de confirmao........................................................................................................21 1.26) Execute 12: Caixa de dilogo de confirmao......................................................................................21 1.27) Caixas de dilogo de entrada.................................................................................................................22 1.28) Execute 13: Caixa de dilogo de entrada..............................................................................................22 1.29) Caixas de dilogo de mensagem...........................................................................................................22 1.30) Execute 14: Caixa de dilogo de mensagem.........................................................................................23 1.31) Caixas de dilogo de opo...................................................................................................................23 1.32) Execute 15: Caixa de dilogo de opo.................................................................................................24 1.33) Controles deslizantes.............................................................................................................................25 1.34) Execute 16: Controles deslizantes.........................................................................................................25 2 - Organizando componentes em uma interface com o usurio.......................................................................27 2.1) Layout de Fluxo......................................................................................................................................27 2.2) Execute 17: Gerenciador FlowLayout.....................................................................................................27 2.3) Layout de grade.......................................................................................................................................28 2.4) Execute 18: Gerenciador GridLayout......................................................................................................28 2.5) Layout de Borda......................................................................................................................................29 2.6) Execute 19: Gerenciador BorderLayout..................................................................................................30 3 - Respondendo entrada do usurio...............................................................................................................31 3.1) Receptores de evento..............................................................................................................................31 3.2) Configurando componentes.....................................................................................................................32 3.3) Evento de Ao.......................................................................................................................................33 3.4) Execute 20: Evento de Ao...................................................................................................................33 3.5) Eventos de foco.......................................................................................................................................35 3.6) Execute 21: Evento de foco.....................................................................................................................35 3.7) Eventos de tecla.......................................................................................................................................36 SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

3.8) Execute 22: Evento de tecla....................................................................................................................36 3.9) Eventos de mouse....................................................................................................................................38 3.10) Execute 23: Evento de mouse...............................................................................................................38 3.11) Eventos de movimento de mouse..........................................................................................................40 3.12) Execute 24: Evento de Movimento do Mouse......................................................................................40 3.13) Eventos de janela...................................................................................................................................41 3.14) Execute 25: Evento de Janela................................................................................................................41 3.15) Criando Menus......................................................................................................................................43 3.16) Execute 26: Criando Menus..................................................................................................................43 3.17) Criando Barra de Ferramentas ...............................................................................................................46 3.18) Execute 27: Criando barra de ferramentas ............................................................................................46 3.19) Exerccios de Reviso do capitulo I......................................................................................................48 4 - Aplicaes e Primitiva Grficas...................................................................................................................51 4.1) Linhas.....................................................................................................................................................51 4.2) Execute 28:Criando Linhas.....................................................................................................................51 4.3) Retngulos e Quadrados..........................................................................................................................52 4.4) Execute 29:Criando Retngulos e Quadrados.........................................................................................52 4.5) Elipses e Circunferncias.......................................................................................................................53 4.6) Execute 30: Criando Elipse e Circunferncias ........................................................................................53 4.7) Polgonos................................................................................................................................................54 4.8) Execute 31: Criando Elipse e Circunferncias ........................................................................................55 4.9) Melhorando as Aplicaes usando primitivas grficas..........................................................................56 4.10) Execute 32Criando Linhas e Elipse......................................................................................................56 4.11) Execute 33Criando Retngulos com grficos.......................................................................................57 4.12) Execute 34Criando Retngulos com grficos.......................................................................................58 5 - Threads.........................................................................................................................................................60 5.1) O que so threads? .................................................................................................................................60 5.2) Os estados de uma thread.......................................................................................................................61 5.3) Threads em Applets................................................................................................................................63 5.4) Herdando de Thread x Implementando Runnable...................................................................................64 5.5) Execute 35: Trabalhando com Thread.....................................................................................................64 5.6) Execute 36:Trabalhando com Thread......................................................................................................66 5.7) Execute 37: Trabalhando com Thread.....................................................................................................68 5.8) Execute 38: Trabalhando com Thread.....................................................................................................69 5.9) Execute 39Trabalhando com Thread.......................................................................................................71 6 - Acessando Banco de Dados.........................................................................................................................74 6.1) Acessando bancos de dados em JDBC ..................................................................................................75 6.2) Execute 40- Trabalhando com Banco de Dados.....................................................................................77 6.3) Execute 41- Trabalhando com Banco de Dados.....................................................................................80 6.4) Execute 42: Trabalhando com Banco de Dados......................................................................................85 7 - JSP (Java Server Page).................................................................................................................................97 7.1) O que JSP?............................................................................................................................................97

1 - Programao Visual Swing


1.1) Introduo
O Swing um biblioteca de classes para a construo de interface grfica baseada em componentes leves.
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

O Swing, que faz parte da biblioteca Java Foundation Classes, oferece uma maneira de fornecer uma interface grfica com o usurio em seus programas Java e de receber entradas do usurio com o teclado, o mouse ou outros dispositivos de entrada. De acordo com a Sun o nome correto JFC Project Swing padro na plataforma Java 2 (1.2). A biblioteca Swing uma extenso do Abstract Windowing Toolkit (awt), o pacote que oferecia suporte limitado para programao grfica na linguagem Java 1.0. O Swing oferece uma funcionalidade bastante aprimorada em relao ao seu antecessor: novos componentes, recursos de componente expandidos, melhor tratamento de eventos, aparncia e comportamento selecionveis. Vantagens do Swing: Swing tem um rico conjunto de componentes (muito mais que a AWT); Swing depende muito menos da plataforma nativa; Swing mantm o mesmo padro entre vrias plataformas. Desvantagem do Swing: Compatibilidade: requer Java 1.2 ou superior; Desempenho: componentes so desenhados em Java.

1.2) Componentes do Swing


Os componentes podem ser divididos da seguinte forma: Componentes Superiores: JFrame: janelas que possuem uma barra de ttulo, botes de maximizao e fechamento. JDialog: janelas usadas para fornecer dilogos com os usurios; JApplet: aplicaes que sero mostradas em um browser; Componentes Intermedirios: JPanel: painis que podem ser adicionados em janelas para facilitar a disposio dos componentes de uma interface. JScrollPane: painis que podem ser adicionados em janelas e que possuem barras de rolagens. JToolBar: barras de ferramentas que podem ser adicionadas em janelas. JInternalFrame: frames que podem ser adicionados internamentes a outros frames.

Componentes Internos: JLabel: componente usado para mostrar rtulos (textos) ou elementos grficos que fornecem informaes; JButton: regies clicveis com texto ou elementos grficos que indicam seu objetivo; JTextField: campo de textos que recebem entradas do teclado e permitem que o texto seja editado; JComboBox: grupos de itens relacionados que podem ser selecionados a partir de menus suspensos; JRadioButton: botes de escolha em crculos que podem ser marcados ou desmarcados. JCheckBox: caixas de verificao que podem ser marcadas ou desmarcadas. JButtonGroup: agrupar componentes de caixa de verificao e botes de escolha;
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

JList: grupos de itens relacionados que podem ser selecionados a partir de janelas rolantes; JTextArea: reas de texto que recebem entradas do teclado e permitem que o texto seja editado; JSlider: controles deslizantes horizontais; JProgressBar: barras de progresso; JMenuBar: barras de menus; JMenu; componentes para inserir menus em um barra de menu; JMenuITem: componentes para inserir itens de menus em um menu.

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

1.3) Execute 1: Documentao do Swing


1) Abra o meu computador 2) Duplo clique no Disco local C: 3) Duplo clique na pasta do SDK do java: j2sdk1.4.2_04 4) Duplo clique na pasta docs 5) Duplo clique no arquivo index.html 6) Clique no link API & Language, clique no link Java 2 Platform API Specification 7) A seguinte tela mostrada:

8) Clique no link do pacote Swing: javax.swing 9) Veja os componentes do swing.

1.4) Criando uma interface


O primeiro passo na criao de um aplicativo Swing gerar uma classe que represente a interface com o usurio. Um objeto dessa classe servir como continer, o componente que contm todos os outros componentes que sero apresentados. Em muitos projetos, o principal objeto da interface ser uma janela simples (Jwindow) ou uma janela mais especializada chamada de quadro (JFrame).
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

Uma janela um continer que pode ser apresentado na rea de trabalho do usurio.

1.5) Desenvolvendo uma estrutura


Uma maneira de criar um aplicativo grfico Swing tornar a interface uma sub-classe de JFrame.

1.6) Execute 2 Desenvolvendo uma estrutura


1) Abra o Jcreator; 2) Digite o seguinte cdigo: // ExemploFrame.java import javax.swing.*; public class ExemploFrame extends JFrame { // sub-classe JFrame // construtor public ExemploFrame(){ super("Exemplo de Frame"); // construir uma janela com o ttulo setSize(300,100); // uma janela com 300 x 100 setDefaultCloseOperation(EXIT_ON_CLOSE); // mtodo para fechar janela setVisible(true); // mtodo para tornar a janela visvel } public static void main (String[] a){ ExemploFrame e = new ExemploFrame(); } } 3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

Todo quadro tem botes de maximizao, minimizao e fechamento na barra de ttulo sob controle do usurio (os mesmos controles presentes na interface de outros programas de software que estejam em execuo em seu sistema). Na linguagem Java, o comportamento normal quando um quadro fechado continuar a execuo do aplicativo. Para mudar isso, voc deve chamar o mtodo setDefaultCloseOperation() do quadro com uma das quatro variveis de classe JFrame como argumento: EXIT_ON_CLOSE: Sai do programa quando o quadro fechado. DISPOSE_ON_CLOSE: fecha o quadro, desfaz-se do objeto quadro e continua executando o aplicativo. DO_NOTHING_ON_CLOSE: mantm o quadro aberto e contnua executando. HIDE_ON_CLOSE: fecha o quadro e continua executando.

1.7) Criando Botes


Um boto do Swing pode apresentar um rtulo de texto, um cone grfico ou uma combinao de ambos. Os mtodos construtores que voc pode usar incluem: JButton(String): cria um boto rotulado com o texto especificado. JButton(Icon): cria um boto que apresenta o cone especificado. JButton(String,Icon): cria um boto com o texto e o cone especificados.

1.8) Execute 3: Criando botes


1) Abra o Jcreator 2) Digite o cdigo abaixo: // ExemploBotao.java import javax.swing.*; public class ExemploBotao extends JFrame { // atributos private JButton rotulo = new JButton("Botes Rtulados"); private JButton rotuloicone = new JButton("Botes Rtulados e cones",new ImageIcon("logo.gif")); private JButton icone = new JButton(new ImageIcon("logo.gif")); private JPanel painel = new JPanel(); // construtor public ExemploBotao(){ super("Exemplo Boto"); setSize(200,130); setDefaultCloseOperation(EXIT_ON_CLOSE); // adicionar os botes no painel painel.add(rotulo);
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

painel.add(rotuloicone); painel.add(icone); setContentPane(painel); show(); } public static void main(String[] argumentos){ ExemploBotao b = new ExemploBotao(); } } 3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:

1.9) Criando Rtulos


Um rtulo um componente de usurio que contm texto informativos, um cone ou ambos. Criado a partir da classe JLabel, um rtulo usado muitas vezes para identificar o objetivos de outros componentes em uma interface. O rtulo no pode ser editado diretamente por um usurio. Para criar um rtulo, voc pode usar os seguintes construtores: JLabel (String): um rtulo com o texto especificado. JLabel (String, Int): um rtulo com o texto e o alinhamento especificados JLabel (String, Icon, Int): um rtulo com o texto, o cone e o alinhamento especificados O alinhamento de um rtulo determina como seu texto ou cone esta alinhado em relao rea ocupada na janela. Trs alinhamentos podem ser usados: LEFT, CENTER ou RIGHT. Caso no seja especificado o alinhamento o padro CENTER.

1.10) Execute 4: Criando Rtulos


1) Abra o Jcreator 2) Digite o cdigo abaixo: // ExemploRotulo.java import javax.swing.*; public class ExemploRotulo extends JFrame {
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

// atributos private JLabel texto ");

= new JLabel("Rtulo com texto alinhamento centralizado

private JLabel textoalinhar = new JLabel("Rtulo com texto alinhado a esquerda",JLabel.LEFT); private JLabel textoicone = new JLabel("Rtulo com texto, cone alinhado a direita",new ImageIcon("logo.gif"),JLabel.RIGHT); private JPanel painel = new JPanel(); // construtor public ExemploRotulo(){ super("Exemplo Rtulos"); setSize(350,150); setDefaultCloseOperation(EXIT_ON_CLOSE); // adicionando os rtulos no painel painel.add(texto); painel.add(textoalinhar); painel.add(textoicone); setContentPane(painel); show(); } public static void main(String[] argumentos){ ExemploRotulo r= new ExemploRotulo(); } } 3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:

1.11) Criando Campos de Texto


Um campo de texto uma rea em uma interface onde um usurio pode introduzir e modificar texto com um teclado. Ele, que representado pela classe JTextField, pode manipular uma linha de entrada.
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

10

Os mtodos construtores incluem o seguinte: JTextField(): um campo de texto vazio JTextField(int): um campo de texto com largura especificada JTextField(String, int): um campo de texto com o texto e a largura especificados

1.12) Execute 5: Criando campos de texto


1) Abra o jcreator 2) Digite o cdigo: // ExemploCampoTexto.java import javax.swing.*; public class ExemploCampoTexto extends JFrame { // atributos private JTextField vazio = new JTextField(); private JTextField largura = new JTextField(30); private JTextField textolargura = new JTextField("Hytec Informtica",25); private JPanel painel = new JPanel(); // construtor public ExemploCampoTexto(){ super("Exemplo Campo Texto"); setSize(350,150); setDefaultCloseOperation(EXIT_ON_CLOSE); // adicionando os campos de texto no painel painel.add(vazio); painel.add(largura); painel.add(textolargura); setContentPane(painel); show(); } public static void main(String[] argumentos){ ExemploCampoTexto t= new ExemploCampoTexto(); } } 3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

11

1.13) Criando reas de texto


As reas de texto, campos de texto editvel que manipulam mais de uma linha de entrada, so implementados com a classe JTextArea. Essa classe inclui os seguintes mtodos construtores: JTextArea(int, int): uma rea de texto com o nmero especificado de linhas e colunas JTextArea(String, int, int): uma rea de texto com o texto, as linhas e as colunas especificados

1.14) Execute 6: Criando reas de Texto


1) Abra o Jcreator 2) Digite o cdigo: // ExemploAreaTexto.java import javax.swing.*; public class ExemploAreaTexto extends JFrame { // atributos private JTextArea lincol = new JTextArea(5,30); private JTextArea textolincol = new JTextArea("Digite o texto aqui",12,40); private JPanel painel = new JPanel(); // construtor public ExemploAreaTexto(){ super("Exemplo Area de Texto"); setSize(450,350); setDefaultCloseOperation(EXIT_ON_CLOSE); // adicionando area de texto no painel painel.add(lincol); painel.add(textolincol); setContentPane(painel); show(); }
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

12

public static void main(String[] argumentos){ ExemploAreaTexto a= new ExemploAreaTexto(); } }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

13

3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:

1.15) Criando Painis deslizantes


As reas de texto no Swing no incluem barras de rolagem horizontal ou vertical e no existem maneiras de inclu-las usando o componente sozinho. Essa uma diferena entre as reas de texto do Swing e suas equivalentes no AWT. O motivo da mudana que Swing introduz um novo continer que pode ser usado para conter qualquer componente que possa se rolado: JScrollPane. Um painel deslizante associado a um componente no mtodo construtor do painel. Voc pode usar o seguinte: JScrollPane(Component): um painel deslizante que contm o componente especificado JScrollPane(Component, int, int): um painel deslizante com o componente, a configurao da barra de rolagem vertical e a configurao da barra de rolagem horizontal especificados As barras de rolagens so configuradas usando: VERTICAL_SCROLLBAR_ALWAYS ou HORIZONTAL_SCROLLBAR_ALWAYS: sempre colocar a barra de rolagem VERTICAL_SCROLLBAR_AS_NEED ou HORIZONTAL_SCROLLBAR_AS_NEED: colocar quando for necessrio a utilizao das barras na janela VERTICAL_SCROLLBAR_NEVER ou HORIZONTAL_SCROLLBAR_NEVER: no colocar a barra de rolagem
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

14

1.16) Execute 7: Criando painis deslizantes


1) Abra o Jcreator 2) Digite o cdigo abaixo: //ExemploPaineisdes.java import javax.swing.*; public class ExemploPaineisdes extends JFrame { JPanel pane = new JPanel(); JTextArea letras = new JTextArea(5,15); JScrollPane rolar = new JScrollPane(letras,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZO NTAL_SCROLLBAR_NEVER); public ExemploPaineisdes(){ super("Exemplo de Paineis Deslizantes"); setSize(300,300); pane.add(rolar); setContentPane(pane); setDefaultCloseOperation(EXIT_ON_CLOSE); show(); } public static void main(String a[]){ ExemploPaineisdes p = new ExemploPaineisdes(); } }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

15

3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:

1.17) Criando Barras de rolagem


As barras de rolagem so componentes que permitem selecionar um valor atravs da movimentao de um elevador entre duas setas. Vrios componentes tem funcionalidade de barra de rolagem interna, incluindo reas de texto e listas rolantes. Normalmente, as barras de rolagem so criadas especificando os valores mnimos e mximo que podem ser configurados com o componente. Voc pode usar os seguintes mtodos contrutores: JScrollBar(int): uma barra de rolagem com a orientao especificada JScrollBar(int, int, int, int, int): uma barra de rolagem com a orientao, o valor inicia, o tamanho do elevador, o valor mnimo e o valor mximo especificados. A orientao indicada pelas variveis de classe JScrollBar, HORIZONTAL e VERTICAL.

1.18) Execute 8: Criando Barras de Rolagem


1) Abra o Jcreator 2) Digite o cdigo: //ExemploBarraRola.java import javax.swing.*; public class ExemploBarraRola extends JFrame { JScrollBar bvertical = new JScrollBar(JScrollBar.VERTICAL);
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

16

JScrollBar bhorizontal = new JScrollBar(JScrollBar.HORIZONTAL); JScrollBar barrarola = new JScrollBar(JScrollBar.HORIZONTAL,33,0,10,50); JPanel painel = new JPanel(); public ExemploBarraRola(){ super("Exemplo de Barra de Rolagem"); setSize(400,200); setDefaultCloseOperation(EXIT_ON_CLOSE); painel.add(bvertical); painel.add(bhorizontal); painel.add(barrarola); setContentPane(painel); show(); } public static void main(String a[]){ ExemploBarraRola r = new ExemploBarraRola(); } } 3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:

1.19) Criando Caixas de verificao


A caixas de verificao componente que tem apenas dois valores possveis: selecionado ou no selecionado. Pode ser agrupado de modo que apenas um componente em um grupo possa ser selecionado por vez. As caixas de verificao (a classe JCheckBox) so caixas rotuladas, ou no, que contm uma marca de seleo quando esto selecionadas e nada no caso contrrio. Este componente costuma ser usado para fazer uma escolha simples do tipo sim-no ou ligado-desligado em um programa. A classe JChecBox, inclui os seguintes mtodos construtores: JCheckBox(String): uma caixa de verificao com o rtulo de texto especificado
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

17

JCheckBox(String,boolean): uma caixa de verificao com o rtulo de texto especificado que selecionada se o segundo argumento for true JCheckBox(Icon): uma caixa de verificao com rtulo de cone especificado JCheckBox(Icon,boolean): uma caixa de verificao com o rtulo de cone especificado que selecionada se o segundo argumento for true

1.20) Execute 9: Criando caixa de verificao


1) Abra o Jcreator 2) Digite o cdigo: // ExemploCheckBox.java import javax.swing.*; public class ExemploCheckBox extends JFrame { JCheckBox[] ensino = new JCheckBox[4]; JLabel lensino = new JLabel("Ensino: "); public ExemploCheckBox(){ super("Exemplo de Caixa de Verificao"); setSize(400,100); setDefaultCloseOperation(EXIT_ON_CLOSE); ensino[0] = new JCheckBox("Fundamental",true); ensino[1] = new JCheckBox("Mdio",false); ensino[2] = new JCheckBox("Superior",false); ensino[3] = new JCheckBox("Tcnico",false); JPanel painel = new JPanel(); painel.add(lensino); for (int i=0;i<4;i++){ painel.add(ensino[i]); } setContentPane(painel); show(); } public static void main(String[] a){ ExemploCheckBox b = new ExemploCheckBox(); } }
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

18

3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:

1.21) Criando botes de rdio


Os botes de rdio so componentes que tm apenas dois valores possveis: selecionado ou no selecionado. Podem ser agrupado de modo que apenas um componente em um grupo possa ser selecionado por vez. Os botes de rdio (a classe JRadioButton) so crculos que contm um ponto quando selecionados e, do contrrio, tambm ficam vazios. Esse componente costumam ser usados para fazer uma escolha simples do tipo sim-no ou ligado-desligado em um programa. Os seguintes construtores esto disponveis para a classe JRadioButton: JRadioButton(String): um boto de escolha com o rtulo de texto especificado JRadioButton(String,boolean): um boto de escolha com o rtulo de texto especificado que selecionada se o segundo argumento for true JRadioButton(Icon): um boto de escolha com rtulo de cone especificado JRadioButton(Icon,boolean): um boto de escolha com o rtulo de cone especificado que selecionada se o segundo argumento for true O objeto ButtonGroup controla todos os botes de escolha em seu grupo. Chame o mtodo add(Component) do grupo para incluir o componente especificado nele.

1.22) Execute 10: Criando botes de escolha


1) Abra o Jcreator 2) Digite o cdigo: //ExemploRadioButton.java import javax.swing.*; public class ExemploRadioButton extends JFrame { JLabel lsexo = new JLabel("Sexo:"); JRadioButton feminino = new JRadioButton("Feminino");
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

19

JRadioButton masculino = new JRadioButton("Masculino"); ButtonGroup grupo = new ButtonGroup(); JPanel painel = new JPanel(); public ExemploRadioButton(){ super("Exemplos de Botes de Escolha"); setSize(300,100); setDefaultCloseOperation(EXIT_ON_CLOSE); setContentPane(painel); grupo.add(feminino); grupo.add(masculino); painel.add(lsexo); painel.add(feminino); painel.add(masculino); show(); } public static void main(String a[]){ ExemploRadioButton r = new ExemploRadioButton(); } } 3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:

1.23) Listas suspensas e caixas de combinao


A classe JcomboBox de Swig pode ser usada para criar dois tipos de componentes de interface com o usurio: listas suspensas e caixas de combinao. As listas suspensas, tambm chamadas de listas de ecolha, so componentes que permitem que um nico item seja escolhido em uma lista. Esta, pode ser configurada para que aparea apenas quando um usurio clicar no componente, ocupando menos espao em uma interface grfica com o usurio. As caixas de combinao so lista suspensas com um recurso extra: um campo de texto que tambm pode ser usado para fornecer uma resposta. As etapas a seguir mostram como uma lista suspensa poder ser criada: O construtor JcomboBox() usado sem argumentos. O mtodo addItem(Object) da caixa de combinao inclui itens na lista.
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

20

1.24) Execute 11: Criando listas suspensas


1) Abra o Jcreator 2) Digite o cdigo abaixo: //ExemploLista.java import javax.swing.* public class ExemploLista extends JFrame { JComboBox mes = new JComboBox(); JComboBox ano = new JComboBox(); public ExemploLista(){ super(Exemplo de Listas suspensas); setSize(220,90); setDefaultCloseOperation(EXIT_ON_CLOSE); JPanel painel = new JPanel(); JLabel niver = new JLabel(Aniversrio: ); painel.add(niver); for (int i=1; i<13;i++){ mes.addItem(+i); } for (int i=1900;i < 2100;i++){ ano.addItem(+i); } painel.add(mes); painel.add(ano); setContentPane(painel); show(); } public static void main (String a[]){ ExemploLista l = new ExemploLista(); } } 3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

21

1.25) Caixas de Dilogo de confirmao


A classe JOptionPane oferece vrios mtodos que podem ser usados para criar caixas de dilogo padro: pequenas janelas que fazem uma pergunta, avisam o usurio ou fornecem uma breve mensagem importante.O modo mais fcil de criar uma caixa de dilogo do tipo Yes/No/Cancel com a chamada de mtodo ShowConfirmDialog(Component, Object). O argumento Component especifica o continer que deve ser considerado a origem da caixa de dilogo e essa informao usada para determinar o local na tela no qual a janela de dilogo e essa informao usada para determinar o local na tal no qual a janela de dilogo deve ser apresentada. Se null for usado, ou se o continer no for um objeto Frame, a caixa de dilogo ficar centralizada na tela. O segundo argumento, Object, pode ser uma string, um componente ou um objeto Icon. Se for uma string, o texto ser apresentando na caixa de dilogo. Se for um componente ou um cone, o objeto ser apresentado no lugar de uma mensagem de texto. Esse mtodo retorna um de trs valores inteiros possveis e cada um deles uma varivel de classe de JOptionPane: YES_OPTION, NO_OPTION e CANCEL_OPTION.

1.26) Execute 12: Caixa de dilogo de confirmao


1) Abra o Jcreator 2) Digite o cdigo abaixo: // ExemploConfirma.java import javax.swing.*; public class ExemploConfirma extends JFrame { public ExemploConfirma(){ int resposta; resposta = JOptionPane.showConfirmDialog(null,"Tem Certeza que desja sair?"); if (resposta == 0) System.exit(0); } public static void main(String[] a){ ExemploConfirma c = new ExemploConfirma(); } } 3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

22

1.27) Caixas de dilogo de entrada


Uma caixa de dilogo de entrada faz uma pergunta e usa um campo de texto para armazenar a resposta. O modo mais fcil de criar uma caixa de dilogo de entrada com uma chamada ao mtodo showInputDialog(Component, Object). Os argumentos so o componente de origem e a string, o componente ou cone a ser apresentado na caixa. A chamada de mtodo da caixa de dilogo de entrada retorna uma string que representa a resposta do usurio.

1.28) Execute 13: Caixa de dilogo de entrada


1) Abra o Jcreator 2) Digite o cdigo abaixo: //ExemploEntrada.java import javax.swing.*; public class ExemploEntrada extends JFrame { public ExemploEntrada(){ String resposta = JOptionPane.showInputDialog(null, "Entre seu nome:"); } public static void main(String [] a){ ExemploEntrada e = new ExemploEntrada(); } } 3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

1.29) Caixas de dilogo de mensagem


Uma caixa de dilogo de mensagem uma janela simples que apresenta informaes. Ela pode ser criada com uma chamada ao mtodo showMessageDialog(Component, Object). Assim como nas outras caixas de dilogo, os argumentos so os componentes
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

23

de origem e a string, o componente ou cone que ser apresentado. Ao contrrio das outras, as caixas de dilogo de mensagem no retorna nenhum tipo de valor de reposta.

1.30) Execute 14: Caixa de dilogo de mensagem


1) Abra o Jcreator 2) Digite o cdigo abaixo: //ExemploMens.java import javax.swing.*; public class ExemploMens extends JFrame { public ExemploMens(){ JOptionPane.showMessageDialog(null, "Instalao Concluda"); } public static void main(String [] a){ ExemploMens m = new ExemploMens(); } } 3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

1.31) Caixas de dilogo de opo


A mais complexa das caixas de dilogo a caixa de dilogo de opo, que combina os recursos de todas. Ela pode ser criada com o mtodo showOptionDialog(Component, Object, String, int, int,Icon, Object[],Object). Os argumentos desse mtodo so os seguintes: O componente de origem da caixa de dilogo O texto, cone ou componente que ser apresentado. Uma string que ser apresentada na barra de ttulo. O tipo de caixa , usando as variveis de classe YES_NO_OPTION, YES_NO_CANCEL_OPTION ou o literal 0 se outros botes forem usados no lugar desses. O cone que ser apresentado, usando as variveis de classe ERRO_MESSAGE, INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE ou WARNING_MESSAGE ou o literal 0 se nenhuma dessas deve ser usada.
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

24

Um objeto Icon que ser apresentado no lugar de um dos cones do argumento anterior. Um array de objetos contendo os componentes ou outros objetos que representem as opes da caixa de dilogo, caso YES_NO_OPTION e YES_NO_CANCEL_OPTION no estejam sendo usadas. Objeto representando a seleo padro se as opes YES_NO_OPTION e YES_NO_CANCEL no estiverem sendo usadas. Os dois ltimo argumentos permitem que voc crie uma ampla gama de opes para a caixa de dilogo. possvel criar um array de botes, rtulos, campos de texto ou mesmo uma mistura de diferentes componentes como um array de objetos. Esses componentes so apresentados usando o gerenciador de layout de fluxo no existe um modo de especificar um gerenciador diferente dentro da caixa de dilogo.

1.32) Execute 15: Caixa de dilogo de opo


1) Abra o Jcreator 2) Digite o cdigo abaixo: //ExemploOpcao.java import javax.swing.*; public class ExemploOpcao extends JFrame { public ExemploOpcao(){ JButton[] sexo = new JButton[3]; sexo[0] = new JButton("Feminino"); sexo[1] = new JButton("MAsculino"); sexo[2] = new JButton("No Responder"); int reposta = JOptionPane.showOptionDialog(null, "Qual o sexo?","Sexo", 0,JOptionPane.INFORMATION_MESSAGE, null,sexo,sexo[2]); } public static void main(String [] a){ ExemploOpcao o = new ExemploOpcao(); } } 3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

25

1.33) Controles deslizantes


Os controles deslizantes, ques so implementados no Swing com a classe JSlider, permitem que um nmero seja configurado atravs da movimentao de um controle dentro do intervalo de um valor mnimo e um mximo. Em muitos casos, eles podem ser usados para entrada numrica no lugar de uma caixa de texto e tm a vantagem de restringir a entrada a um intervalo de valores aceitveis. Os controles deslizantes so horizontais por padro. Voc poder usar os seguintes mtodos contrutores: JSlider(int, int): um controle deslizante com os valores mnimo e mximo especificados. JSlider(int, int, int): um controle deslizante com o valor mnimo. o mximo e o inicial especificados. JSlider(int, int, int, int): um controle deslizante com a orientao e os valores mnimos, mximo e inicial especificados. Os elementos do rtulo do componente so estabelecidos atravs da chamada de vrios mtodos de JSlider: setMajorTickSpacing(int): separa as marcas de seleo principais pela distncia especificada. A distncia no um pixels, mas em valores entre o mnimo e o mximo representados pelo controle deslizante. setMinorTickSpacing(int): separa marcas de selea scundrias pela distncia especificada. Elas so apresentadas com a metade da altura das principais. setPaintTicks(boolean): determina se as marcas de seleo devem ser apresentadas (um argumento true) ou no (um argumento false). setPaintLabels(boolean): determinase o rtulo numricodo controle deslizante deve ser apresentado (true) ou no (false). Esses mtodos devem ser chamados no controle deslizante antes que ele seja inserido em um continer.

1.34) Execute 16: Controles deslizantes


1) Abra o Jcreator 2) Digite o cdigo abaixo:
//ExemploSlider.java import javax.swing.*; public class ExemploSlider extends JFrame{ public ExemploSlider(){ super("Exemplo de Slider"); setSize(400,100 ); setDefaultCloseOperation(EXIT_ON_CLOSE); JSlider num = new JSlider(JSlider.HORIZONTAL, 0,30,5); JPanel painel = new JPanel(); SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

26

num.setMajorTickSpacing(10); num.setMinorTickSpacing(1); num.setPaintTicks(true); num.setPaintLabels(true); painel.add(num); setContentPane(painel); show(); } public static void main(String a[]){ ExemploSlider s = new ExemploSlider(); } }

3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

27

2 - Organizando componentes em uma interface com o usurio


Para impor algum tipo de forma um uma interface na linguagem Java, voc deve usar um conjunto de classes chamadas gerenciadores de layout. Um gerenciador de layout determina como os componentes sero organizados ao serem inseridos em um continer. O gerenciador de layout padro para painis a classe FlowLayout. O gerenciador de layout padro para os frames a Classe BorderLayout.

2.1) Layout de Fluxo


A classe FlowLayout representa o mais simples dos gerenciadores de layout. Ela dispe os componentes de maneira semelhante ao modo como as palavras so dispostas em uma pgina da esquerda para a direita at que no haja mais espao e depois na prxima linha. Por padro, os componentes de cada linha sero centralizados quando voc usar o construtor FlowLayout() sem argumentos. Se quizer que os componentes fiquem alinhados na margem esquerda ou direita do continer, a varivel de classe FlowLayout.LEFT ou FlowLayout.RIGHT deve ser o nico argumento do construtor.

2.2) Execute 17: Gerenciador FlowLayout


1) Abra o Jcreator 2) Digite o cdigo abaixo:
//ExemploFlowLayout.java import javax.swing.*; import java.awt.*; public class ExemploFlowLayout extends JFrame { JButton b1 = new JButton("Um"); JButton b2 = new JButton("Dois"); JButton b3 = new JButton("Trs"); JButton b4 = new JButton("Quatro"); JButton b5 = new JButton("Cinco"); JButton b6 = new JButton("Seis"); JButton b7 = new JButton("Sete"); JButton b8 = new JButton("Oito"); JButton b9 = new JButton("Nove"); public ExemploFlowLayout(){ super("Exemplo FlowLayout"); setSize(360,120); setDefaultCloseOperation(EXIT_ON_CLOSE); JPanel painel = new JPanel(); FlowLayout l = new FlowLayout(FlowLayout.LEFT); painel.setLayout(l); painel.add(b1); SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

28

painel.add(b2); painel.add(b3); painel.add(b4); painel.add(b5); painel.add(b6); painel.add(b7); painel.add(b8); painel.add(b9); setContentPane(painel); show(); } public static void main(String[] a){ ExemploFlowLayout f = new ExemploFlowLayout(); } }

3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

2.3) Layout de grade


O gerenciador de layout de grade organiza os componentes em uma grade de linhas e colunas. Os componentes so includos primeiro na linha superior da grade, comeando pela clula mais s esquerda e continuando para direta da grade. Quando todas as clulas da linha superior estiverem preenchidas, o prximo componente ser inserido na clula mais esquerda da segunda linha da grade se houver e assim por diante. Os layout de grade so criados com a Classe GridLayout. Dois argumentos so enviados para o construtor GridLayout o nmero de linhas na grade e o nmero de colunas.

2.4) Execute 18: Gerenciador GridLayout


1) Abra o Jcreator 2) Digite o cdigo abaixo:
//ExemploGridLayout.java import javax.swing.*; import java.awt.*; SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

29

public class ExemploGridLayout extends JFrame { JButton b1 = new JButton("Um"); JButton b2 = new JButton("Dois"); JButton b3 = new JButton("Trs"); JButton b4 = new JButton("Quatro"); JButton b5 = new JButton("Cinco"); JButton b6 = new JButton("Seis"); JButton b7 = new JButton("Sete"); JButton b8 = new JButton("Oito"); JButton b9 = new JButton("Nove"); public ExemploGridLayout(){ super("Exemplo GridLayout"); setSize(360,120); setDefaultCloseOperation(EXIT_ON_CLOSE); JPanel painel = new JPanel(); GridLayout g = new GridLayout(3,3); painel.setLayout(g); painel.add(b1); painel.add(b2); painel.add(b3); painel.add(b4); painel.add(b5); painel.add(b6); painel.add(b7); painel.add(b8); painel.add(b9); setContentPane(painel); show(); } public static void main(String[] a){ ExemploGridLayout f = new ExemploGridLayout(); } }

3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

2.5) Layout de Borda


Os layouts de borda, que so criados usando a classe BorderLayout, dividem um continer em cinco sees: norte, sul, leste, oeste e centro.
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

30

2.6) Execute 19: Gerenciador BorderLayout


1) Abra o Jcreator 2) Digite o cdigo abaixo:
//ExemploBorder.java import javax.swing.*; import java.awt.*; public class ExemploBorderLayout extends JFrame { JButton btnorte = new JButton("Norte"); JButton btsul = new JButton("Sul"); JButton btleste = new JButton("Leste"); JButton btoeste = new JButton("Oeste"); JButton btcentro= new JButton("Centro"); public ExemploBorderLayout(){ super("Exemplo BorderLayout"); setSize(360,360); setDefaultCloseOperation(EXIT_ON_CLOSE); JPanel painel = new JPanel(); BorderLayout b = new BorderLayout(); painel.setLayout(b); painel.add(btnorte,BorderLayout.NORTH); // boto norte painel.add(btsul,BorderLayout.SOUTH); // boto sul painel.add(btleste,BorderLayout.EAST); // boto leste painel.add(btoeste,BorderLayout.WEST); // boto oeste painel.add(btcentro,BorderLayout.CENTER); // boto centro setContentPane(painel); show(); } public static void main(String[] a){ ExemploBorderLayout eb = new ExemploBorderLayout(); } }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

31

3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

3 - Respondendo entrada do usurio


Para transformar uma interface Java em um programa que funcione, voc precisa tornar a interface receptiva aos eventos de usurio. O Swing manipula eventos com um conjunto de interfaces chamadas receptores de evento. Um objeto receptor criado e associado ao componente de interface com o usurio que esta sendo recebido.

3.1) Receptores de evento


Se uma classe quiser responder a um evento de usurio no sistema de tratamento de eventos da linguagem Java 2, dever implementar a interface que trata dos eventos. Essas interfaces so chamadas de receptores de evento. Cada receptor lida com um tipo especfico de evento e uma classe pode implementar quantos forem necessrios. Os receptores de evento da linguagem Java incluem cada uma das seguintes interfaces: ActionListener: Eventos de ao, que so gerados por um usurio agindo sobre um componente, como um clique de mouse em um boto AdjustmentListener: Eventos de ajuste, que so gerados quando um componente ajustado, como quando uma barra de rolagem movida
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

32

FocusListener: Eventos de foco de teclado, que so gerados quando um componente, como um campo texto, ganha ou perde o foco ItemListener: Eventos de item, que so gerados quando um item, como uma caixa de verificao, alterado KeyListener: Eventos de teclado, que ocorrem quando um usurio digita texto no teclado MouseListener: Eventos de mouse, que so gerados por cliques de mouse, por um mouse entrando na rea de um componente e por um mouse deixando a rea de um componente MouseMotionListener: Eventos de movimentos do mouse, que controlam toda a movimentao de um mouse sobre um componente TextListener: Eventos de texto, que controlam todas a ao efetuada em um texto WindowListener: Eventos de janela, que so gerados por uma janela (como a janela principal do aplicativo) ao ser minimizada, maximizada, movida ou fechada A classe a seguir declara de modo a poder tratar de eventos de ao e de texto: public class Tratamento extends Jframe implements ActionListener, TextListener { //.... } Ao colocar o implements usada as interface ActionListener e TextListener para tratar os eventos de ao e de texto.

3.2) Configurando componentes


Ao transformar um classe em um receptor de evento, preciso configurar um tipo especfico de evento que ser captado por essa classe. Isso acontecer se voc no der um segundo passo: um receptor correspondente dever ser includo no componente. Ele gerar os eventos quando o componente for usado. Depois que um componente for criado, voc pode chamar um dos seguintes mtodos para associar um receptor a ele: addActionListener(): Componentes Jbutton, JcheckBox, JcomboBox, JtextField e JRadionButton addAdjustmentListener(): Componentes JscrollBar addFocusListener: Todos os componentes Swing addITemListener: Componentes Jbutton, JcheckBox, JcomboBox e JradioButton addKeyListener: Todos os componentes do Swing addMouseListener: Todos os componentes do Swing addMouseMotionListener: Todos os componentes do Swing
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

33

addWindowListener: Todos os componentes Jwindow e JFrame O exemplo a seguir cria um objeto Jbutton e associa um receptor de evento de ao a ele: JButton excluir = new JButton(Excluir); excluir.addActionListener(this). O this usado para definir o receptor de eventos dessa classe.

3.3) Evento de Ao
Ocorrem quando um usurio conclui uma ao utilizando um dos seguintes componentes: JButton, JCheckBox, JComboBox, JTextField ou JRadionButton. Uma classe precisa implementar a interface ActionListener para trarar desses eventos.

3.4) Execute 20: Evento de Ao


1) Abra o Jcreator 2) Digite o cdigo abaixo: //EventoAcao import javax.swing.*; import java.awt.*; import java.awt.event.*; // pacote para tratamento de eventos public class EventoAcao extends JFrame implements ActionListener { private JButton btinserir,btfechar,btlimpar; private JTextField tfentrada,tfsaida; private JLabel lbentrada,lbsaida; private JPanel pncentro,pnsul,pndireita; // construtor da classe public EventoAcao(){ super("Tratamento de Eventos de Ao"); setSize(500,100); setLocation(100,100); setDefaultCloseOperation(EXIT_ON_CLOSE); pncentro = new JPanel(); pndireita = new JPanel(); pnsul = new JPanel(new GridLayout(1,3)); btinserir = new JButton("Inserir"); btinserir.addActionListener(this); // receptor de evento btfechar = new JButton("Fechar");
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

34

btfechar.addActionListener(this); btlimpar = new JButton("Limpar"); btlimpar.addActionListener(this); lbentrada = new JLabel("Digite Algo: "); lbsaida = new JLabel("Texto inserido: "); tfentrada = new JTextField(10); tfentrada.addActionListener(this); //receptor de evento tfsaida = new JTextField(10); tfsaida.addActionListener(this); //receptor de evento tfsaida.setEditable(false); getContentPane().add(pncentro, BorderLayout.CENTER); getContentPane().add(pndireita,BorderLayout.EAST); getContentPane().add(pnsul,BorderLayout.SOUTH); pncentro.add(lbentrada); pncentro.add(tfentrada); pndireita.add(lbsaida); pndireita.add(tfsaida); pnsul.add(btlimpar); pnsul.add(btinserir); pnsul.add(btfechar); show(); } // mtodo da Interface Action Listener public void actionPerformed(ActionEvent evento){ if (evento.getSource()==btinserir){ tfsaida.setText(tfentrada.getText()); } else if (evento.getSource()==btlimpar){ tfsaida.setText(""); tfentrada.setText(""); } else if (evento.getSource()==btfechar){ System.exit(0); }
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

35

} // mtodo para rodar a aplicao public static void main(String a[]){ EventoAcao e = new EventoAcao(); } } 3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

3.5) Eventos de foco


Ocorrem quando qualquer componente ganha ou perde o foco de entrada em uma interface grfica com o usurio. O foco descreve o componente que est ativo no momento para entrada via teclado.

3.6) Execute 21: Evento de foco


1) Abra o Jcreator 2) Digite o cdigo abaixo: import java.awt.event.*; import javax.swing.*; import java.awt.*; public class SelecionaItem extends JFrame implements ItemListener { BorderLayout borda = new BorderLayout(); JTextField resultado = new JTextField(27); JComboBox escolha = new JComboBox(); public SelecionaItem(){ super("Seleciona Item"); setDefaultCloseOperation(EXIT_ON_CLOSE); escolha.addItemListener(this); escolha.addItem("Navigator"); escolha.addItem("Internet Explorer"); escolha.addItem("Opera"); escolha.setEditable(false);
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

36

resultado.setHorizontalAlignment(SwingConstants.CENTER); resultado.setEditable(false); JPanel painel = new JPanel(); painel.setLayout(borda); painel.add(resultado, "South"); painel.add(escolha,"Center"); setContentPane(painel); } public static void main(String [] argumentos){ SelecionaItem i = new SelecionaItem(); i.pack(); i.setVisible(true); } public void itemStateChanged(ItemEvent evt){ if (evt.getSource()==escolha){ resultado.setText(evt.getItem().toString()+ " esta selecionado."); } repaint(); } } 3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

3.7) Eventos de tecla


Ocorrem quando uma tecla pressionada no teclado. Qualquer componente pode gerar esses eventos e uma classe precisa implementar a interface KeyListener para oferecer suporte a eles.

3.8) Execute 22: Evento de tecla


1) Abra o Jcreator 2) Digite o cdigo abaixo: import java.awt.event.*; import javax.swing.*; import java.awt.*;
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

37

public class EventoTecla extends JFrame implements KeyListener { JTextField digite = new JTextField(20); JPanel painel = new JPanel(); public EventoTecla(){ super("Exemplo de Evento de tecla"); setLocation(100,100); setSize(300,100); setDefaultCloseOperation(EXIT_ON_CLOSE); painel.add(digite,"Center"); digite.addKeyListener(this); setContentPane(painel); show(); } public void keyPressed(KeyEvent evento){ if (evento.getSource()== digite){ JOptionPane.showMessageDialog(null,"Voce teclou: "+evento.getKeyChar()); } } public void keyReleased(KeyEvent evento){ } public void keyTyped(KeyEvent evento){ } public static void main(String a []){ EventoTecla tecla = new EventoTecla(); } } 3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

38

3.9) Eventos de mouse


So gerados por vrios tipos diferentes de interao do usurio: um clique de mouse, um mouse que entra na rea de um componente, um mouse que deixa a rea de um componente. Qualquer componente pode gerar esses eventos, os quais so implementados por uma classe atravs da interface MouseListener.

3.10) Execute 23: Evento de mouse


1) Abra o Jcreator 2) Digite o cdigo abaixo: import java.awt.event.*; import javax.swing.*; import java.awt.*; public class EventoMouse extends JFrame implements MouseListener { JButton btclicar = new JButton("Clique"); JButton btapontar = new JButton("Aponte"); JPanel painel = new JPanel(); public EventoMouse(){ super("Exemplo de Evento de Mouse"); setLocation(100,100); setSize(300,100); setDefaultCloseOperation(EXIT_ON_CLOSE); painel.add(btclicar,"Center"); btclicar.addMouseListener(this); painel.add(btapontar,"Center"); btapontar.addMouseListener(this); setContentPane(painel); show();
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

39

} public void mouseReleased(MouseEvent evento){ if (evento.getSource()== btclicar){ JOptionPane.showMessageDialog(null,"Voce atualizou mouse"); } } public void mousePressed(MouseEvent evento){ if (evento.getSource()== btclicar){ JOptionPane.showMessageDialog(null,"Voce pressionou o boto do mouse"); } } public void mouseExited(MouseEvent evento){ if (evento.getSource()== btapontar){ JOptionPane.showMessageDialog(null,"Voce deixou de apontar para mim"); } } public void mouseEntered(MouseEvent evento){ if (evento.getSource()== btapontar){ JOptionPane.showMessageDialog(null,"Voce apontou para mim"); } } public void mouseClicked(MouseEvent evento){ if (evento.getSource()== btclicar){ JOptionPane.showMessageDialog(null,"Voce clicou em mim"); } } public static void main(String a []){ EventoMouse mouse = new EventoMouse(); } }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

40

3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

3.11) Eventos de movimento de mouse


Ocorrem quando um mouse movido sobre um componente. Assim como nos outros eventos de mouse, qualquer componente pode gerar eventos desse tipo. Para oferecer suporte para eles, uma classe precisa implementar a interface MouseMotionListener.

3.12) Execute 24: Evento de Movimento do Mouse


1) Abra o JCreator 2) Digite o cdigo abaixo: import java.awt.event.*; import javax.swing.*; import java.awt.*; public class EventoMovMouse extends JFrame implements MouseMotionListener { JButton btapontar = new JButton("Aponte"); JButton btarrastar = new JButton("Arrastar"); JPanel painel = new JPanel(); public EventoMovMouse(){ super("Exemplo de Evento de Movimento do Mouse"); setLocation(100,100); setSize(300,100); setDefaultCloseOperation(EXIT_ON_CLOSE); painel.add(btapontar,"Center"); btapontar.addMouseMotionListener(this); painel.add(btarrastar,"Center"); btarrastar.addMouseMotionListener(this); setContentPane(painel); show();
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

41

} public void mouseMoved(MouseEvent evento){ if (evento.getSource()== btapontar){ JOptionPane.showMessageDialog(null,"Voce moveu o mouse em mim"); } } public void mouseDragged(MouseEvent evento){ if (evento.getSource()== btarrastar){ JOptionPane.showMessageDialog(null,"Voce tentou arrastar"); } } public static void main(String a []){ EventoMovMouse mouse = new EventoMovMouse(); } } 3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

3.13) Eventos de janela


Ocorrem quando um usurio abre ou fecha um objeto janela, como JFrame ou JWindow. Qualquer componete pode gerar esses eventos e uma classe precisa implementar a interface WindowListener para oferecer suporte a eles.

3.14) Execute 25: Evento de Janela


1) Abra o JCreator 2) Digite o cdigo abaixo: import java.awt.event.*; import javax.swing.*; import java.awt.*;
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

42

public class EventoJanela extends JFrame implements WindowListener { public EventoJanela(){ super("Exemplo de Evento de Janela"); setLocation(100,100); setSize(300,100); setDefaultCloseOperation(EXIT_ON_CLOSE); addWindowListener(this); show(); } public void windowClosing(WindowEvent evento){ JOptionPane.showMessageDialog(null,"A janela foi fechada"); } public void windowIconified(WindowEvent evento){ JOptionPane.showMessageDialog(null,"A janela virou um icone"); } public void windowDeiconified(WindowEvent evento){ JOptionPane.showMessageDialog(null,"A janela deixou de ser icone"); } public void windowActivated(WindowEvent evento){ JOptionPane.showMessageDialog(null,"A janela esta ativa"); } public void windowDeactivated(WindowEvent evento){ JOptionPane.showMessageDialog(null, "A janela esta desativada"); } public void windowOpened(WindowEvent evento){ JOptionPane.showMessageDialog(null, "A janela esta aberta"); } public void windowClosed(WindowEvent evento){ JOptionPane.showMessageDialog(null, "A janela esta fechada"); } public static void main(String a []){ EventoJanela mouse = new EventoJanela(); } }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

43

3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:

3.15) Criando Menus


Como esperado, a Swing oferece suporte bastante completo para criao de aplicaes utilizando barras de menus, menus suspensos e menus independente atravs de um conjunto de classes resumidamente descrito a seguir: Classe Descrio JMenuItem Classe que define uma entrada simples de menu JMenuBar Classe que define uma barra de menus para uma aplicao JMenu Classe que define um menu suspenso Adicionar uma barra de menus contendo menus e itens de menus so bastante simples no Java. Basta seguir intuitivamente a estrutura visual apresentada: Adicionar uma barra de menu a janela; Adicionar os menus suspensos a barra de menu; Adicionar os itens de menus desejados ou a cada um dos menus suspensos e Adicionar os listener necessrios para ser possvel que os menus e itens de menus exibam funcionalidades.

3.16) Execute 26: Criando Menus


1) Abra o JCreator 2) Digite o cdigo abaixo:

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

44

import javax.swing.*; import java.awt.event.*; public class CriarMenu extends JFrame implements ActionListener{ JMenuBar barramenu = new JMenuBar(); JMenu JMenu JMenu JMenu marquivo = new JMenu("Arquivo"); meditar = new JMenu("Editar"); mformatar = new JMenu("Formatar"); mifonte = new JMenu("Fonte"); misalvar = new JMenuItem("Salvar"); mifechar = new JMenuItem("Fechar"); micopiar = new JMenuItem("Copiar"); micolar = new JMenuItem("Colar");

JMenuItem JMenuItem JMenuItem JMenuItem

JMenuItem micor = new JMenuItem("Cor"); JMenuItem mitamanho= new JMenuItem("Tamanho"); public CriarMenu(){ super("Criando Menus"); setSize(500,500); setLocation(100,100); setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().add(barramenu); barramenu.add(marquivo); barramenu.add(meditar); barramenu.add(mformatar); marquivo.add(misalvar); misalvar.addActionListener(this); marquivo.add(mifechar); mifechar.addActionListener(this); meditar.add(micopiar); micopiar.addActionListener(this); meditar.add(micolar); micolar.addActionListener(this); mformatar.add(mifonte); mifonte.add(micor); micor.addActionListener(this); mifonte.add(mitamanho); mitamanho.addActionListener(this);

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

45

setJMenuBar(barramenu); show(); } public void actionPerformed(ActionEvent evento){ if (evento.getSource()==misalvar){ JOptionPane.showMessageDialog(null,"Voc menu arquivo"); } else if (evento.getSource()==mifechar){ System.exit(0); } else if (evento.getSource()==micopiar){ JOptionPane.showMessageDialog(null,"Voc menu editar"); } else if (evento.getSource()==micolar){ JOptionPane.showMessageDialog(null,"Voc menu editar"); } else if (evento.getSource()==micor){ JOptionPane.showMessageDialog(null,"Voc formatar, fonte"); } else if (evento.getSource()==mitamanho){ JOptionPane.showMessageDialog(null,"Voc menu formata, fonte"); } } public static void main(String a[]){ CriarMenu cm = new CriarMenu(); } } 3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir: clicou na opo salvar do

clicou na opo copiar do clicou na opo colar do clicou na opo cor do menu clicou na opo tamanho do

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

46

3.17) Criando Barra de Ferramentas


O pacote Swing tambm oferece recursos para criao de barras de ferramentas possibilitando criar aplicaes que possui ferramentas para serem acessadas agilizando, portanto a utilizao do sistema. Para criar uma barra de ferramentas basta adicionar a barra de ferramenta janela (atravs da classe JToolBar) e adicionar botes a barra de ferramentas (atravs da classe JButton).

3.18) Execute 27: Criando barra de ferramentas


1) Abra o JCreator 2) Digite o cdigo abaixo: import javax.swing.*; import java.awt.event.*; import java.awt.*; public class CriarFerramentas extends JFrame implements ActionListener{ JToolBar barraferra = new JToolBar(); JButton b1 = new JButton(new ImageIcon("botao1.gif")); JButton b2 = new JButton(new ImageIcon("botao2.gif")); JButton b3 = new JButton(new ImageIcon("botao3.gif")); public CriarFerramentas(){ super(); setSize(500,500);
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

47

setLocation(100,100); setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().add(barraferra,BorderLayout.NORTH); barraferra.add(b1); b1.addActionListener(this); barraferra.add(b2); b2.addActionListener(this); barraferra.add(b3); b3.addActionListener(this); show(); }
public void actionPerformed(ActionEvent evento){ if (evento.getSource()==b1){ JOptionPane.showMessageDialog(null,"Voc clicou no primeiro boto"); } else if (evento.getSource()==b2){ JOptionPane.showMessageDialog(null,"Voc clicou no segundo boto"); } else if (evento.getSource()==b3){ JOptionPane.showMessageDialog(null,"Voc clicou no terceito boto"); } } public static void main(String a[]){ CriarFerramentas cr = new CriarFerramentas(); } }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

48

3.19) Exerccios de Reviso do capitulo I


1) Desenvolva uma aplicao com a seguinte tela:

Funcionalidades: boto Limpar: quando clicar neste boto todas as caixas de textos e label imc sero limpos. boto Calcular IMC: quando clicar neste boto dever ser mostrado no label imc o clculo do imc (ndice de massa corprea ). O imc calculado da seguinte forma: peso dividido pela altura (metros) ao quadrado. A tabela abaixo define a situao do IMC: IMC abaixo de 20 20 at 25 acima de 25 at 30 acima de 30 at 35 acima de 35 Situao abaixo do peso normal peso normal sobrepeso obesidade obesidade mrbida

No label imc dever ser apresentado o valor do imc e a situao. Veja o exemplo:

2) Desenvolva uma aplicao com a seguinte tela:


SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

49

Funcionalidades: Boto +: quando clicar nesse boto ser efetuado a soma entre os dois nmeros e mostrar o resultado no label resultado. Boto /: quando clicar nesse boto ser efetuado a diviso entre os dois nmeros e mostrar o resultado no label resultado. Boto *: quando clicar nesse boto ser efetuado a multiplicao entre os dois nmeros e mostrar o resultado no label resultado. Boto -: quando clicar nesse boto ser efetuado a subtrao entre os dois nmeros. Boto Limpar: quando clicar nesse boto limpar os TextFields e o label resultado. 3) Desenvolva uma aplicao com a seguinte tela:

4) Desenvolva uma aplicao com a seguinte tela:


SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

50

A tela mostrada acima posui: Uma barra de menu; Dois menus: Exemplos e Sair. O menu Exemplos possui 3 itens: Calculo IMC, Calculadora e Exemplos de Vrios Objetos O menu Sair possui 2 itens: Sim e No. Funcionalidades: Quando clicar no item de menu Calculo IMC ser executado a aplicao do exerccio 1 (Calculo IMC). Quando clicar no item de menu Calculadora ser executado a aplicao do exerccio 2 (Calculadora). Quando clicar no item de menu Exemplos de Vrios Objetos ser executado a aplicao do exerccio 3 (Exemplos de Vrios Objetos). Quando clicar no item de menu sim: dever sair da aplicao.

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

51

4 - Aplicaes e Primitiva Grficas


A linguagem Java contem um numero grande de primitivas grficas que possibilitam ao usurio criar grficos facilmente e rapidamente. Abaixo uma pequena relao dos mtodos mais teis da classe Graphics (java.awt.Graphics):

4.1) Linhas
O mtodo drawLine pode ser usado para desenhar linhas retas entre dois pontos (x1,y1) e (x2,y2) dados.

drawLine(int x1, int y1, int x2, int y2) int x1 coordenada x inicial int y1 coordenada y inicial int x2 coordenada x final int y2 coordenada y final 4.2) Execute 28:Criando Linhas
1) Abra o JCreator 2) Digite o cdigo abaixo: //Linhas.java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Linhas extends JFrame { public Linhas(){ super("Criando Linhas"); setSize(300,300); setLocation(100,100); setDefaultCloseOperation(EXIT_ON_CLOSE); show(); } public void paint(Graphics g){ int x1 = (int) Math.round(Math.random()*300); int y1 = (int) Math.round(Math.random()*300); g.drawString("("+x1+","+y1+")",x1, y1); int x2 = (int) Math.round(Math.random()*300); int y2 = (int) Math.round(Math.random()*300); g.drawString("("+x2+","+y2+")",x2, y2); g.drawLine(x1,y1,x2,y2);
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

52

} public static void main(String a[]){ Linhas l = new Linhas(); } } 3) Compilar e executar.

4.3) Retngulos e Quadrados


O mtodo drawRect pode ser utilizado para desenhar retngulos ou quadrados atravs da definio da localizao de seu vrtice superior esquerdo (x,y) e da definio de sua largura width e altura height.

drawRect(int x, int y, int width, int height) desenha um retngulo int x coordenada x inicial int y coordenada y inicial int width largura int height altura

4.4) Execute 29:Criando Retngulos e Quadrados


1) Abra o JCreator 2) Digite o cdigo abaixo: //Retangulos.java

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Retangulos extends JFrame { public Retangulos(){ super("Criando Retngulos"); setSize(300,300); setLocation(100,100); setDefaultCloseOperation(EXIT_ON_CLOSE); show(); } public void paint(Graphics g){
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

53

int x1 = (int) Math.round(Math.random()*300); int y1 = (int) Math.round(Math.random()*300); int x2 = (int) Math.round(Math.random()*300); int y2 = (int) Math.round(Math.random()*300); g.drawRect(x1,y1,x2,y2); } public static void main(String a[]){ Retangulos l = new Retangulos(); } }
3) Compilar e executar.

4.5) Elipses e Circunferncias


O mtodo drawOval pode ser usado para desenhar elipses ou circunferncias de foma anloga ao mtodo drawRect, ou seja, atravs da definio da localizao do vrtice superior esquerdo (x,y) do retngulo onde se inscreve a elipse e da definio de sua largura width e altura height.

drawOval(int x, int y, int width, int height) desenha um circulo int x coordenada x inicial int y coordenada y inicial int width largura int height altura 4.6) Execute 30: Criando Elipse e Circunferncias
1) Abra o JCreator 2) Digite o cdigo abaixo: //Elipse.java

import javax.swing.*; import java.awt.*; import java.awt.event.*;


SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

54

public class Elipse extends JFrame { public Elipse(){ super("Criando Elipse"); setSize(300,300); setLocation(100,100); setDefaultCloseOperation(EXIT_ON_CLOSE); show(); } public void paint(Graphics g){ int x1 = (int) Math.round(Math.random()*300); int y1 = (int) Math.round(Math.random()*300); int x2 = (int) Math.round(Math.random()*300); int y2 = (int) Math.round(Math.random()*300); g.drawOval(x1,y1,x2,y2); } public static void main(String a[]){ Elipse l = new Elipse(); } }
3) Compilar e executar.

4.7) Polgonos
Para desenhar polgonos regulares ou irregulares utilizamos os mtodos drawPolygon ou fillPolygon que permite a obteno de figuras vazadas ou slidas respectivamente. Estes mtodos podem receber dois vetores comuns que contem as coordenadas x e y de cada ponto do polgono e um valor inteiro que define a quantidade de pontos. Com essas informaes os mtodos desenham um polgono fechado.

drawPolygon(int xPoints[], int yPoints[], int nPoints) desenha um polgono. Qualquer polgono criado tem que conter um ponto que o fecha. Java no cria polgonos fechados automaticamente, ento tenha sempre certeza que os pontos inicial e final so iguais.
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

55

int xPoints[] array de coordenadas x int yPoints[] array de coordenadas y int nPoints[] numero de pontos 4.8) Execute 31: Criando Elipse e Circunferncias
1) Abra o JCreator 2) Digite o cdigo abaixo: //Poligono.java

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Poligono extends JFrame { public Poligono(){ super("Criando Poligonos"); setSize(300,300); setLocation(100,100); setDefaultCloseOperation(EXIT_ON_CLOSE); show(); } public void paint(Graphics g){ int x[] = new int[4]; int y[] = new int[4]; x[0] = (int) Math.round(Math.random()*300); y[0] = (int) Math.round(Math.random()*300); x[1] = (int) Math.round(Math.random()*300); y[1] = (int) Math.round(Math.random()*300); x[2] = (int) Math.round(Math.random()*300); y[2] = (int) Math.round(Math.random()*300); x[3] = (int) Math.round(Math.random()*300); y[3] = (int) Math.round(Math.random()*300); g.drawPolygon(x,y,4); }
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

56

public static void main(String a[]){ Poligono l = new Poligono(); } }


3) Compilar e executar.

4.9) Melhorando as Aplicaes usando primitivas grficas 4.10) Execute 32Criando Linhas e Elipse
1) Abra o JCreator 2) Digite o cdigo abaixo: //Grafica1.java
import java.awt.*; import javax.swing.*; public class Grafica1 extends JFrame { public Grafica1(){ super(); setSize(205,205); setLocation(100,100); setDefaultCloseOperation(EXIT_ON_CLOSE); show(); } public void paint(Graphics tela) { setBackground(Color.white); tela.setColor(Color.black); for (int i = 0; i <= 200; i += 20) { tela.drawLine(0, i, 200, i); tela.drawLine(i, 0, i, 200); } tela.setColor(Color.red); tela.fillOval(30, 30, 160, 160); } public static void main(String a[]){ Grafica1 g = new Grafica1(); } }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

57

3) Compilar e executar. 4) A janela ser exibida:

4.11) Execute 33Criando Retngulos com grficos


1) Abra o JCreator 2) Digite o cdigo abaixo: //Grafica2.java
import java.awt.*; import javax.swing.*; public class Grafica2 extends JFrame { JLabel lbestat = new JLabel("Estatistica Atual:"); Graph gstat = new Graph(); public Grafica2() { super(); setSize(260,240); setLocation(100,100); setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().add("North", lbestat); getContentPane().add("Center", gstat); show(); } public static void main(String a[]){ Grafica2 g = new Grafica2(); }

class Graph extends java.awt.Canvas { int[] pontos = { 1, 10, 3, 5, 8, 7, 2, 2, 5, 9 }; public void paint(Graphics tela) { SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

58

} }

for (int i = 0; i < 10; i++) { Color corazul = new Color(0, 0, 255 - (i*20)); tela.setColor(corazul); tela.fillRect(20, i * 20, pontos[i] * 20, 17); }

3) Compilar e executar. 4) A tela ser mostrada:

4.12) Execute 34Criando Retngulos com grficos


1) Abra o JCreator 2) Digite o cdigo abaixo:
//Grafica3.java import java.awt.*; import javax.swing.*; public class Grafica3 extends JFrame { public Grafica3(){ super(); setSize(350,370); setLocation(100,100); setDefaultCloseOperation(EXIT_ON_CLOSE); show(); } public void paint(Graphics tela) { setBackground(Color.blue); SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

59

tela.setColor(Color.white); for (int ax = 10; ax < 340; ax += 10) for (int ay = 30; ay < 340 ; ay += 10) { tela.drawArc(ax, ay, 10, 10, 0, -180); } tela.setColor(Color.green); Polygon fl = new Polygon(); fl.addPoint(10, 12); fl.addPoint(234, 15); fl.addPoint(253, 25); fl.addPoint(261, 71); fl.addPoint(344, 209); fl.addPoint(336, 278); fl.addPoint(295, 310); fl.addPoint(259, 274); fl.addPoint(205, 188); fl.addPoint(211, 171); fl.addPoint(195, 174); fl.addPoint(191, 118); fl.addPoint(120, 56); fl.addPoint(94, 68); fl.addPoint(81, 49); fl.addPoint(12, 37); tela.fillPolygon(fl); tela.setColor(Color.black); tela.fillOval(235, 140, 15, 15); tela.fillOval(225, 130, 15, 15); tela.fillOval(245, 130, 15, 15); } public static void main(String a[]){ Grafica3 g = new Grafica3(); } }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

60

3) Compilar e executar. 4) A tela ser mostrada:

5 - Threads
Threads constituem uma caracterstica bastante relevante da linguagem Java. A incorporao dos conceitos de sincronizao e variveis de condio dentro da prpria linguagem permite que programadores mdios consigam utilizar conceitos de computao concorrente de forma bem facilitada, o que possibilita uma melhoria de performance dos programas. Neste captulo veremos o que so threads, analisaremos seus estados e mtodos bsicos e aprenderemos a inserir threads em applets.

5.1) O que so threads?


Uma thread pode ser definido como um fluxo de controle seqencial isolado dentro de um programa. Como um programa seqencial qualquer, uma thread tem um comeo, um fim e uma seqncia de comandos. Entretanto, uma thread em Java no um programa, no executa sozinho, executa dentro de um programa. Threads permitem que um programa simples possa executar vrias tarefas diferentes ao mesmo tempo, independentemente umas das outras. Programas multithreaded so programas que contm vrias threads, executando tarefas distintas, simultaneamente. Em Java, threads so cidados de primeira ordem, se constituindo de instncias da classe Thread que fornecem suporte a comunicao concorrente. A classe Thread prov os mtodos necessrios para criar e controlar threads (independentemente da plataforma usada) e execut-los concorrentemente. A real implementao de threads feita pelo sistema operacional.

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

61

O corpo de uma thread o seu mtodo run(), e nele que so executadas as tarefas s quais thread se destina. Podemos implementar threads de duas maneiras (ambas suportadas pelos construtores da classe Thread): Criando uma subclasse da classe Thread e definindo o seu mtodo run() de maneira adequada realizao da tarefa do thread. Criando uma instncia de Thread que recebe como parmetro um objeto que implemente a interface Runnable - esse objeto providenciar o mtodo run() para a thread.

A linguagem Java fornece meios para criarmos threads como daemons, agruparmos threads, sincroniz-los e controlar suas prioridades.

5.2) Os estados de uma thread

New Thread Inicializao da thread - feita atravs do construtor Thread().


class MyThreadClass extends Thread { ... } ... MyThreadClass myThread = new MyThreadClass();

Neste estado, nenhum recurso do sistema foi alocado para o thread ainda, assim, a partir daqui, tudo que voc pode fazer um start(), para ativar a thread, ou um stop(), para mat-lo. A chamada de qualquer outro mtodo no faz sentido e levantar a exceo IllegalThreadStateException.
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

62

Runnable

Este o estado em que o thread est pronto para rodar. O mtodo start() requisita os recursos do sistema necessrios para rodar a thread e chama o seu mtodo run(). O mtodo run() a alma de um thread; neste mtodo que definimos o que a thread vai executar. Thread myThread = new MyThreadClass(); myThread.start(); Falamos em Runnable, ao invs de Running, porque a thread pode no estar realmente sendo executada. Imagine um computador com um nico processador - seria impossvel executar todas as threads ao mesmo tempo. O que ocorre que a CPU deve ser escalonada entre as vrias threads. Quando uma thread est Running, ela est tambm Runnable, as instrues do seu mtodo run() que esto sendo executadas pela CPU.

Not Runnable

O estado Not Runnable significa que a thread est impedida de executar por alguma razo. Existem 4 maneiras de uma thread ir para o estado Not Runnable. 1. 2. 3. 4. receber a mensagem suspend(); receber a mensagem sleep(); a thread bloqueia, esperando I/O; a thread usa seu mtodo wait() para esperar por uma varivel de condio.

O exemplo abaixo coloca o applet myThread para dormir por 10 segundos:


Thread myThread = new MyThreadClass(); myThread.start(); try { myThread.sleep(10000); } catch (InterruptedException e) { }

Cada uma destas maneiras tem a sua forma especfica de sair do estado Not Runnable. 1. se a thread foi suspensa, algum precisa mandar-lhe a mensagem resume(); 2. se a thread foi posta para dormir, ela voltar a ser Runnable quando o nmero de milisegundos determinado passar; 3. se a thread est bloqueada, esperando por I/O, a operao precisa ser completada; 4. se a thread est esperando por uma varivel de condio, o objeto que a retm precisa liber-la, atravs de um notify() ou de um notifyAll()

Dead

Uma thread pode morrer de causas naturais (quando o seu mtodo run() acaba normalmente) ou pode ser morto pelo mtodo stop().

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

63

possvel controlar a ordem de execuo de vrias threads definindo prioridades para eles. O escalonador de threads do Java segue a seguinte regra: a qualquer instante, a thread corrente a de maior prioridade. Para que a thread de maior prioridade ceda CPU a outra thread, ele precisa enviar para si o mtodo yield(), ou, entrar no estado Not Runnable. Caso contrrio, ele ir executar at que termine seu mtodo run(). Para descobrir a prioridade de uma thread, podemos usar o mtodo getPriority() e, para defini-la setPriority(n), onde n um inteiro de 1 a 10 (10 representando a prioridade mxima).

5.3) Threads em Applets


At agora ns vimos como trabalhar com threads criadas a partir da classe Thread ou de uma classe que herde da classe Thread. Sabemos que esta classe prov os mtodos bsicos para se lidar com threads (run(), start(), stop(), sleep(), etc.). Suponha que voc queira, agora, implementar uma thread dentro de uma applet. Por exemplo, suponha que voc quer fazer uma applet relgio, que atualiza o seu display a cada segundo. A classe que vai implementar o seu relgio precisa ser uma subclasse da classe Applet para herdar todas as facilidades oferecidas por ela. Como faz-la, ento, herdar tambm da classe Thread? A interface Runnable a soluo! Qualquer objeto que implemente a interface Runnable pode utilizar o seu mtodo run() para ser executado como uma thread.
class Clock extends Applet implements Runnable { .... } A applet Clock precisa, agora, criar a sua prpria thread. Isto feito no seu mtodo start() public void start() { if ( clockThread == null) { clockThread = new Thread(this, Clock); clockThread.start(); } }

Observe a chamada ao construtor Thread(this, Clock). O construtor precisa receber como primeiro argumento um objeto que implemente a interface Runnable, este objeto que vai fornecer o mtodo run() da thread clockThread.
public void run() { while (clockThread != null) { repaint(); try { clockThread.sleep(1000); } catch (InterruptedException e) { } } } SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

64

No mtodo stop() do applet Clock, temos que chamar tambm o mtodo stop() da thread clockThread, caso contrrio, a thread vai continuar executando e consumindo recursos mesmo depois que sairmos da pgina da applet.
public void stop() { clockThread.stop(); clockThread = null; }

Se voc revisitar a pgina, o start() da applet Clock chamado novamente e uma nova thread inicializada.

5.4) Herdando de Thread x Implementando Runnable


Existem duas maneiras de implementar threads: 1. Herdando da classe Thread ou de subclasses da classe Thread. 2. Implementando a interface Runnable e criando uma thread (passando o objeto que implementa Runnable como argumento). Qual opo utilizar? Se voc precisa estender outra classe (o exemplo mais comum a classe Applet), use Runnable. Entretanto, se voc est planejando apenas sobrepor o mtodo run(), e mais nenhum outro mtodo de Thread, use Runnable. Classes no devem herdar de outras classes, a menos que o programador pretenda modificar ou aprimorar o comportamento fundamental da classe.

5.5) Execute 35: Trabalhando com Thread


1) Abra o JCreator 2) Digite o cdigo abaixo: //RelogioDigital.java
import java.awt.*; import javax.swing.*; import java.util.*; public class RelogioDigital extends JFrame { Janela j = new Janela(); public RelogioDigital() { super("Relogio Digital"); setSize(60, 60); setLocation(100,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel painel = new JPanel(); painel.setLayout(new GridLayout(1, 1, 15, 15)); painel.add(j); setContentPane(painel); show(); } SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

65

public static void main(String[] arguments) { RelogioDigital relogio = new RelogioDigital(); } } class Janela extends JPanel implements Runnable { Thread executa; Janela() { if (executa == null) { executa = new Thread(this); executa.start(); } } public void run() { while (true) { repaint(); try { Thread.sleep(1000); } catch (InterruptedException e) { } } } public void paintComponent(Graphics comp) { Graphics2D comp2D = (Graphics2D)comp; Font type = new Font("Serif", Font.BOLD, 24); comp2D.setFont(type); comp2D.setColor(getBackground()); comp2D.fillRect(0, 0, getSize().width, getSize().height); Calendar dia = new GregorianCalendar(); String hora = ""+dia.get(Calendar.HOUR) +":"+dia.get(Calendar.MINUTE)+":"+dia.get(Calendar.SECOND); comp2D.setColor(Color.black); comp2D.drawString(hora, 5, 25); } }

3) compilar e executar. 4) A seguinte tela ser mostrada:

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

66

5.6) Execute 36:Trabalhando com Thread


1) Abra o JCreator 2) Digite o cdigo abaixo:

//SinalTransito.java
import java.awt.*; import javax.swing.*; public class SinalTransito extends JFrame { LuzSinal luz = new LuzSinal(); public SinalTransito() { super("Sinal de Transito"); setSize(100, 330); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container pane = getContentPane(); BorderLayout bord = new BorderLayout(); pane.setLayout(bord); pane.add(luz, "Center"); setContentPane(pane); show(); } public static void main(String[] arguments) { SinalTransito t = new SinalTransito(); } } class LuzSinal extends JPanel implements Runnable { private Thread executar; int contador = 0; LuzSinal() { if (executar == null); { executar = new Thread(this); executar.start(); } } public void run() { Thread novaThread = Thread.currentThread(); while (executar == novaThread) { contador++; if (contador > 2) contador = 0; repaint(); try { Thread.sleep(1500); } catch (InterruptedException e) { } } } SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

67

public void paintComponent(Graphics comp) { Graphics2D comp2D = (Graphics2D)comp; comp2D.setColor(Color.black); comp2D.fillRect(0, 0, 300, 300); if (contador == 2) comp2D.setColor(Color.red); else comp2D.setColor(Color.black); comp2D.fillOval(0, 0, 100, 100); if (contador == 1) comp2D.setColor(Color.yellow); else comp2D.setColor(Color.black); comp2D.fillOval(0, 100, 100, 100); if (contador == 0) comp2D.setColor(Color.green); else comp2D.setColor(Color.black); comp2D.fillOval(0, 200, 100, 100); } }

3) Compilar e executar. 4) A seguinte tela ser mostrada mudando o sinal de transito.

observao: neste momento esta sinal amarelo, veja a mudana de sinal.

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

68

5.7) Execute 37: Trabalhando com Thread


1) Abra o JCreator 2) Digite o cdigo abaixo: //BannerLinha.java
import java.awt.*; import javax.swing.*; import java.util.*; public class BannerLinha extends JFrame { BannerPainel novo = new BannerPainel(); public BannerLinha() { super("Banner em linhas"); setSize(420, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel pane = new JPanel(); pane.setLayout(new GridLayout(1, 1, 15, 15)); pane.add(novo); setContentPane(pane); show(); novo.rolar(); } public static void main(String[] arguments) { BannerLinha banner = new BannerLinha(); }

class BannerPainel extends JPanel { String[] linhas = { "Hytec Informtica", "Java Avanado", "Trabalhando com Threads", "Sun Microsystem" }; int y = 76; void rolar() { while (true) { y = y - 1; if (y < -75) y = 76; repaint(); try { Thread.sleep(250); } catch (InterruptedException e) { } } } public void paintComponent(Graphics comp) { SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

69

Graphics2D comp2D = (Graphics2D)comp; Font type = new Font("monospaced", Font.BOLD, 14); comp2D.setFont(type); comp2D.setColor(getBackground()); comp2D.fillRect(0, 0, getSize().width, getSize().height); comp2D.setColor(Color.black); for (int i = 0; i < linhas.length; i++) comp2D.drawString(linhas[i], 5, y + (20 * i)); } }

3) Compilar e executar. 4) A seguinte tela ser mostrada:

5.8) Execute 38: Trabalhando com Thread


1) Abra o JCreator 2) Digite o cdigo abaixo:
//Checar.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Checar extends JFrame implements ActionListener { ChecarPainel checar = new ChecarPainel(); JButton btiniciar = new JButton("Iniciar"); JButton btparar = new JButton("Parar"); public Checar() { super("Checar"); setSize(210, 170); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel pane = new JPanel(); BorderLayout border = new BorderLayout(); pane.setLayout(border); pane.add(checar, "Center"); JPanel painelbotoes = new JPanel(); btiniciar.addActionListener(this); painelbotoes.add(btiniciar); btparar.addActionListener(this); btparar.setEnabled(false); SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

70

painelbotoes.add(btparar); pane.add(painelbotoes, "South"); setContentPane(pane); show();

public void actionPerformed(ActionEvent evt) { if (evt.getSource() == btiniciar) { checar.iniciarAnimacao(); btiniciar.setEnabled(false); btparar.setEnabled(true); } else { checar.pararAnimacao(); btiniciar.setEnabled(true); btparar.setEnabled(false); } } public static void main(String[] arguments) { Checar ck = new Checar(); } } class ChecarPainel extends JPanel implements Runnable { private Thread executar; int xPos = 5; int xMove = 4; void iniciarAnimacao() { if (executar == null); { executar = new Thread(this); executar.start(); } } void pararAnimacao() { if (executar != null); { executar = null; } } public void run() { Thread novaThread = Thread.currentThread(); while (executar == novaThread) { xPos += xMove; if ((xPos > 105) | (xPos < 5)) xMove *= -1; repaint(); try { Thread.sleep(100); } catch (InterruptedException e) { } } SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

71

} public void paintComponent(Graphics comp) { Graphics2D comp2D = (Graphics2D)comp; comp2D.setColor(Color.black); comp2D.fillRect(0, 0, 100, 100); comp2D.setColor(Color.white); comp2D.fillRect(100, 0, 100, 100); comp2D.setColor(Color.red); comp2D.fillOval(xPos, 5, 90, 90); }

3) Compilar e executar. 4) A seguinte tela ser mostrada:

5.9) Execute 39Trabalhando com Thread


1) Abra o JCreator 2) Digite o cdigo abaixo: //Pete.java import java.awt.*; import javax.swing.*; import java.util.*; public class Pete extends JFrame { PetePanel pete = new PetePanel(); public Pete() { super("Pixel Pete"); setSize(452, 146); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel pane = new JPanel(); pane.setLayout(new GridLayout(1, 1, 15, 15)); pane.add(pete); setContentPane(pane); show(); }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

72

public static void main(String[] arguments) { Pete penguin = new Pete(); } } class PetePanel extends JPanel implements Runnable { Thread runner; Image petePics[] = new Image[6]; Image back; int current = 0; int x = -10; int y = 30; PetePanel() { super(); setBackground(Color.black); String peteSrc[] = { "right1.gif", "right2.gif", "right3.gif", "stop.gif", "blink.gif", "wave.gif" }; Toolkit kit = Toolkit.getDefaultToolkit(); for (int i=0; i < petePics.length; i++) { petePics[i] = kit.getImage(peteSrc[i]); } back = kit.getImage("backdrop.gif"); if (runner == null) { runner = new Thread(this); runner.start(); } } public void paintComponent(Graphics comp) { Graphics2D comp2D = (Graphics2D)comp; if (back != null) comp2D.drawImage(back, 0, 0, this); comp2D.setColor(Color.black); comp2D.fillRect(0, 30, 450, 30); if (petePics[current] != null) comp2D.drawImage(petePics[current], x, y, this); } public void run() { while (true) { walk(-10, 275); look(); blink(3); wave(4); walk(x, getSize().width + 10); pause(1500);
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

73

} } public void walk(int start, int end) { int showpic = 0; for (int i = start; i < end; i += 5) { x = i; // swap images current = showpic; repaint(); pause(150); showpic++; if (showpic > 2) showpic = 0; } } public void blink(int numtimes) { for (int i = numtimes; i > 0; i--) { current = 4; repaint(); pause(200); current = 3; repaint(); pause(1000); } } public void wave(int numtimes) { for (int i = numtimes; i > 0; i--) { current = 3; repaint(); pause(600); current = 5; repaint(); pause(1100); } } public void look() { current = 3; repaint(); pause(1000); } public void pause(int time) { try { Thread.sleep(time);
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

74

} catch (InterruptedException e) { } } } 3) Compilar e executar. 4) Ser mostrada a seguinte tela:

6 - Acessando Banco de Dados


Uma funcionalidade essencial em qualquer sistema a habilidade para comunicar-se com um banco de dados. Java dispe de uma API para acessar banco de dados: a Java DataBase Connectivity API ou JDBC API. A JDBC implementa em Java a funcionalidade definida pelo padro SQL Call Level Interface ou SQLCLI. Um outro exemplo de API que implementa o SQL Call Level Interface o popularssimo ODBC das plataformas Wintel. A maioria dos fornecedores de bancos de dados oferece uma implementao particular de SQLCLI. A vantagem de JDBC a portabilidade da aplicao cliente, inerente da linguagem Java. A especificao corrente da JDBC API a 2.1. A JDBC compreende uma especificao para ambos: os desenvolvedores de drivers JDBC e os desenvolvedores de aplicaes clientes que precisem acessar bancos de dados em Java. Estaremos dando uma olhada no desenvolvimento de aplicaes em Java, ento, uma boa idia comear com o suporte de dados. Existem 4 tipos de diferentes de drivers JDBC: - Uma vez que ODBC uma especificao padro do mundo Wintel, o tipo 1 um driver de ponte entre Java e ODBC. O driver de ponte mais conhecido o fornecido pela Sun o JDBC-ODBC bridge. Este tipo de driver no portvel, pois depende de chamadas a funes de ODBC implementadas em linguagem C e compiladas para Wintel, ou outra plataforma ODBC compatvel, as chamadas funes nativas. - O driver tipo 2 implementado parcialmente em Java e parcialmente atravs de funes nativas que implementam alguma API especfica do fornecedor de banco de dados. Este tipo faz o que se chama de wrap-out, ou seja, prov uma interface Java para uma API nativa no-Java.
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

75

- O tipo 3 um driver totalmente Java que se comunica com algum tipo de middleware que ento se comunica com o banco de dados - O tipo 4 um driver totalmente Java que vai diretamente ao banco de dados.

6.1) Acessando bancos de dados em JDBC


Cdigo:

import java.sql.*; A primeira coisa a fazer estabelecer uma conexo com o banco de dados. Fazemos isso em dois passos: primeiro carregamos o driver para o banco de dados na JVM da aplicao. Uma vez carregado, o driver se registra para o DriverManager e est disponvel para a aplicao. Utilizamos ento a classe DriverManager para abrir uma conexo com o banco de dados. A interface Connection designa um objeto, no caso con, para receber a conexo estabelecida:
Cdigo: try //A captura de excees SQLException em Java obrigatria para usarmos JDBC. { // Este um dos meios para registrar um driver Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") // Registrado o driver, vamos estabelecer uma conexo Connection con = DriverManager.getConnection("jdbc:odbc:meusCdsDb","conta","senha"); } catch(SQLException e) { // se houve algum erro, uma exceo gerada para informar o erro e.printStackTrace(); //vejamos que erro foi gerado e quem o gerou }

Estabelecida a conexo, podemos executar comandos SQL para o banco de dados. Vejamos como realizar uma consulta sobre o ttulo, numero de faixas e o artista de cada CD no banco de dados. Podemos usar 3 interfaces para executar comandos SQL no banco de dados. A primeira delas a interface Statement, que permite a execuo dos comandos fundamentais de SQL (SELECT, INSERT, UPDATE ou DELETE). A interface PreparedStatement nos permite usufruir de SQL armazenado ou pr-compilado no banco, quando o banco de dados suportar este recurso. A terceira interface CallableStatement, e permite executar procedimentos e funes armazenados no banco quando o banco suportar este recurso. Vejamos como utilizar a interface Statement.
Cdigo: // Aps estabelecermos a conexo com o banco de dados // Utilizamos o mtodo createStatement de con para criar o Statement Statement stm = con.createStatement(); // Vamos executar o seguinte comando SQL : String SQL = "Select titulo, autor, total_faixas from MeusCDs";

A interface ResultSet permite colher os resultados da execuo de nossa query no banco


SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

76

de dados. Esta interface apresenta uma srie de mtodos para prover o acesso aos dados:
Cdigo: // Definido o Statement, executamos a query no banco de dados ResultSet rs = stm.executeQuery(SQL); // O mtodo next() informa se houve resultados e posiciona o cursor do banco // na prxima linha disponvel para recuperao // Como esperamos vrias linhas utilizamos um lao para recuperar os dados while(rs.next()) { // Os mtodos getXXX recuperam os dados de acordo com o tipo SQL do dado: String tit = rs.getString("titulo"); String aut = rs.getString("autor"); int totalFaixas = rs.getInt("total_faixas"); // As variveis tit, aut e totalFaixas contm os valores retornados // pela query. Vamos imprim-los System.out.println("Titulo: "+tit+" Autor: "+aut+" Tot. Faixas: "+totalFaixas); }

E nosso acesso est terminado. O importante agora liberar os recursos alocados pelo banco de dados para a execuo deste cdigo. Podemos fazer isso fechando o Statement, que libera os recursos associados execuo desta consulta mas deixa a conexo aberta para a execuo de uma prxima consulta, ou fechando diretamente a conexo, que encerra a comunicao com o banco de dados. Para termos certeza de que vamos encerrar esta conexo mesmo que uma exceo ocorra, reservamos o fechamento para a clusula finally() do tratamento de excees.

Cdigo: try { con.close(); } catch(SQLException onConClose) { System.out.println("Houve erro no fechamento da conexo"); onConClose.printStackTrace(); }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

77

6.2) Execute 40- Trabalhando com Banco de Dados


1) Abra o JCreator 2) Digite o cdigo abaixo: // MeusCds.java
import java.sql.*;
public class MeusCds { Connection con; String SQL; Statement stm; public MeusCds(){ // 1 passo:estabelecer uma conexo com o JDBC try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException e) { System.out.println("JDBC erro"); } // 2 passo: estabelecer conexao com o banco de dados acess try { con = DriverManager.getConnection("jdbc:odbc:meusCdsDb"); } catch(SQLException e) { System.out.println("conexo erro"); } // 3 passo: executar comandos sql try { stm = con.createStatement(); SQL = "Select titulo, autor, total_faixas from MeusCDs"; } catch(SQLException e) { System.out.println("SQL erro"); } // 3 passo: colher os resultados da execuo de nossa consulta no banco try { ResultSet rs = stm.executeQuery(SQL); while(rs.next()) { String tit = rs.getString("titulo"); String aut = rs.getString("autor"); int totalFaixas = rs.getInt("total_faixas"); System.out.println(tit+" - "+aut+" - "+totalFaixas); } } catch(SQLException e) { System.out.println("consulta erro"); }

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

78

// 4 passo: liberar os recursos alocados pelo banco de dados try { con.close(); } catch(SQLException onConClose) { System.out.println("Houve erro no fechamento da conexo"); } } // programa principal public static void main (String a[]){ MeusCds m = new MeusCds(); } }

3) Acessar o painel de controle do Windows, acessar o cone ferramentas administrativas, acessar o cone fonte de dados ODBC a seguinte janela ser apresentada:

Clique no boto adicionar

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

79

4) Ao clicar no boto adicionar a seguinte tela ser exibida:

Clique em Microsoft Acess Driver.

Clique em concluir

5) Ao clicar na opo Microsoft Acess Driver e depois concluir ser exibida a seguinte tela:

Coloque a fonte de dados meusCdsDb

Selecionar o banco de dados bdcds.mdb que esta dentro da sua pasta de trabalho do curso.

6) Clicar no boto nos botes Ok at fechar as janelas, fechar o painel de controle.

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

80

7) Volte ao seu cdigo fonte MeusCds.java que esta no JCreator. 8) Compilar e executar dever ser mostrado a seguinte informao: Diante do Trono I - Igreja Batista Lagoinha - 12 Diante do Trono II - Igrefa Batista Lagoinha - 14 Ao vivo - Carlinhos Felix - 16 Amor I - Varios autores 20 6.3) Execute 41- Trabalhando com Banco de Dados 1) Abrir no JCreator 2) Digite o cdigo abaixo: import javax.swing.*; import java.awt.event.*; import java.awt.*; public class ApClientes extends JFrame implements ActionListener{ JPanel pacima, pabaixo; JButton btadicionar, btlimpar; JLabel lbnome, lbendereco, lbcep, lbcidade,lbuf; JTextField txnome, txendereco, txcep, txcidade, txuf; public ApClientes(){ // Criando a janela e configurando super("Cadastro de Clientes"); setSize(500,150); setLocation(0,0); setDefaultCloseOperation(EXIT_ON_CLOSE); // criando paineis pacima = new JPanel(new GridLayout(3,4)); pabaixo = new JPanel(new GridLayout(1,2)); // criando botoes btadicionar = new JButton("Adicionar"); btadicionar.addActionListener(this); btlimpar = new JButton("Limpar"); btlimpar.addActionListener(this); // criando labels lbnome = new JLabel(" Nome"); lbendereco = new JLabel(" Endereo"); lbcep = new JLabel(" CEP"); lbcidade = new JLabel(" Cidade"); lbuf = new JLabel(" UF");
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

81

// criando caixa de texto txnome = new JTextField(30); txendereco = new JTextField(30); txcep = new JTextField(9); txcidade = new JTextField(20); txuf = new JTextField(2); // Adicionando os objetos getContentPane().add(pacima,BorderLayout.NORTH); getContentPane().add(pabaixo,BorderLayout.SOUTH); pacima.add(lbnome); pacima.add(txnome); pacima.add(lbendereco); pacima.add(txendereco); pacima.add(lbcep); pacima.add(txcep); pacima.add(lbcidade); pacima.add(txcidade); pacima.add(lbuf); pacima.add(txuf); pabaixo.add(btadicionar); pabaixo.add(btlimpar); show(); } public void actionPerformed(ActionEvent e){ if (e.getSource()==btadicionar){ ConectarBD bd = new ConectarBD("INSERT INTO Cliente(nome,endereco,cep,cidade,uf) values ('"+txnome.getText() +"','"+txendereco.getText()+"','"+txcep.getText()+"','"+txcidade.getText() +"','"+txuf.getText()+"')"); JOptionPane.showMessageDialog(null,"Gravao concluida!"); txnome.setText(""); txendereco.setText(""); txcep.setText(""); txcidade.setText(""); txuf.setText(""); } else if (e.getSource()==btlimpar){ txnome.setText(""); txendereco.setText("");
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

82

txcep.setText(""); txcidade.setText(""); txuf.setText(""); } } public static void main(String a[]){ ApClientes ap = new ApClientes(); } }
3) Acessar o painel de controle do Windows, acessar o cone ferramentas administrativas, acessar o cone fonte de dados ODBC a seguinte janela ser apresentada:

Clique no boto adicionar

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

83

4) Ao clicar no boto adicionar a seguinte tela ser exibida:

Clique em Microsoft Acess Driver.

Clique em concluir

5) Ao clicar na opo Microsoft Acess Driver e depois concluir ser exibida a seguinte tela: 6) Clicar no boto nos botes Ok at fechar as janelas, fechar o painel de controle.

Coloque a fonte de dados CADCLIENTE

Selecionar o banco de dados CR.mdb que esta dentro da sua pasta de trabalho do curso.

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

84

7) No JCretor, digite o seguinte cdigo para a conexo com o banco de dados: //ConectarBD.java
import java.sql.*; import java.io.*; public class ConectarBD { // string carregar o bd String dbcarregar = "sun.jdbc.odbc.JdbcOdbcDriver"; // string conectar o bd String dbconexao = "jdbc:odbc:CADCLIENTE"; // varivel para refenciar sql Statement lesql; // varivel usada para faze a conexao BD Connection conexao; public ConectarBD(String comando){ try{ // carregar o driver Class.forName(dbcarregar); } catch(ClassNotFoundException e){ System.out.println("No foi possvel carregar o driver"); } try { // conectar o driver conexao = DriverManager.getConnection(dbconexao); // criar ligacao sql com a conexo lesql = conexao.createStatement(); lesql.executeUpdate(comando); lesql.close(); conexao.close(); } catch (SQLException e){ System.out.println("No foi possvel conectar ao BD"); }

} }

8) Salvar e compilar 9) Acesse o arquivo ApClientes.java 10) Compilar e exceutar 11) Cadastre alguns clientes. 12) Acesse o banco de dados CR.mdb que esta dentro da sua pasta 13) Abra a tabela cliente e veja se os nomes foram cadastrados.

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

85

6.4) Execute 42: Trabalhando com Banco de Dados


1) Abrir o JCreator 2) Digite o cdigo abaixo: // Clientes.java // Inserindo, atualizando e pesquisando dados em um banco de dados import java.sql.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.ScrollPaneLayout; public class Clientes extends JFrame { private BotoesPainel controls; private RotuloClientes scrollArea; private JTextArea output; private String url; private Connection connect; private JScrollPane textpane; public Clientes() { super( "Aplicao de Banco de Dados de Agenda de Endereos" ); setDefaultCloseOperation(EXIT_ON_CLOSE); Container c = getContentPane(); // Inicia o layout da tela scrollArea = new RotuloClientes(); c.setLayout( new BorderLayout() ); c.add( new JScrollPane( scrollArea ),BorderLayout.CENTER ); // Configura a conexo de banco de dados try { url = "jdbc:odbc:AddressBook"; Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); connect = DriverManager.getConnection( url ); } catch ( ClassNotFoundException cnfex ) { // processa ClassNotFoundExceptions aqui JOptionPane.showMessageDialog(null, "A conexo falhou!\n" + cnfex.toString(), "Aviso",JOptionPane.WARNING_MESSAGE ); } catch ( SQLException sqlex ) { // processa SQLExceptions aqui JOptionPane.showMessageDialog(null, "A conexo falhou!\n", "Aviso",JOptionPane.WARNING_MESSAGE ); } catch ( Exception ex ) { // processa Exceptions remanescentes aqui JOptionPane.showMessageDialog(null, ex.toString(), "Aviso",JOptionPane.WARNING_MESSAGE ); } SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

86

// Completa layout de tela controls = new BotoesPainel( connect, scrollArea, output); c.add( controls, BorderLayout.NORTH ); setSize( 500, 400 ); move(150, 150); show(); } public static void main( String args[] ){ Clientes app = new Clientes(); }

4) Salvar e compilar 5) Crie um novo arquivo e digite o cdigo abaixo: // RotuloClientes.java // Definio da classe RotuloClientes import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.ScrollPaneLayout; public class RotuloClientes extends JPanel { private JPanel labelPanel, fieldsPanel; private String labels[] = { "Cdigo:", "Nome:", "Sobrenome:", "Endereo:", "Cidade:", "Estado:", "CEP:", "Pais:", "E-mail:", "Telefone:", "Celular:" }; JTextField id, first, last, address, // accesso de pacote city, state, zip, country, email, home, fax; public RotuloClientes() { // Painel de Rtulo labelPanel = new JPanel(); labelPanel.setLayout(new GridLayout( labels.length, 1 ) ); for ( int i = 0; i < labels.length; i++ ) labelPanel.add( new JLabel( labels[ i ], 0) ); // Painel de TextField fieldsPanel = new JPanel(); fieldsPanel.setLayout(new GridLayout( labels.length, 1 ) ); id = new JTextField( 20 ); id.setEditable( false ); fieldsPanel.add( id ); first = new JTextField( 20 ); fieldsPanel.add( first ); last = new JTextField( 20 ); SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

87

fieldsPanel.add( last ); address = new JTextField( 20 ); fieldsPanel.add( address ); city = new JTextField( 20 ); fieldsPanel.add( city ); state = new JTextField( 20 ); fieldsPanel.add( state ); zip = new JTextField( 20 ); fieldsPanel.add( zip ); country = new JTextField( 20 ); fieldsPanel.add( country ); email = new JTextField( 20 ); fieldsPanel.add( email ); home = new JTextField( 20 ); fieldsPanel.add( home ); fax = new JTextField( 20 ); fieldsPanel.add( fax ); setLayout( new GridLayout( 1, 2 ) ); add( labelPanel ); add( fieldsPanel );

} }

6) Salvar e compilar 7) Cire um novo arquivo e digite o cdigo abaixo: // BotoesPainel.java // Definio da classe BotoesPainel import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; import javax.swing.ScrollPaneLayout; public class BotoesPainel extends JPanel { private JButton findName, addName, updateName, deleteName, clear, help; public BotoesPainel( Connection c, RotuloClientes s, JTextArea t ) { setLayout( new GridLayout( 1, 6 ) ); Icon novo = new ImageIcon( "Imagens/Novo.gif" ); clear = new JButton( novo ); clear.addActionListener( new NovoClientes( s ) ); add( clear ); Icon gravar = new ImageIcon( "Imagens/Gravar.gif" ); addName = new JButton( gravar ); addName.addActionListener( new SalvarClientes( c, s, t ) ); add( addName ); SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

88

Icon editar = new ImageIcon( "Imagens/Editar.gif" ); updateName = new JButton( editar ); updateName.addActionListener( new EditarClientes( c, s, t ) ); add( updateName ); Icon excluir = new ImageIcon( "Imagens/Excluir.gif" ); deleteName = new JButton( excluir ); deleteName.addActionListener( new ExcluirClientes( c, s, t ) ); add( deleteName ); Icon localizar = new ImageIcon( "Imagens/Localizar.gif" ); findName = new JButton( localizar ); findName.addActionListener( new PesquisarClientes( c, s, t ) ); add( findName ); Icon ajuda = new ImageIcon( "Imagens/Ajuda.gif" ); help = new JButton( ajuda ); help.addActionListener( new Ajuda( t ) ); add( help );

} }

8) Crie um novo arquivo e digite o cdigo abaixo: // NovoClientes.java // Definio da classe NovoClientes import java.awt.*; import java.awt.event.*; import javax.swing.ScrollPaneLayout; public class NovoClientes implements ActionListener { private RotuloClientes fields; public NovoClientes( RotuloClientes f ) { fields = f; } //Limpa os campos public void actionPerformed( ActionEvent e ) { fields.id.setText( "" ); fields.first.setText( "" ); fields.last.setText( "" ); fields.address.setText( "" ); fields.city.setText( "" ); fields.state.setText( "" ); fields.zip.setText( "" ); fields.country.setText( "" ); fields.email.setText( "" ); fields.home.setText( "" ); fields.fax.setText( "" ); } Tel.: (61) 3225-7784 Braslia - DF

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

89

9) Salvar e compilar 10) Crie um novo arquivo e digite o cdigo abaixo: // EditarClientes.java // Definio da classe EditarClientes import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; import javax.swing.ScrollPaneLayout; public class EditarClientes implements ActionListener { private RotuloClientes fields; private JTextArea output; private Connection connection; public EditarClientes( Connection c, RotuloClientes f, JTextArea o ) { connection = c; fields = f; output = o; } public void actionPerformed( ActionEvent e ) { try { Statement statement = connection.createStatement(); if ( ! fields.id.getText().equals( "" ) ) { String query = "UPDATE addresses SET " + "firstname='" + fields.first.getText() + "', lastname='" + fields.last.getText() + "', address='" + fields.address.getText() + "', city='" + fields.city.getText() + "', stateorprovince='" + fields.state.getText() + "', postalcode='" + fields.zip.getText() + "', country='" + fields.country.getText() + "', emailaddress='" + fields.email.getText() + "', homephone='" + fields.home.getText() + "', faxnumber='" + fields.fax.getText() + "' WHERE id=" + fields.id.getText(); int result = statement.executeUpdate( query ); if ( result == 1 ) JOptionPane.showMessageDialog( null, "Registro alterado." , "Aviso", JOptionPane.PLAIN_MESSAGE ); else { SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

90

JOptionPane.showMessageDialog( null, "Falha na alterao!" , "Aviso", JOptionPane.WARNING_MESSAGE ); fields.first.setText( "" ); fields.last.setText( "" ); fields.address.setText( "" ); fields.city.setText( "" ); fields.state.setText( "" ); fields.zip.setText( "" ); fields.country.setText( "" ); fields.email.setText( "" ); fields.home.setText( "" ); fields.fax.setText( "" );

} catch ( SQLException sqlex ) { sqlex.printStackTrace(); JOptionPane.showMessageDialog( null, sqlex.toString(), "Aviso", JOptionPane.WARNING_MESSAGE ); } } }

statement.close(); } else JOptionPane.showMessageDialog( null, "\nUse Alterar somente quando\n " + "existim registros. Use Pesquisar para\n " + "localizar um registro, ento\n " + "modifique a informao e\n " + "pressione Alterar.\n" , "Aviso", JOptionPane.PLAIN_MESSAGE );

10) Salvar e compilar 11) Crie um novo arquivo e digite o cdigo: // SalvarClientes.java // Definio de classe SalvarClientes import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; import javax.swing.ScrollPaneLayout; public class SalvarClientes implements ActionListener { private RotuloClientes fields; private JTextArea output; private Connection connection; public SalvarClientes( Connection c, RotuloClientes f, JTextArea o ) { SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

91

connection = c; fields = f; output = o;

public void actionPerformed( ActionEvent e ) { try { Statement statement = connection.createStatement(); if ( !fields.first.getText().equals( "" ) && !fields.last.getText().equals( "" ) ) { String query = "INSERT INTO addresses (" + "firstname, lastname, address, city, " + "stateorprovince, postalcode, country, " + "emailaddress, homephone, faxnumber" + ") VALUES ('" + fields.first.getText() + "', '" + fields.last.getText() + "', '" + fields.address.getText() + "', '" + fields.city.getText() + "', '" + fields.state.getText() + "', '" + fields.zip.getText() + "', '" + fields.country.getText() + "', '" + fields.email.getText() + "', '" + fields.home.getText() + "', '" + fields.fax.getText() + "')"; int result = statement.executeUpdate( query ); if ( result == 1 ) JOptionPane.showMessageDialog( null, "A inseo foi um sucesso.", "Aviso", JOptionPane.PLAIN_MESSAGE ); else { JOptionPane.showMessageDialog( null, "A insero falhou!.", "Aviso", JOptionPane.WARNING_MESSAGE ); fields.first.setText( "" ); fields.last.setText( "" ); fields.address.setText( "" ); fields.city.setText( "" ); fields.state.setText( "" ); fields.zip.setText( "" ); fields.country.setText( "" ); fields.email.setText( "" ); fields.home.setText( "" ); fields.fax.setText( "" ); } } else{

JOptionPane.showMessageDialog( Tel.: (61) 3225-7784 Braslia - DF

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

92

null, "\nDigite o Nome e\n" + "o Sobrenome e aperte\n" + "o boto Salvar\n" , "Aviso", JOptionPane.WARNING_MESSAGE ); statement.close(); } } catch ( SQLException sqlex ) { JOptionPane.showMessageDialog( null, sqlex.toString(), "Aviso", JOptionPane.WARNING_MESSAGE ); } } 12) Salvar e compilar 13) Crie um novo arquivo e digite o cdigo abaixo: // PesquisarClientes.java // Definio da classe PesquisarClientes import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; import javax.swing.ScrollPaneLayout; public class PesquisarClientes implements ActionListener { private RotuloClientes fields; private JTextArea output; private Connection connection; public PesquisarClientes( Connection c, RotuloClientes f, JTextArea o ) { connection = c; fields = f; output = o; } public void actionPerformed( ActionEvent e ) { try { if ( !fields.last.getText().equals( "" ) ) { Statement statement =connection.createStatement(); String query = "SELECT * FROM addresses " + "WHERE lastname = '" + fields.last.getText() + "'"; ResultSet rs = statement.executeQuery( query ); display( rs ); statement.close(); } else fields.last.setText( SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF }

93

"Digite o Sobrenome e aperte Pesquisar" ); } catch ( SQLException sqlex ) { JOptionPane.showMessageDialog( null, sqlex.toString() + "" + 1 , "Aviso", JOptionPane.WARNING_MESSAGE ); }

// Exibe os resultados da consulta. public void display( ResultSet rs ) { try { rs.next(); int recordNumber = rs.getInt( 1 ); if ( recordNumber != 0 ) { fields.id.setText( String.valueOf( recordNumber)); fields.first.setText( rs.getString( 2 ) ); fields.last.setText( rs.getString( 3 ) ); fields.address.setText( rs.getString( 4 ) ); fields.city.setText( rs.getString( 5 ) ); fields.state.setText( rs.getString( 6 ) ); fields.zip.setText( rs.getString( 7 ) ); fields.country.setText( rs.getString( 8 ) ); fields.email.setText( rs.getString( 9 ) ); fields.home.setText( rs.getString( 10 ) ); fields.fax.setText( rs.getString( 11 ) ); } else{ JOptionPane.showMessageDialog( null, "Registro no encontrado!!" , "Aviso", JOptionPane.WARNING_MESSAGE ); }

} }

} catch ( SQLException sqlex ) { JOptionPane.showMessageDialog( null, "Registro no encontrado!!" , "Aviso", JOptionPane.WARNING_MESSAGE ); }

14) Salvar e compilar 15) Crie um novo arquivo e digite o cdigo abaixo: // ExcluirClientes.java // Definio da classe ExcluirClientes import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.*; SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

94

import javax.swing.ScrollPaneLayout; public class ExcluirClientes implements ActionListener { private RotuloClientes fields; private JTextArea output; private Connection connection; public ExcluirClientes( Connection c, RotuloClientes f, JTextArea o ) { connection = c; fields = f; output = o; } public void actionPerformed( ActionEvent e ) { try { if ( !fields.id.getText().equals( "" ) ) { Statement statement =connection.createStatement(); String query = "DELETE FROM addresses " + "WHERE firstname = '" + fields.first.getText() + "'" + "AND lastname = '" + fields.last.getText() + "'"; statement.executeQuery( query ); statement.close(); } else

JOptionPane.showMessageDialog( null, " preciso ter um registro para apagar!!" , "Aviso", JOptionPane.WARNING_MESSAGE );

} catch ( SQLException sqlex ) { JOptionPane.showMessageDialog( null, "Registro Apagado!!!", "Aviso", JOptionPane.PLAIN_MESSAGE ); } } }

16) Salvar e compilar 17) Cire um novo arquivo e digite o cdigo abaixo: // Ajuda.java // Definio da classe Ajuda import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.ScrollPaneLayout; public class Ajuda implements ActionListener { SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF

95

private JTextArea output; public Ajuda( JTextArea o ) { output = o; } public void actionPerformed( ActionEvent e ) { JOptionPane.showMessageDialog( null, "\nClic Pesquisar para localizar um registro.\n" + "Clic Adicionar para inserir um novo registro.\n" + "Clic Alterar para alterar " + "a informao em um registro.\n" + "Clic Limpar para esvaziar" + " os campos de registros.\n", "Aviso", JOptionPane.PLAIN_MESSAGE ); } } 18)Salvar e compilar 19)Acesse o arquivo Clientes.java.

20) Acessar o painel de controle do Windows, acessar o cone ferramentas administrativas, acessar o cone fonte de dados ODBC a seguinte janela ser apresentada:

Clique no boto adicionar

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

96

Ao clicar no boto adicionar a seguinte tela ser exibida:

Clique em Microsoft Acess Driver.

Clique em concluir

Ao clicar na opo Microsoft Acess Driver e depois concluir ser exibida a seguinte tela:

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

97

Clicar no boto nos botes Ok at fechar as janelas, fechar o painel de controle.

Coloque a fonte de dados

AddressBook

Selecionar o banco de dados AddressBook.mdb que esta dentro da sua pasta de trabalho do curso.

21) Fechar e voltar ao JCreator. 22) Compilar e executar o arquivo Clientes.java 23) Cadastrar alguns amigos
24) Verificar se ficou salvo no banco de dados AddressBook

7 - JSP (Java Server Page)


7.1) O que JSP?
JSP significa (JAVA Server PAGE). Esta tecnologia usado para servir contedo dinmico para o usurio, usando lgica e dados do lado do servidor. JSP faz parte do J2EE (Java 2 Enterprise Edition) e juntamente com Java Servlets e Java Beans podem ser usadas para desenvolver aplicaes Web eficientes,escalveis e seguras rapidamente.

SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550

Tel.: (61) 3225-7784 Braslia - DF

Vous aimerez peut-être aussi