Apostila-Java I

download Apostila-Java I

of 130

Transcript of Apostila-Java I

Escola Tcnica de Braslia

Curso de Java I

APOSTILA DE JAVA I

1

Escola Tcnica de Braslia

Curso de Java I

SUMRIO PARTE 1 - SWING ........................................................................................................................................................... 3 Exemplo 1: Frame/AWT............................................................................................................................................... 6 Exemplo 2: JFrame. ..................................................................................................................................................... 8 Exemplo 3: JButton, JPanel ....................................................................................................................................... 10 Exemplo 4: ImageIcon. .............................................................................................................................................. 12 Exemplo 5: JLabel, JTextField, JTextArea. ............................................................................................................... 15 Exemplo 6: JScrollPane. ............................................................................................................................................ 17 Exemplo 7: JRadioButton, ButtonGroup. ................................................................................................................... 19 Exemplo 8: JComboBox. ........................................................................................................................................... 21 Exemplo 9: JList. ........................................................................................................................................................ 23 Exemplo 10: JOptionPane, UIManager. .................................................................................................................... 27 Exemplo 11: JSlider. .................................................................................................................................................. 31 Exemplo 12: JToolBar. ............................................................................................................................................... 34 Exemplo 13: JProgessBar. ........................................................................................................................................ 36 Exemplo 14: JMenuBar, JMenu, JMenuItem. ............................................................................................................ 38 Exemplo 15: JTabbedPane....................................................................................................................................... 42 PARTE 2 - LAYOUT ....................................................................................................................................................... 44 Exemplo 1: FlowLayout .............................................................................................................................................. 46 Exemplo 2: BoxLayout. .............................................................................................................................................. 48 Exemplo 3: GridLayout. ............................................................................................................................................. 50 Exemplo 4: BorderLayout. ......................................................................................................................................... 52 Exemplo 5: CardLayout. ............................................................................................................................................ 54 Exemplo 5: Executora CardLayout ............................................................................................................................ 56 Exemplo 6: GridBagLayout ........................................................................................................................................ 60 Exemplo 6: Executora GridBagLayout ....................................................................................................................... 61 PARTE 3 - EVENTOS .................................................................................................................................................... 64 Exemplo 1: ActionListener ......................................................................................................................................... 67 Exemplo 2: FocusListener. ........................................................................................................................................ 84 Exemplo 3: ItemListener ............................................................................................................................................ 86 Exemplo 4: MouseMotionListener ............................................................................................................................. 97 Exemplo 5: KeyAdapter. .......................................................................................................................................... 106 Parte 4 - Banco de Dados com Java ........................................................................................................................... 108 Exemplo 1. ............................................................................................................................................................... 112 Exemplo 2. ............................................................................................................................................................... 115 Exemplo 3. ............................................................................................................................................................... 116 Exemplo 4. ............................................................................................................................................................... 118 Exemplo 5. ............................................................................................................................................................... 122 Exemplo 6. ............................................................................................................................................................... 125

2

Escola Tcnica de Braslia

Curso de Java I

PARTE 1 - SWING

3

Escola Tcnica de Braslia CLASSES GRFICAS

Curso de Java I

A Graphical User Interface (Interface Grfica com o usurio) fornece detalhes sobre as aparncias de um projeto atual, seguem a determinados padres dando ao usurio um nvel bsico de familiaridade com um programa sendo que ele jamais o tenha visto ou mesmo utilizado. Isto reduz o tempo do usurio em aprendizado e aumenta a sua habilidade produtiva. As classes atuais que criam os componentes GUI em Java, fazem parte do pacote chamado SWING, encontradas em javax.swing. Antigamente os componentes faziam parte do pacote chamado Abstract Windows Toolkit (tambm chamada por AWT) a maior vantagem deste pacote era que quando os componentes eram chamados pelo SO Windows, por exemplo, eles mantinham a aparncia deste, o mesmo sistema ao ser chamado pelo SO Solaris mudava automaticamente e assim sucessivamente. A SWING nasceu com o intuito de melhorar os objetos da AWT dotando-lhes de capacidades que os mesmos no possuem, todos eles seguem os mesmo padres de comportamento. Principais componentes: Frames Janelas que podem incluir uma barra de ttulos e uma barra de menus, alm de botes para maximizar, minimizar e fechar. Contineres Elementos da interface que podem manter outros componentes. Botes Regies clicveis, com texto ou grficos indicando sua finalidade. Rtulos Texto ou grficos que oferecem informaes. Campos de texto e reas de texto Janelas que aceitam entrada do teclado e permitem que o texto seja editado. Listas drop-down Grupos de itens relacionados, que podem ser selecionados a partir de menus dropdown ou janelas rolveis. Caixas de seleo e botes de opo Pequenas janelas ou crculos que podem ser marcados ou desmarcados. Dois outros pacotes usados com a programao da interface grfica com o usurio so o java.awt e o java.awt.event, classes de tratamento de eventos que tratam da entrado do usurio. Todos os componentes do Swing so subclasses da classe abstrata JComponent, que inclui mtodos para definir o tamanho de um componente, alterar a cor de fundo, definir a fonte usada em todo texto exibido e configurar as ToolsTips texto explanatrio que aparece quando um usurios repousa o mouse por alguns segundos sobre o componente. Para que os componentes possam ser exibidos em uma interface com o usurio, eles devem ser acrescentados a um continer, um componente que pode conter outros componentes. CONTINERS JFrame Uma janela como se conhece com todos os botes. JDialog Uma janela de dilogo com o usurio, a mesma que aparece quando utilizamos a JOptionPane. JWindow Uma janela simples, sem barra de ttulos. JPanel Agrupa um ou mais objetos dentro de uma janela, especificando uma rea de atuao JApplet um panel para ser utilizado na Internet. O primeiro passo na criao de uma aplicao Swing criar uma classe que representa a interface grfica com o usurio. Um objeto dessa classe serve como um continer que mantm todos os outros componentes a serem exibidos. Em muitos projetos, o objeto de interface principal uma janela simples (a classe window) ou uma janela mais especializada, chamada de frame (a classe JFrame). Uma janela simples no possui uma barra de ttulos; botes para maximizar, minimizar e fechar; ou outros recursos que voc v na maioria das janelas abertas no sistema operacional de uma interface grfica com o usurio. As janelas que possuem esses recursos de gerenciamento de janela so chamados frames. Um modo de criar uma aplicao grfica Swing tornar a interface uma subclasse de JFrame, como na declarao de classe a seguir: public class Janela extends JFrame {

4

Escola Tcnica de Braslia

Curso de Java I

// ... } O construtor da classe deve tratar das seguintes tarefas: Chamar o construtor de uma superclasse para dar um ttulo ao frame e tratar de outros procedimentos de configurao. Definir o tamanho da janela de um frame, especificando a largura e a altura em pixels ou deixando o Swing escolher o tamanho certo. Decidir o que fazer se um usurio fechar a janela. Exibir o frame. Construtores: JFrame( ) - deixa a barra de ttulo vazia JFrame(Texto) - define a barra de ttulos do frame para o texto especificado. Mtodos: setTitle(Texto) defini um ttulo para o frame. setSize(int,int) - defini o tamanho com a largura e a altura como argumentos. O tamanho de um frame indicado em pixels, de modo que, se voc chamasse setSize(600,600), o frame ocuparia, quando exibido, a maior parte de toda a tela na resoluo de 800 x 600. Podemos tambm chamar o mtodo setSize(Dimension) para definir o tamanho de um frame. Dimension uma classe java.awt que representa a largura e a altura de um componente da interface com o usurio. A chamada do construtor Dimension(int,int) cria um objeto Dimension representando a largura e a altura especificados como argumentos. pack( ) - outra alternativa para definir o tamanho, isso redimensiona o frame com base no tamanho dos seus componentes. Se o frame for maior do que precisa ser, pack( ) o encolher ao tamanho mnimo necessrio para exibir os componentes. Se o frame for muito pequeno (ou o tamanho no tiver sido definido), pack( ) o expandir para o tamanho exigido. show ( ) - Os frames so invisveis quando criados. Este mtodo utilizado para torn-los visveis. setVisible(boolean) - Tornar visvel ou no um frame, dependendo dos valores true ou false. hide ( ) - ocultam um frame

5

Escola Tcnica de Braslia Exemplo 1: Frame/AWT.

Curso de Java I

import java.awt.*; public class Janela{ public static void main (String args[]) { Frame tela= new Frame( ); tela.setTitle("Janela"); tela.setSize(200,200); tela.setBackground(Color.black); tela.setVisible(true); } } Exerccio 1: 1) Qual a vantagem de se utilizar a AWT? 2) Explique o mtodo setBackground(Color.black). Extra 1: JWindow

import javax.swing.*; public class Janela2 extends JWindow{ public Janela2(){ super(); setBounds(50,50,10,10); setVisible(true); } public static void main(String args[]){ Janela2 j = new Janela2(); for (int i=10;i>"); b1.addActionListener(this); p1.add(new JScrollPane(compra)); p2.add(b1); p1.add(p2); p1.add(new JScrollPane(sel)); add(p1); setVisible(true); } public static void main(String args[]){ ListTest lt = new ListTest(); } public void actionPerformed(ActionEvent evt){ Object source = evt.getSource(); if(source ==b1){ sel.setListData(compra.getSelectedValues());} } }

80

Escola Tcnica de Braslia Extra: ActionListener, JInternalFrame, JDesktopPane

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DesktopTest extends JFrame { private JDesktopPane area; public DesktopTest() { super( "Using a JDesktopPane" ); JMenuBar bar = new JMenuBar(); JMenu addMenu = new JMenu( "Menu" ); JMenuItem newFrame = new JMenuItem( "Internal Frame" ); addMenu.add( newFrame ); bar.add( addMenu ); setJMenuBar( bar ); area = new JDesktopPane(); getContentPane().add(area); newFrame.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent event ) { JInternalFrame frame = new JInternalFrame("Internal Frame", true, false, true, true ); Container container = frame.getContentPane(); MyJPanel panel = new MyJPanel(); container.add( panel, BorderLayout.CENTER ); frame.pack(); area.add( frame ); frame.setVisible( true ); } } ); setSize( 600, 440 ); setVisible( true ); } public static void main( String args[] ) { DesktopTest application = new DesktopTest(); application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } } class MyJPanel extends JPanel {

81

Escola Tcnica de Braslia Curso de Java I private ImageIcon imageIcon; public MyJPanel() { imageIcon = new ImageIcon( "c:/imagens/ford_fusion.jpg" ); } public void paintComponent( Graphics g ) { super.paintComponent( g ); imageIcon.paintIcon( this, g, 0, 0 ); } public Dimension getPreferredSize() { return new Dimension( imageIcon.getIconWidth(), imageIcon.getIconHeight() ); } } Extra: ActionListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ComboBoxTest extends JFrame implements ItemListener{ private JComboBox cb; private JLabel l1; private String carros[]={"c:/cones/ford_ka.jpg","c:/cones/ford_fiesta.jpg","c:/cones /ford_fiesta_sedan.jpg", "c:/cones/ford_fiesta_trail.jpg","c:/cones/ford_focus.jpg", "c:/cones/ford_focus_sedan.jpg","c:/cones/ford_fusion.jpg"}; private String nomescarros[]={"ford ka","ford fiesta","ford fiesta sedan","ford fiesta trail","ford focus","ford focus sedan","ford fusion"}; private Icon icones[]={new ImageIcon(carros[0]),new ImageIcon(carros[1]),new ImageIcon(carros[2]),new ImageIcon(carros[3]), new ImageIcon(carros[4]),new ImageIcon(carros[5]),new ImageIcon(carros[6])}; public ComboBoxTest() { super("Selecione seu carro"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300,300); JPanel p1 = new JPanel(); p1.setLayout(new FlowLayout()); cb = new JComboBox(nomescarros); cb.setMaximumRowCount(3);

82

Escola Tcnica de Braslia cb.addItemListener(this); l1=new JLabel(icones[0]); setVisible(true); p1.setBackground(Color.WHITE); p1.add(cb); p1.add(l1); add(p1);

Curso de Java I

} public static void main (String args[]){ ComboBoxTest t = new ComboBoxTest(); } public void itemStateChanged(ItemEvent evt){ Object source = evt.getSource(); if (evt.getStateChange()==ItemEvent.SELECTED) l1.setIcon(icones[cb.getSelectedIndex()]); } }

FocusListenerOs eventos de foco ocorrem quando qualquer componente ganha ou perde o foco da entrada em uma interface grfica com o usurio. Foco descreve o componente que est ativo para entrada pelo teclado. Se um dos campos tiver o foco (em uma interface com o usurio contendo vrios campos de texto editveis), um cursor piscar nesse campo. Qualquer texto inserido entrar nesse componente. O foco se aplica a todos os componentes que podem receber entrada. Em um objeto JButton, um contorno pontilhado aparece no boto que possui o foco. Um componente pode receber o foco chamando seu mtodo requestFocus sem argumentos, como neste exemplo: JButton ok = new JButton(OK); ok.requestFocus( ); Para tratar o evento do foco, uma classe precisa implementar a interface FocusListener. Existem dois mtodos na interface: focusGained(FocusEvent) e focusLost(FocusEvent). Eles tm os seguintes formatos: public void focusGained(FocusEvent event){ // ...} public void focusLost(FocusEvent event){ // ...} Para determinar qual objeto obteve ou perdeu o foco, o mtodo getSource( ) pode ser chamado no objeto FocusEvent e enviado como argumento para os mtodos focusGained( ) e focusLost( ).

83

Escola Tcnica de Braslia Exemplo 2: FocusListener.

Curso de Java I

import java.awt.event.*; import javax.swing.*; import java.awt.*; public class SomaFoco extends JFrame implements FocusListener{ JTextField valor1 = new JTextField("0",5); JLabel soma = new JLabel("+"); JTextField valor2 = new JTextField("0",5); JLabel igual = new JLabel("="); JTextField res = new JTextField("0",5); public SomaFoco(){ super("Somar"); setSize(350,90); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); FlowLayout f = new FlowLayout(FlowLayout.CENTER); setLayout(f); valor1.addFocusListener(this); valor2.addFocusListener(this); res.setEditable(false); add(valor1); add(soma); add(valor2); add(igual); add(res); setVisible(true); } public void focusGained(FocusEvent event){ try{ float total = Float.parseFloat(valor1.getText())+ Float.parseFloat(valor2.getText()); res.setText(""+total); }catch (NumberFormatException nfe){ valor1.setText("0"); valor2.setText("0"); } } public void focusLost(FocusEvent event){ focusGained(event); } public static void main(String[] arguments){ SomaFoco frame = new SomaFoco(); } }

84

Escola Tcnica de Braslia

Curso de Java I

ItemListenerOcorrem quando um item selecionado ou perde a seleo em componentes como botes, caixas de seleo ou botes de opo. Uma classe precisa implementar a interface itemListener para poder tratar desses eventos. itemStateChanged(ItemEvent) o nico mtodo na interface ItemListener. Ele tem o seguinte formato: void itemStateChanged(ItemEvent event){ //...} Para determinar em que item ocorreu o evento, o mtodo getItem( ) pode ser chamado no objeto ItemEvent. Podemos determinar se o item foi selecionado ou se perdeu a seleo, usando o mtodo getStateChange( ).Esse mtodo retorna um inteiro que ser igual varivel de classe ItemEvent.DESELECTED ou ItemEvent.SELECTED.

85

Escola Tcnica de Braslia Exemplo 3: ItemListener

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EventoItem extends JFrame implements ItemListener{ String[] escolha = {"(escolha seu programa)", "MSN Messenger", "Windows Live Messenger","Ares Galaxy", "AVG Anti-vrus"}; String[] descricao = {"MSN Messenger 8.5.1302 Final","Windows Live Messenger 2009 14.0.864.206","Ares Galaxy 2.1.1.3035","AVG AntiVirus Free 8.5 Build 325a1500"}; JComboBox combo = new JComboBox(); JLabel rotulo = new JLabel(""); public EventoItem(){ super("Escolha seu programa"); setSize(420,150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); for (int i=0; i < escolha.length; i++){ combo.addItem(escolha[i]); } combo.addItemListener(this); add(BorderLayout.NORTH, combo); add(BorderLayout.CENTER, rotulo); setVisible(true); } public void itemStateChanged(ItemEvent event){ int pos = combo.getSelectedIndex(); if (pos >0){ rotulo.setText(descricao[pos-1]); } } public Insets getInsets(){ return new Insets(50,10,10,10); } public static void main(String[] arguments){ EventoItem ei = new EventoItem(); } }

86

Escola Tcnica de Braslia Extra: ItemListener, ActionListener

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemplo0908 extends JFrame implements ActionListener, ItemListener{ JLabel L1; JTextField T1,T2,T3; JComboBox combo; JButton B1,B2,B3,B4,B5,B6,B7,B8; Exemplo0908(){ setTitle("Uso do JComboBox"); setSize(400,170); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setBackground(new Color(190,190,190)); L1 = new JLabel("Conteudo"); L1.setForeground(Color.blue); L1.setFont(new Font("Arial", Font.BOLD, 15)); B1 = new JButton("Mostra Texto"); B1.addActionListener(this); B2 = new JButton("Mostra Indice"); B2.addActionListener(this); B3 = new JButton("Adiciona Item"); B3.addActionListener(this); B4 = new JButton("Remove Item"); B4.addActionListener(this); B5 = new JButton("Remove Todos"); B5.addActionListener(this); B6 = new JButton("Quant. Itens"); B6.addActionListener(this); T1 = new JTextField(); T2 = new JTextField(); String[] cores = {"Branco","Vermelho","Azul","Verde"}; combo = new JComboBox(cores); combo.addItemListener(this); getContentPane().setLayout(new GridLayout(5,2)); getContentPane().add(L1); getContentPane().add(combo); getContentPane().add(B1); getContentPane().add(B4); getContentPane().add(B2); getContentPane().add(B5); getContentPane().add(B3); getContentPane().add(T1); getContentPane().add(B6); getContentPane().add(T2); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource()==B1)//mostra texto

87

Escola Tcnica de Braslia Curso de Java I L1.setText("Texto: "+combo.getSelectedItem()); if (e.getSource()==B2)//mostra indice L1.setText("Indice: " + combo.getSelectedIndex()); if (e.getSource()==B3)//adiciona item if (T1.getText().length()!=0) { combo.addItem(T1.getText()); T1.setText(""); } if (e.getSource()==B4)//remove item combo.removeItemAt(combo.getSelectedIndex()); if (e.getSource()==B5)//remove todos os itens combo.removeAllItems(); if (e.getSource()==B6)//quantidade de itens T2.setText(""+combo.getItemCount()); } public void itemStateChanged(ItemEvent e) { T1.setText(""+combo.getSelectedItem()); } public static void main(String args[]){ JFrame Janela = new Exemplo0908(); } } Extra: ItemListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemplo0909 extends JFrame implements ItemListener { JLabel L1; JCheckBox C1,C2; static int negrito=0,italico=0; Exemplo0909() { getContentPane().setBackground(new Color(180,180,180)); setTitle("Uso do JCheckBox"); setSize(300,70); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER)); L1 = new JLabel("Java"); L1.setFont(new Font("Arial",Font.PLAIN,20)); L1.setForeground(Color.black); C1 = new JCheckBox("Negrito"); C1.setBackground(new Color(180,180,180)); C1.addItemListener(this); C2 = new JCheckBox("Italico");

88

Escola Tcnica de Braslia C2.setBackground(new Color(180,180,180)); C2.addItemListener(this); getContentPane().add(L1); getContentPane().add(C1); getContentPane().add(C2); setVisible(true); } public void itemStateChanged(ItemEvent e) { if(e.getSource()==C1) { if(e.getStateChange()==ItemEvent.SELECTED) negrito=Font.BOLD; else negrito=Font.PLAIN; } if(e.getSource()==C2) { if(e.getStateChange()==ItemEvent.SELECTED) italico=Font.ITALIC; else italico=Font.PLAIN; } L1.setFont(new Font("Arial",negrito+italico,20)); } public static void main(String args[]) { JFrame Janela = new Exemplo0909(); } } Extra: ItemListener

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; class Exemplo0910 extends JFrame implements ItemListener{ JLabel L1,L2; float N1=0,result=0; JTextField T1, T2; JPanel P1,P2; JRadioButton radio1,radio2,radio3; ButtonGroup radiogroup; public static void main(String args[]) { JFrame Janela = new Exemplo0910(); } Exemplo0910() { setTitle("Uso de botoes de Radio "); setSize(340,120);

89

Escola Tcnica de Braslia Curso de Java I setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER)); L1 = new JLabel("Digite um valor"); L1.setForeground(Color.blue); L2 = new JLabel("% do Valor :"); L2.setForeground(Color.blue); T1 = new JTextField(5); T2 = new JTextField(5); P1 = new JPanel(); P2 = new JPanel(); T2.setEditable(false); radio1 = new JRadioButton("10% do valor"); radio2 = new JRadioButton("20% do valor"); radio3 = new JRadioButton("30% do valor"); radio1.setMnemonic(KeyEvent.VK_1); radio2.setMnemonic(KeyEvent.VK_2); radio3.setMnemonic(KeyEvent.VK_3); radiogroup = new ButtonGroup(); radiogroup.add(radio1); radiogroup.add(radio2); radiogroup.add(radio3); radio1.addItemListener(this); radio2.addItemListener(this); radio3.addItemListener(this); P1.setLayout(new FlowLayout(FlowLayout.CENTER)); P1.setBackground(new Color(200,200,200)); P2.setLayout(new GridLayout(2,3)); P2.setBackground(new Color(200,200,200)); P1.add(L1); P1.add(T1); P2.add(radio1); P2.add(radio2); P2.add(radio3); P2.add(L2); P2.add(T2); getContentPane().add(P1); getContentPane().add(P2); setVisible(true); } public void itemStateChanged(ItemEvent e) { if (T1.getText().length()==0) return; try { N1 = Float.parseFloat(T1.getText()); if (e.getSource()==radio1) result = (N1 * 10)/100; if (e.getSource()==radio2) result = (N1 * 20)/100; if(e.getSource()==radio3) result = (N1 * 30)/100; } catch(NumberFormatException erro) { T2.setText("Erro"); return; } T2.setText(""+result); } }

90

Escola Tcnica de Braslia Extra: ItemListener

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class RadioButtonTest extends JFrame implements ItemListener{ private JTextField t1; private Font p,b,i,bi; private JRadioButton rp,rb,ri,rib; private ButtonGroup bg; public RadioButtonTest() { super("Negrito - Itlico"); setSize(350,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p1 = new JPanel(); p1.setLayout(new FlowLayout()); t1=new JTextField(25); rp=new JRadioButton("Plana",true); rb=new JRadioButton("Negrito",false); ri=new JRadioButton("Itlico",false); rib=new JRadioButton("Negrito - Itlico",false); rp.addItemListener(this); rb.addItemListener(this); ri.addItemListener(this); rib.addItemListener(this); bg = new ButtonGroup(); bg.add(rp);bg.add(rb);bg.add(ri);bg.add(rib); p=new Font("Serif",Font.PLAIN,14); b=new Font("Serif",Font.BOLD,14); i=new Font("Serif",Font.ITALIC,14); bi=new Font("Serif",Font.BOLD+Font.ITALIC,14); p1.add(t1); p1.add(rp); p1.add(rb); p1.add(ri); p1.add(rib); add(p1); setVisible(true); } public static void main(String args[]){ RadioButtonTest t = new RadioButtonTest(); } public void itemStateChanged(ItemEvent evt){ if(evt.getSource()==rp) t1.setFont(p); else if (evt.getSource()==rb) t1.setFont(b); else if (evt.getSource()==ri) t1.setFont(i); else if(evt.getSource()==rib) t1.setFont(bi); } }

91

Escola Tcnica de Braslia

Curso de Java I

KeyListenerOcorrem quando um tecla pressionada no teclado. Qualquer componente pode gerar eventos, e uma classe precisa implementar a interface KeyListener para dar suporte a eles. Existem trs mtodos na interface KeyListener. So eles KeyPressed(KeyEvent), KeyRealeased(KeyEvent) e KeyTyped(KeyEvent). Eles tm os seguintes formatos: public void keyPressed(KeyEvent event){ // ...} public void keyReleased(KeyEvent event){ // ...} public void KeyTyped(KeyEvent event){ // ...} O mtodo getKeyChar( ) de KeyEvent retorna o caractere da tecla associada ao evento. Se no houver um caractere Unicode que possa ser representado pela tecla, getKeyChar( ) retornar um valor de caractere igual varivel de classe KeyEvent.CHAR_UNDEFINED. Para um componente gerar eventos de tecla, ele dever ser capaz de receber o foco de entrada. Os campos de texto, reas de texto e outros componentes que usam entrada via teclado oferecem esse suporte automaticamente. No caso de outros componentes, como rtulos e painis, o mtodo setFocusable(boolean) deve ser chamado com um argumento true: Container pane = getContentPane(); pane.setFocusable(true); Extra: KeyListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemplo1002 extends JFrame implements KeyListener{ JTextField T1,T2; public Exemplo1002() { setTitle("Cdigo das teclas"); setSize(190,65); setResizable(false); setLocation(100,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new GridLayout(2,1)); T1 = new JTextField(); T2 = new JTextField(); T1.addKeyListener(this); getContentPane().add(T1); getContentPane().add(T2); setVisible(true); } public void keyPressed(KeyEvent e) { T2.setText(""+e.getKeyCode()); } public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) {} public static void main(String[] args) { JFrame Janela = new Exemplo1002(); } }

92

Escola Tcnica de Braslia Extra: KeyListener

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class KeyDemo extends JFrame implements KeyListener { private String linha1="",linha2="",linha3=""; private JTextArea ta; public KeyDemo() { super("Eventos de Teclado"); setSize(350,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ta=new JTextArea(10,15); ta.setText("Pressione qualquer tecla"); ta.setEnabled(false); getContentPane().add(ta); addKeyListener(this); setVisible(true); } public void keyPressed(KeyEvent evt){ linha1="Tecla pressionada: "+evt.getKeyText(evt.getKeyCode()); //getKeyCode - obtm o cdigo de tecla virtual da chave que foi pressionada //getKeyText - devolve uma string que contm o nome da tecla que foi pressionada setLinha2and3(evt); } // chamado quando se solta a tecla depois de qualquer evento keyPressed ou keyTyped public void keyReleased(KeyEvent evt){ linha1="Tecla solta "+evt.getKeyText(evt.getKeyCode()); setLinha2and3(evt); } public void keyTyped(KeyEvent evt){ linha1="Tecla digitada "+evt.getKeyChar(); //getKeyChar -obtm o valor Unicode do caractere digitado setLinha2and3(evt); } private void setLinha2and3(KeyEvent evt){ linha2="Esta tecla "+(evt.isActionKey()?"":"no")+" uma ao de teclado"; //isActionKey - determina se a tecla pressionada uma tecla de ao(Exemplo: F1) String temp = evt.getKeyModifiersText(evt.getModifiers()); //getModifiers - chamado para determinar se alguma tecla modificadora foi pressionada (Exemplo: CTRL)

93

Escola Tcnica de Braslia Curso de Java I //getKeyModifiersText - produz uma string que contm os nomes das teclas modificadoras pressionadas linha3="Modificar tecla pressionada "+(temp.equals("")?"nada":temp); ta.setText(linha1+"\n"+linha2+"\n"+linha3+"\n"); } public static void main(String args[]){ KeyDemo janela = new KeyDemo(); } }

MouseListenerOs eventos de mouse so gerados pelos seguintes tipos de interao com o usurio: Um clique do mouse Um mouse entrando na rea de um componente Um mouse saindo da rea de um componente Qualquer componente pode gerar esses eventos, que so implementados por uma classe usando a interface MouseListener. Essa interface possui cinco mtodos: mouseCliked(MouseEvent) mouseEntered(MouseEvent) mouseExit(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) Cada um apanha o mesmo formato bsico de mouseReleased(MouseEvent): public void mouseReleased(MouseEvent){ // ...} Os mtodos a seguir podem ser usados nos objetos MouseEvent: getClickCount( ) Retorna o nmero de vezes que o mouse foi clicado como um nmero inteiro getPoint( ) Retorna as coordenadas x,y dentro do componente onde o mouse foi clicado como um objeto Point. getX( )- Retorna a posio x getY( ) Retorna a posio y Extra: MouseListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MouseDetails extends JFrame { private int xPos, yPos; public MouseDetails() { super("Clique dos botes do mouse"); setSize(350,150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addMouseListener(new MouseClickHandler());

94

Escola Tcnica de Braslia setVisible(true);

Curso de Java I

} public void paint(Graphics g){ super.paint(g); g.drawString("Clicado em ["+xPos+","+yPos+"]",xPos,yPos); } public static void main(String args[]){ MouseDetails janela = new MouseDetails(); } private class MouseClickHandler extends MouseAdapter{ public void mouseClicked(MouseEvent evt){ xPos = evt.getX(); yPos = evt.getY(); String title = "Clicado "+evt.getClickCount()+" vezes "; if(evt.isMetaDown()) title+="com o boto direito"; else if(evt.isAltDown()) title+="com o boto central"; else title+="com o boto esquerdo"; setTitle(title); repaint(); } } } Extra: MouseListener, ActionListener, JPopupMenu

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemplo0919 extends JFrame implements ActionListener { JPopupMenu mpopup; JMenuItem miCopiar, miColar, miSalvar; JMenuBar M1; JTextField T1; JButton B1,B2; public Exemplo0919() { setTitle("Uso de Menus Popup"); setSize(220,120); setLocation(50,50); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setBackground(new Color(0,128,128)); getContentPane().setLayout(new GridLayout(3,1)); M1 = new JMenuBar(); T1 = new JTextField();

95

Escola Tcnica de Braslia Curso de Java I B1 = new JButton("Boto 1"); B2 = new JButton("Boto 2"); mpopup = new JPopupMenu(); MouseListener registra = new MostraPopup(); B1.addMouseListener(registra); miCopiar = new JMenuItem ("Copiar"); miCopiar.addActionListener(this); miCopiar.setMnemonic(KeyEvent.VK_C); miColar = new JMenuItem ("Colar"); miColar.addActionListener(this); miColar.setMnemonic(KeyEvent.VK_O); miSalvar = new JMenuItem ("Salvar", new ImageIcon("MenuSalvar.gif")); miSalvar.addActionListener(this); miSalvar.setMnemonic(KeyEvent.VK_S); mpopup.add(miCopiar); mpopup.add(miColar); mpopup.add(miSalvar); getContentPane().add(B1); getContentPane().add(B2); getContentPane().add(T1); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource()==miCopiar) T1.setText("Copiar"); if (e.getSource()==miColar) T1.setText("Colar"); if (e.getSource()==miSalvar) T1.setText("Salvar"); } class MostraPopup extends MouseAdapter { public void mousePressed(MouseEvent e) { mpopup.show(e.getComponent(),e.getX(), e.getY()); } } public static void main(String args[]) { JFrame Janela=new Exemplo0919(); } }

96

Escola Tcnica de Braslia

Curso de Java I

MouseMotionListenerOs eventos de movimento do mouse ocorrem quando um mouse movimentado sobre um componente. Assim como em outros eventos de mouse, qualquer componente pode gerar eventos de movimento do mouse. Uma classe precisa implementar a interface MouseMotionListener para que possa dar suporte a eles. Existem dois mtodos na interface MouseMotionListener: mouseDragged(MouseEvent) e mouseMoved(MouseEvent). Eles tm os seguintes formatos: public void mouseDragged(MouseEvent event){ // ...} public void mouseMoved(MouseEvent event){ // ...} Ao contrrio de outras interfaces ouvintes de evento tratadas at esse ponto, MouseMotionListener no possui seu prprio tipo de evento. Em vez disso, so utilizados objetos MouseEvent. Por causa disso, podemos chamar os mesmos mtodos que chamaramos para eventos do mouse: getClick( ), getPoint( ), getX( ), getY( ). Exemplo: Demonstra como detectar e responder a eventos de mouse. Contm as classes MousePrank e PrankPanel, que implementam um boto que tenta evitar que seja clicado. A classe Mouse Prank um frame que contm dois componentes organizados com layout de borda o rtulo Clique em OK para fechar este programa e um painel com um boto OK nele. Exemplo 4: MouseMotionListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MovimentoMouse extends JFrame implements ActionListener { public MovimentoMouse() { super("Movimento de mouse"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(420, 220); BorderLayout borda = new BorderLayout(); setLayout(borda); JLabel mensagem = new JLabel("Clique em OK para fechar este programa."); add(BorderLayout.NORTH, mensagem); Mouse mouse = new Mouse(); mouse.ok.addActionListener(this); add(BorderLayout.CENTER, mouse); setVisible(true); } public void actionPerformed(ActionEvent event) { System.exit(0);

97

Escola Tcnica de Braslia } public Insets getInsets() { return new Insets(40, 10, 10, 10); } public static void main(String[] arguments) { new MovimentoMouse(); }

Curso de Java I

} class Mouse extends JPanel implements MouseMotionListener { JButton ok = new JButton("OK"); int buttonX, buttonY, mouseX, mouseY; int width, height; Mouse() { super(); setLayout(null); addMouseMotionListener(this); buttonX = 110; buttonY = 110; ok.setBounds(new Rectangle(buttonX, buttonY, 70, 20)); add(ok); } public void mouseMoved(MouseEvent event) { mouseX = event.getX(); mouseY = event.getY(); width = (int)getSize().getWidth(); height = (int)getSize().getHeight(); if (Math.abs((mouseX + 35) - buttonX) < 50) { buttonX = moveButton(mouseX, buttonX, width); repaint(); } if (Math.abs((mouseY + 10) - buttonY) < 50) { buttonY = moveButton(mouseY, buttonY, height); repaint(); } } public void mouseDragged(MouseEvent event) { // no utilizado } private int moveButton(int mouseAt, int buttonAt, int border) { if (buttonAt < mouseAt) { buttonAt--; } else { buttonAt++; } if (buttonAt > (border - 20)) { buttonAt = 10; } if (buttonAt < 0) { buttonAt = border - 80;

98

Escola Tcnica de Braslia } return buttonAt; } public void paintComponent(Graphics comp) { super.paintComponent(comp); ok.setBounds(buttonX, buttonY, 70, 20); }

Curso de Java I

} Explicao: Como o boto no se comporta normalmente, ele implementado com a classe Mouse, uma subclasse de JPanel. Esse painel inclui um boto desenhado em uma posio especifica no painel em vez de ser posicionado por um gerenciador de layout. Primeiro o gerenciador do layout definido como null, o que faz parar usando o layout de fluxo por padro: setLayout(null); Em seguida, o boto posicionado no painel usando setBounds(Rectangle), o mesmo mtodo que determina onde um frame ou janela aparecer em um desktop. Um objeto Rectangule criado com quatro argumentos: sua posio x, posio y, largura e altura. Veja como Mouse desenha o boto: JButton ok = new JButton(OK); int buttonX=110; int buttonY=110; ok.setBounds(new Rectangle(buttonX, buttonY, 70, 20)); mais eficiente criar o objeto Rectangle dentro da chamada de mtodo, pois no precisamos usar o objeto em nenhum outro lugar na classe. As seguintes instrues fazem o mesmo em duas etapas: Rectangle box = new Rectangle(buttonX, buttonY, 70,20); ok.setBounds(box); A classe possui variveis de instncia que contm a posio x, y do boto, buttonX e buttonY. Elas comeam em 110, 110 e mudam toda vez que o mouse atinge 50 pixels do centro do boto. Os movimentos do mouse so rastreados implementando-se a interface MouseListener e seus dois mtodos, mouseMoved(MouseEvent) e mouseDragged(MouseEvent). O painel usa mouseMoved() e ignora mouseDragged(). Quando o mouse se move, os mtodos getX e getY do objeto do evento de mouse retornam sua posio x,y atual que armazenada nas variveis de instncia mousex e mousey. O mtodo mouseButton(int, int, int) usa trs argumentos: A posio x ou y do boto A posio x ou y do mouse A largura ou altura do painel Esse mtodo move o boto para fora do mouse tanto no sentido vertical como horizontal, dependendo de ter sido chamado com as coordenadas x e a altura do painel ou com as coordenadas y e a largura. Depois de movido o boto, o mtodo repaint() chamado, o que faz o mtodo paintComponent(Graphics) do painel ser chamado. Todo componente possui um mtod paintComponent que pode ser redefinido para desenhar o componente. O mtodo setBounds( ) do boto exibe-os na posio x, y atual.

99

Escola Tcnica de Braslia Extra: MouseListener, MouseMotionListener

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MouseTracker extends JFrame implements MouseListener, MouseMotionListener { private JLabel statusBar; public MouseTracker() { super("Demostrao de Eventos de Mouse"); setSize(275,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); statusBar = new JLabel(); getContentPane().add(statusBar,BorderLayout.SOUTH); // o aplicativo espera seus prprios eventos de mouse addMouseListener(this); addMouseMotionListener(this); setVisible(true); } //trata evento quando o mouse liberado imediatamente aps ser pressionado public void mouseClicked(MouseEvent evt){ statusBar.setText("Clicado em ["+evt.getX()+","+evt.getY()+"]"); } //trata evento quando o mouse pressionado public void mousePressed(MouseEvent evt){ statusBar.setText("Pressionado ["+evt.getX()+","+evt.getY()+"]"); } //trata evento quando o mouse liberado aps ser arrastado public void mouseReleased(MouseEvent evt){ statusBar.setText("Arrastado ["+evt.getX()+","+evt.getY()+"]"); } //trata event quando o mouse entra na rea da janela na tela public void mouseEntered(MouseEvent evt){ JOptionPane.showMessageDialog(null,"O mouse entrou na janela"); } //trata evento quando o mouse sai da rea da janela na tela public void mouseExited(MouseEvent evt){ statusBar.setText("O mouse saiu da janela"); } //tratadores de eventos MouseMotionListener //trata evento quano o usurio arrasta o mouse com o boto pressionado public void mouseDragged(MouseEvent evt){

100

Escola Tcnica de Braslia Curso de Java I statusBar.setText("Arrastado ["+evt.getX()+","+evt.getY()+"]"); } //trata evento quando o usurio movimenta o mouse public void mouseMoved(MouseEvent evt){ statusBar.setText("Movimento do mouse ["+evt.getX()+","+evt.getY()+"]"); } public static void main(String args[]){ MouseTracker janela = new MouseTracker(); } } Extra: MouseMotionListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Painter extends JFrame{ private int xValue = -10, yValue= -10; public Painter() { super("Desenhe"); setSize(300,150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().add(new JLabel("Arraste o mouse desenhar"),BorderLayout.SOUTH); addMouseMotionListener( new MouseMotionAdapter(){ public void mouseDragged(MouseEvent evt){ xValue = evt.getX(); yValue = evt.getY(); repaint(); } } ); setVisible(true); } public void paint(Graphics g){ g.fillOval(xValue,yValue,4,4); } public static void main(String args[]){ Painter janela = new Painter(); } }

para

101

Escola Tcnica de Braslia

Curso de Java I

WindowListenerOs eventos de janela ocorrem quando um usurio abre ou fecha um objeto janela, como o JFrame ou JWindow. Qualquer componente pode gerar esses eventos, e uma classe precisa implementar a interface WindowListener para oferecer suporte a eles. Existem sete mtodos na interface WindowListener: windowActivated(WindowEvent) windowClosed(WindowEvent) windowClosing(WindowEvent) windowDeactivated(WindowEvent) windowDeiconified(WindowEvent) windowIconified(WindowEvent) windowOpened(WindowEvent) Todos eles tomam a mesma forma do mtodo windowOpened( ): public void windowOpened(WindowEvent evt){ //...} Os mtodos windowClosing( ) e windowClosed( ) so semelhantes, mas um chamado enquanto a janela est fechando, e o outro chamado depois que estiver fechada. Na verdade, podemos tomar uma ao em um mtodo windowClosing( ) para evitar que a janela seja fechada. Extra: MouseListener, KeyListener, TextListener, FocusListener, MouseMotionListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class Exemplo1001 extends JFrame implements MouseListener, KeyListener, TextListener, FocusListener, MouseMotionListener { JButton B1; JLabel L1,L2; JTextField T1,T2; TextField T3; static int E=100,T=100; public static void main(String[] args) { JFrame Janela = new Exemplo1001(); Janela.show(); WindowListener x = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); }

102

Escola Tcnica de Braslia public void windowActivated(WindowEvent e) { // A Janela foi ativada } public void windowDeactivated(WindowEvent e){ // A Janela foi desativada } public void windowIconified(WindowEvent e) { // A Janela foi minimizada } public void windowDeiconified(WindowEvent e) { // A Janela foi restaurada; } public void windowOpened(WindowEvent e) { mostraMensagem("A Janela foi aberta"); public void windowClosed(WindowEvent e) { // A Janela foi fechada } }; Janela.addWindowListener(x);

Curso de Java I

}

ComponentListener y = new ComponentAdapter() { public void componentHidden(ComponentEvent e) { mostraMensagem("A janela tornou-se oculta"); } public void componentMoved(ComponentEvent e) { mostraMensagem("A janela foi movida"); } public void componentResized(ComponentEvent e) { mostraMensagem("A janela foi redimensionada"); } public void componentShown(ComponentEvent e) { mostraMensagem("A janela tornou-se visvel"); } }; Janela.addComponentListener(y); } Exemplo1001() { setTitle("Manipulao de Eventos"); setSize(280,200); setLocation(E,T); getContentPane().setLayout(new GridLayout(6,1)); L1 = new JLabel(""); L2 = new JLabel(""); B1 = new JButton ("Eventos do Boto"); T1 = new JTextField(); T2 = new JTextField(); T3 = new TextField(); B1.addMouseListener(this); B1.addMouseMotionListener(this); B1.setBackground(Color.gray); T1.addKeyListener(this); T3.addTextListener(this); T3.addKeyListener(this); T3.addFocusListener(this); getContentPane().add(B1); getContentPane().add(L1); getContentPane().add(L2); getContentPane().add(T1); getContentPane().add(T3); getContentPane().add(T2); } // mtodos relativos a MouseListener public void mousePressed(MouseEvent e){

103

Escola Tcnica de Braslia Curso de Java I L1.setText("O boto do Mouse foi pressionado"); mostraMensagem(""+e.getClickCount() + " " + e.getX()+ " " + e.getY()); //mostraMensagem(""+e.isLeftMouseButton()+ " "+ e.isControlDown()); } public void mouseClicked(MouseEvent e) { L1.setText("O boto do Mouse foi solto"); } public void mouseEntered(MouseEvent e){ // o ponteiro do mouse entrou na rea B1.setBackground(Color.yellow); } public void mouseExited(MouseEvent e) { // o ponteiro do mouse saiu da rea B1.setBackground(Color.gray); } public void mouseReleased(MouseEvent e) { L1.setText("O ponteiro do Mouse foi arrastado"); } // mtodos relativos a MouseMotionListener public void mouseMoved(MouseEvent e) { L2.setText("Mouse se moveu em "+e.getX()+" , "+e.getY()); } public void mouseDragged(MouseEvent e) { L2.setText("Mouse foi arrastado em "+e.getX()+" , "+e.getY()); } // mtodos relativos a KeyListener public void keyPressed(KeyEvent e){ // uma tecla foi pressionada if (e.getSource()==T1){ if(e.getKeyCode()==10 || e.getKeyCode()==9){ e.setKeyCode(9); return; } if(e.getKeyCode()==38){ T = T - 5; setLocation(E,T); } if(e.getKeyCode()==40) { T = T + 5; setLocation(E,T); } if(e.getKeyCode()==37) { E = E - 5; setLocation(E,T); } if(e.getKeyCode()==39) { E = E + 5; setLocation(E,T); } } if (e.getSource()==T3){ if(e.getKeyCode()==10 || e.getKeyCode()==9) { e.setKeyCode(9); return; } if(e.getKeyCode()==8) return; if(e.getKeyCode()105) { e.setKeyCode(e.VK_ESCAPE); return; } }

104

Escola Tcnica de Braslia

Curso de Java I

} public void keyReleased(KeyEvent e){ // uma tecla foi solta } public void keyTyped(KeyEvent e){ // uma tecla Unicode foi pressionada } // mtodo relativo a TextListener public void textValueChanged(TextEvent e){// o contedo do campo texto foi alterado int n1,n2; try{ n1 = Integer.parseInt(T1.getText()); n2 = Integer.parseInt(T3.getText()); T2.setText(""+n1*n2); } catch(NumberFormatException erro){ T2.setText("0"); return; } } public void focusGained(FocusEvent e) { // o objeto recebeu o foco L1.setText("O objeto T3 recebeu o foco"); } public void focusLost(FocusEvent e) { // o objeto perdeu o foco L1.setText("O objeto T3 perdeu o foco"); } public static void mostraMensagem(String men){ JOptionPane.showMessageDialog(null,men,"Mensagem",JOptionPane.INFORMATIO N_MESSAGE); } }

105

Escola Tcnica de Braslia CLASSES ADAPTADORAS

Curso de Java I

Uma classe Java que implementa uma interface deve incluir todos os seus mtodos, mesmo que no pretenda fazer nada em resposta a alguns deles. Esse requisito poder tornar necessrio o acrscimo de vrios mtodos vazios quando estivermos trabalhando com uma interface de tratamento de eventos como a windowListener, que possui sete mtodos. Como convenincia, a Java oferece adaptadores, classes Java que contm implementaes do nothing vazias de interfaces especficas. Fazendo a subclassificao de uma classe de adaptador, podemos implementar somente os mtodos de tratamento de eventos necessrios, redefinindo esses mtodos. O restante herdar os mtodos do-nothing. O pacote java.awt.event inclui FocusAdapter, KeyAdapter, MouseAdapter, MouseMotionAdapter e WindowAdapter. Eles correspondem aos ouvintes esperados para eventos de foco, teclado, mouse, movimento do mouse e janela. Exemplo 5: KeyAdapter. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Tecla extends JFrame { JLabel keyLabel = new JLabel("Pressione uma tecla"); public Tecla() { super("Digite uma tecla"); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout(FlowLayout.CENTER)); Teclado tec = new Teclado(this); setFocusable(true); addKeyListener(tec); add(keyLabel); setVisible(true); } public static void main(String[] arguments) { new Tecla(); } } class Teclado extends KeyAdapter { Tecla tecla; Teclado(Tecla tecla) { this.tecla = tecla; } public void keyTyped(KeyEvent event) { tecla.keyLabel.setText("" + event.getKeyChar()); tecla.repaint(); } }

106

Escola Tcnica de Braslia Extra : WindowAdapter

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; class Exemplo0901 extends JFrame { Exemplo0901() { setTitle("Minha primeira Janela em Java"); setSize(400,50); setLocation(150,150); setResizable(false); getContentPane().setBackground(Color.gray); String x = getTitle(); } public static void main(String args[]){ JFrame janela=new Exemplo0901(); janela.show(); //para fechar a janela: WindowListener J = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; Janela.addWindowListener(J); } }

107

Escola Tcnica de Braslia

Curso de Java I

Parte 4 - Banco de Dados com Java

108

Escola Tcnica de Braslia Manipulao de Banco de Dados com Java - JDBC

Curso de Java I

Java Database Connectivity uma biblioteca de classes que conecta programas Java a banco de dados relacionais. Uma classe chamada driver age como uma ponte para a origem do banco de dados. H drivers para cada um dos bancos de dados. JDBC aceita a auilizao da linguagem SQL (Structured Query Language). DRIVERS DE BANCO DE DADOS A independncia de plataforma e banco de dados s possvel por um gerenciador de drivers . JDBC tambm inclui um driver que se une ao ODBC (interface comum da Microsoft para acessar banco de dados). ODBC gerenciado em um sistema Windows pelo ODBC Data Source Administrador. O administrador acrescenta drivers ODBC, configura drivers para trabalharem com arquivos de banco de dados especficos e registra o uso da SQL. ODBC

JDBC-ODBC A ponte JDBC-ODBC permite que drivers JDBC sejam usados como drivers ODBC, convertendo chamadas de mtodo JDBC em chamada de funes ODBC. O uso da ponte JDBC-ODBC tem trs requisitos: O driver de ponte JDBC-ODBC sun.jdbc.odbc.JdbcOdbcDriver, que j vem includo na JVM Um driver ODBC Uma fonte de dados ODBC que esteja associada ao driver usando um software como ODBC Data Source Administrador Todas as fontes de dados ODBC precisam receber nomes descritivos. O nome ser usado dentro dos programas Java quando uma conexo for feita com o banco de dados ao qual a fonte se refere. Depois de tivermos um arquivo nome.mdb devemos criar uma fonte de dados associada a ele. A primeira tarefa em um programa JDBC carregar o driver(ou drivers) que ser usado para a conexo com uma fonte de dados. Um driver carregado com o mtodo Class.forName (String). A mtodo Class.forName(String) faz parte do pacote java.lang . O mtodo forName(String) carrega a classe cujo nome dado pela string especificada. Uma classe ClassNotFoundException pode ser lanada por esse mtodo Todos os programas que usam uma fonte de dados ODBC utilizam sun.jdbc.odbc.JdbcOdbcDriver Exemplo: Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Depois que o driver tiver sido carregado poderemos estabelecer uma conexo com a fonte de dados usando a classe DriverManager no pacote java.sql .

109

Escola Tcnica de Braslia Curso de Java I getConnection(String, String, String) utilizado para configurar a conexo. Ele retorna uma referncia a um objeto Connection representando uma conexo de dados ativa Os trs argumentos desse mtodo so: Um nome identificando a fonte de dados e o tipo de conectividade de banco de dados usado para alcanla Um nome de usurio Uma senha Os dois ltimos argumentos so necessrios somente se a fonte de dados for protegida com um nome de usurio e senha. Se no, esses argumentos podem ser strings nulas() Exemplo: Connection conexao = DriverManger.getConnection(jdbc:odbc:Emp, Admin, 123); Banco de Dados: Emp Usurio: Admin Senha: 123 Quando tivermos uma conexo podermos reutiliz-la toda vez que quiser apanhar ou armazenar informaes da fonte de dados. O mtodo getConnection() e todos os outros chamados sobre uma fonte de dados lanaro erros SQLException se algo sair errado Outros drivers: No MySQL: Class.forName(com.mysql.jdbc.Driver); No Oracle: Class.forName(oracle.jdbc.driver.OracleDriver); No Microsoft SQL Server Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); No Sysbase: Class.forName(com.sysbase.jdbc2.jdbc.SybDriver); No Postgre: Class.forName(org.postgresql.Driver); No DB2/Neon: Class.forName(com.neon.jdbc.Driver); Uma instruo em Java representada pelo objeto Statement . Statement uma interface, de modo que no pode ser instanciada diretamente. Contudo, ela retornada pelo mtodo createStatement() de um objeto Connection. Statement consulta = ver.createStatement(); O objeto Statement retornado por esse mtodo um objeto que implementa a interface. Depois que tivermos um objeto Statement podemos us-lo para realizar uma consulta chamando o mtodo executeQuery(String). executeQuery(String) O argumento string dever ser uma consulta SQL Exemplo: ResultSet set = consulta.executeQuery(select * from aluno); Se a consulta SQL tiver sido escrita corretamente, o mtodo executeQuery() retornar um objeto ResultSet mantendo todos os registros obtidos da fonte de dados. executeUpdate() utilizado para atualizar dados Quando um ResultSet retornado de executeQuery(), ele posicionado no primeiro registro obtido. Mtodos de ResultSet(): getDate(String) Retorna o valor Date getDouble(String) Retorna o valor double getFloat(String) Retorna o valor float getInt(String) Retorna o valor int getLong(String) Retorna o valor long getString(String) Retorna a string 110

Escola Tcnica de Braslia Curso de Java I Tambm possvel usar um inteiro como argumento para qualquer um desses mtodos, como getString(5). O inteiro indica qual campo obter . Uma SQLException ser lanada se houver um erro de banco de dados. Poderemos usar os mtodos getSQLState() e getErrorCode() para descobrir mais sobre os possveis erros apresentados. next() mtodo do objeto ResultSet utilizado para seguir para o prximo registro Esse mtodo retorna um valor Booleano false quando tenta ultrapassar o final de um conjunto de resultados Normalmente, possvel passar uma vez por um conjunto de resultados do incio ao fim, depois disso, no mais possvel recuperar seu contedo. close() utilizado para fechar a conexo

111

Escola Tcnica de Braslia Exemplo 1.

Curso de Java I

Sada:

import java.sql.*; import javax.swing.*; public class CoalTotals { public static void main(String[] arguments) { String pais=JOptionPane.showInputDialog(null,"Digite um pas:"); String data = "jdbc:odbc:WorldEnergy"; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection conn = DriverManager.getConnection(data, "", ""); Statement st = conn.createStatement(); ResultSet rec = st.executeQuery( "SELECT * " + "FROM Coal " + "WHERE " + "(Country='" + pais + "') " + "ORDER BY Year"); System.out.println("SIGLA\tPAS\t\tANO\t" + "PRODUO"); while(rec.next()) { System.out.println(rec.getString(1) + "\t" + rec.getString(2) + "\t\t" + rec.getString(3) + "\t" + rec.getString(4)); } st.close(); } catch (SQLException s) { System.out.println("SQL Error: " + s.toString() + " " + s.getErrorCode() + " " + s.getSQLState()); } catch (Exception e) { System.out.println("Error: " + e.toString() + e.getMessage()); } } }

112

Escola Tcnica de Braslia

Curso de Java I

O pacote java.sql aceita a criao de uma instruo preparada(uma instruo compilada antes de ser executada). Isso permite que a instruo retorne dados mais rapidamente e uma opo melhor se estivermos executando uma instruo SQL repetidamente no mesmo programa. representada pela classe PreparedStatament o Obs.: O Access executa melhor as instrues preparadas o prepareStatement(String) utilizado para criar uma instruo preparada. Para indicar a estrutura, escreve-se a instruo SQL em que os parmetros foram substitudos por pontos de interrogao o Exemplo: PreparedStatement ps = cc.prepareStatement( select * from Coal where(contry=?) order by year); PreparedStatement ps = cc.prepareStatement(insert into bookdata values(?,?,?,?,?,?,?)); ? so marcadores de lugar para os dados. Antes que possamos executar deveremos inserir os dados com mtodos da classe PreparedStatement Para inserir dados em uma instruo preparada, precisamos chamar um mtodo com a posio do marcador seguida pelos dados a inserir Exemplo: o Sintaxe: setString(int,String); o setString(1, Swaziland); - coloca a string especificada na primeira posio Os seguintes mtodos esto disponveis: o setAsciiStream(int, InputStream, int) na posio indica pelo 1 argumento, insira o InputStream especificado, que representa um stream de caracteres ASCII. O 3 argumento indica quantos bytes do stream de entrada devem ser inseridos o setBinaryStream(int, InputStream,int) na posio indicada pelo 1 argumento, insira o InputStream especificado, que representa um stream de bytes. O 3 argumento indica o n de bytes a inserir a partir do stream o setCharacterStream(int, Reader, int) na posio indicada pelo 1 argumento, insira o Reader especificado, que representa um stream de caracteres. O 3 argumento indica o n de caracteres para inserir a partir do stream o setBoolean(int, boolean) Insira um valor boolean na posio indicada pelo inteiro o setByte(int,byte) o setBytes(int,bytes[]) uma array de bytes o setDate(int,Date) o setDouble(int, double) o setFloat(int, float) o setInt(int, int) o setLong(int,long) o setShort(int,short) o setString(int,Sring) o setNull(int,int) armazena um valor nulo O segundo argumento de setNull() dever ser uma varivel de classe a partir da classe Types em java.sql, para indicar que tipo de valor SQL pertence a essa posio Existem variveis de classe para cada um dos tipos de dados SQL. Exemplos: BIGINT, CHAR, DATE, DECIMAL, DOUBLE, FLOAT, INTEGER, SMALLINT, TINYINT E VARCHAR ps.setNull(5,Types.CHAR); o Coloca um valor CHAR nulo na quinta posio de uma instruo preparada chamada ps Mtodos adicionais de resultset: o afterLast() move para um lugar imediatamente aps o ltimo registro no conjunto o beforeFirst() move para um lugar imediatamente antes do primeiro registro no conjunto o first() move para o primeiro registro do conjunto o last() move para o ltimo registro do conjunto o previous() move para o registro anterior no conjunto 113

Escola Tcnica de Braslia Curso de Java I Essas aes so possveis quando as polticas de resultados foram especificadas como argumentos para os mtodos createStatement e prepareStatement . Normalmente, createStatement() no usa argumentos, como neste exemplo: Connection payday = DriverManager.getConnection( jdbc:odbc:Payroll, Doc, Irover1); Statement looksee = payday.CreateStatement(); Para resultados mais flexveis podemos usar: Statement looksee = payday.CreateStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT); Os mesmos trs argumentos podem ser usados no mtodo preparedStatement(String, int, int, int) aps o texto da instruo A classe ResultSet inclui outras variveis de classe que oferem mais opes sobre como os conjuntos podem ser lidos e modificados JDBC Drivers A primeira etapa e adquirir e instalar um driver JDBC Uma lista de drivers JDBC disponveis pode ser encontrada no site JDBC da sun em http://java.sun.com/products/jdbc/jdbc.drives.html As etapas para configurar uma fonte de dados para JDBC Criar o banco de dados Associar o banco de dados a um driver JDBC Estabelecer uma fonte de dados, o que pode incluir a seleo de um formato de banco de dados, servidor de banco de dados, nome de usurio e senha

114

Escola Tcnica de Braslia Exemplo 2.

Curso de Java I

import java.sql.*; class Exemplo1302{ public static void main(String args[]){ String url="jdbc:odbc:MeuBanco"; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection minhaConexao = DriverManager.getConnection(url); Statement meuState = minhaConexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.C ONCUR_READ_ONLY); //Statement possibilita a utilizao de um comando SQL //TYPE_SCROLL_SENSITIVE - navegao nos dois sentidos. Alteraes podem ser efetivadas //CONCUR_READ_ONLY - somente leitura ResultSet rs = meuState.executeQuery("select ficodigo, finome from Filmes"); //Resultado do comando SQL armazenado e manipulado por meio de um objeto do tipo ResultSet // System.out.println("Codigo Ttulo"); System.out.println("-----------------------------------------------------------------"); while(rs.next())//enquanto existirem registros { String codigo = rs.getString("FICODIGO");//A String codigo recebe o contedo armazenado no campo Codigo pelo mtodo getString String titulo = rs.getString("FINOME"); System.out.println(codigo+" "+titulo); } minhaConexao.close(); } catch(ClassNotFoundException erro){ System.out.println("Driver JDBC-ODBC no encontrado!");} catch(SQLException erro){ System.out.println("Problemas na conexo com o banco de dados"); } } }

115

Escola Tcnica de Braslia Exemplo 3.

Curso de Java I

import java.sql.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; class ConsultaSQL extends JFrame implements ActionListener{ JLabel label1, label2; JTextField t1, t2; JButton b1; ResultSet rs; Statement meuState; public static void main (String args[]){ JFrame janela = new ConsultaSQL(); janela.setUndecorated(true); janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setVisible(true); } ConsultaSQL(){ setTitle("Aprendendo consultas com SQL"); setSize(600,170); setResizable(false); getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT)); label1 = new JLabel("Digite o comando SQL:"); label2 = new JLabel("Resultado do comando:"); t1 = new JTextField(50); t1.addActionListener(this); t2 = new JTextField(50); b1=new JButton("Limpa tela"); b1.addActionListener(this); getContentPane().add(label1); getContentPane().add(t1); getContentPane().add(label2); getContentPane().add(t2); getContentPane().add(b1); String url = "jdbc:odbc:MeuBanco1"; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection MinhaConexao DriverManager.getConnection(url); meuState = MinhaConexao.createStatement(); }

=

116

Escola Tcnica de Braslia Curso de Java I catch(ClassNotFoundException erro){ System.out.println("Driver JDBC-ODBC no encontrado!"); } catch(SQLException ex){ System.out.println("Problemas na conexo com a fonte de dados"); } } public void actionPerformed(ActionEvent e){ if(e.getSource()==b1){ t1.setText("");t2.setText(""); for (int i=0;i