Escolar Documentos
Profissional Documentos
Cultura Documentos
ApostiladeJavaAvancado
ApostiladeJavaAvancado
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.....................................................................................................69 5.8) Execute 38: Trabalhando com Thread.....................................................................................................70 5.9) Execute 39Trabalhando com Thread.......................................................................................................72 6 - Acessando Banco de Dados..........................................................................................................................75 6.1) Acessando bancos de dados em JDBC ..................................................................................................76 6.2) Execute 40- Trabalhando com Banco de Dados......................................................................................78 6.3) Execute 41- Trabalhando com Banco de Dados......................................................................................81 6.4) Execute 42: Trabalhando com Banco de Dados......................................................................................86 7 - JSP (Java Server Page).................................................................................................................................98 7.1) O que JSP?............................................................................................................................................98
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.
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.
Uma janela um continer que pode ser apresentado na rea de trabalho do usurio.
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.
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:
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:
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
11
12
13
3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:
14
15
3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:
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:
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
18
3) Quando voc compilar e executar o aplicativo, dever ver a janela ilustrada a seguir:
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:
20
21
22
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.
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.
25
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:
27
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:
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:
30
31
3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:
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.
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.
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:
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:
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:
38
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(); } }
40
3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:
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:
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(); } }
43
3) Quando voc compilar e executar o aplicativo dever ver a janela ilustrada a seguir:
44
import java.awt.event.*; public class CriarMenu extends JFrame implements ActionListener{ JMenuBar barramenu = new JMenuBar(); JMenu marquivo = new JMenu("Arquivo"); JMenu meditar = new JMenu("Editar"); JMenu mformatar = new JMenu("Formatar"); JMenu mifonte = new JMenu("Fonte"); JMenuItem misalvar = new JMenuItem("Salvar"); JMenuItem mifechar = new JMenuItem("Fechar"); JMenuItem micopiar = new JMenuItem("Copiar"); JMenuItem micolar = new JMenuItem("Colar"); 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); setJMenuBar(barramenu);
SCRS 504 Bl. B Ent. 53 1 Andar CEP - 70331-550 Tel.: (61) 3225-7784 Braslia - DF
45
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
46
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(); } }
48
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:
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:
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.
51
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.
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
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.
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
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
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(); } }
57
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); }
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(); } }
60
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.
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.
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.
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).
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.
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(Calend ar.SECOND); comp2D.setColor(Color.black); comp2D.drawString(hora, 5, 25); } }
66
//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);
68
69
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
70
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)); } }
71
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
72
} 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); }
73
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
74
} } 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
75
76
- 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.
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";
77
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(); }
78
79
// 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:
80
Clique em concluir
5) Ao clicar na opo Microsoft Acess Driver e depois concluir ser exibida a seguinte tela:
Selecionar o banco de dados bdcds.mdb que esta dentro da sua pasta de trabalho do curso.
81
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
82
// 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.getTex t()+"','"+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
83
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:
84
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.
Selecionar o banco de dados CR.mdb que esta dentro da sua pasta de trabalho do curso.
85
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.
86
87
// 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
88
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
89
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
90
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
91
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( "" );
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
92
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{
93
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 }
94
"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 ); }
} }
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
95
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 );
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
96
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:
97
Clique em concluir
Ao clicar na opo Microsoft Acess Driver e depois concluir ser exibida a seguinte tela:
98
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