Você está na página 1de 130

Escola Tcnica de Braslia

Curso de Java I

APOSTILA DE JAVA I

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

Escola Tcnica de Braslia

Curso de Java I

PARTE 1 - SWING

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 {

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

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<400;i++){ j.setBounds(40-(i/2),50-(i/2),i,i); } } }

Escola Tcnica de Braslia Curso de Java I Cada frame possui botes de maximizar, minimizar e fechar na barra de ttulos, para o controle do usurio. Em Java, o comportamento normal quando um frame fechado que a aplicao continue em execuo. Para mudar isso, voc precisa chamar o mtodo setDefaultCloseOperation( ) com uma das quatro variveis estticas da classe JFrame como argumento: EXIT_ON_CLOSE Sai do programa quando o frame fechado. DISPOSE_ON_CLOSE Fecha o frame, descarta o objeto de frame e continua executando a aplicao. DO_NOTHING_ON_CLOSE Mantm o frame aberto e continua executando. HIDE_ON_CLOSE Fecha o frame e continua executando.

Escola Tcnica de Braslia Exemplo 2: JFrame.

Curso de Java I

import javax.swing.JFrame; public class Janela3 extends JFrame{ public Janela3 ( ){ super("Ttulo da Janela"); setSize(300,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main (String [] arguments){ Janela3 janela = new Janela3( ); } } Obs.: Se no tivssemos exibo o frame quando este foi criado, poderamos chamar fs.setVisible(true) no mtodo main para exibir o frame. Exerccio 2: 1) Como se faz herana em Java? 2) O que um mtodo construtor? 3) Qual a vantagem de se utilizar um mtodo construtor?

Escola Tcnica de Braslia

Curso de Java I

JButton - JPanel
Para criar um componente de interface em Java, crie um objeto da classe do componente. Um boto Swing pode conter um rtulo de texto, um cone grfico ou uma combinao de ambos. Os mtodos construtores que voc pode usar para os botes incluem o seguinte: JButton(Texto) Um boto rotulado com o texto especificado. JButton(Icon) Um boto que apresenta o cone especificado. JButton(Texto, Icon) Um boto com o texto e o cone especificados. Exemplo: JButton ok = new JButton(ok); Antes que possamos exibir um componente da interface com o usurio, como um boto em um programa precisamos acrescent-lo a um continer e exibir esse continer. Para acrescentar um componente a um continer simples, chamamos o mtodo add(Componente) do continer com o componente como argumento (todos os componentes da interface com o usurio Swing herdam de java.awt.Component). O continer Swing mais simples o painel (a classe JPanel). O exemplo a seguir cria um boto e o acrescenta a um painel: JButton sair = new JButton(Sair); JPanel painel = new JPanel( ); painel.add(Sair);

Escola Tcnica de Braslia Exemplo 3: JButton, JPanel

Curso de Java I

import javax.swing.*; public class Botoes extends JFrame { JButton salvar = new JButton ("Salvar"); JButton cancelar = new JButton ("cancelar"); JButton limpar = new JButton ("Limpar"); public Botoes(){ super("Janela com Botes"); setSize(300,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel painel = new JPanel(); painel.add(salvar); painel.add(cancelar); painel.add(limpar); add(painel); // torna o painel de contedo do frame setVisible(true); } public static void main (String [] arguments){ Botoes b = new Botoes(); } } Exerccio 3: 1) Acrescente mais trs botes na interface acima. 2) O que um objeto de classe e um objeto de mtodo?

10

Escola Tcnica de Braslia

Curso de Java I

JComponent
Todos os componentes Swing compartilham uma superclasse comum, javax.swing.JComponent, da qual herdam vrios mtodos teis aos programas. setEnable(boolean) determina se um componente pode receber entrada do usurio. Os componentes esto ativados por padro e precisam estar ativados para que recebam a entrada do usurio. Muitos componentes desativados mudam de aparncia para indicar que no podem ser usados atualmente por exemplo, um JButton desativado possui bordas cinza claro e texto cinza. isEnable( ) utilizado para verificarmos se um componente est ativo, retorna um valor boolean. isVisible( ) - utilizado para verificarmos se um componente est visvel, retorna um valor boolean. getSize( ) - retorna um objeto Dimension com as dimenses nas variveis de instncia height e width.

ImageIcon
O Swing oferece suporte ao uso de objetos grficos ImageIcon em botes e outros componentes em que pode ser fornecido um rtulo. Um cone um pequeno grfico que pode ser posicionado no boto, rtulo ou outro elemento da interface com o usurio para identific-lo. Um objeto ImageIcon pode ser criado especificando o nome de arquivo de um grfico como o nico argumento para o construtor. Exemplo: ImageIcon iconenovo = new ImageIcon (novo.gif); JButton boto = new JButton (iconenovo); JPanel painel = new JPanel( ); painel.add(boto); add(painel); setVisible(true);

11

Escola Tcnica de Braslia Exemplo 4: ImageIcon.

Curso de Java I

import javax.swing.*; public class Icones extends JFrame{ JButton salvar, salvarcomo, salvarcopia, localizar; public Icones( ){ super("Boto com cone"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel painel = new JPanel(); // cria os cones ImageIcon iconesalvar = new ImageIcon("c:/cones/save.png"); ImageIcon iconesalvarcomo = new ImageIcon("c:/cones/save as.png"); ImageIcon iconesalvarcopia = new ImageIcon("c:\\cones\\save copy.png"); ImageIcon iconelocalizar = new ImageIcon("c:\\cones\\search 2.png"); // cria os botes salvar = new JButton ("Salvar", iconesalvar); salvarcomo = new JButton ("Salvar Como", iconesalvarcomo); salvarcopia = new JButton ("Salvar Como Cpia", iconesalvarcopia); localizar = new JButton ("Localizar", iconelocalizar); // acrescenta botes ao painel painel.add(salvar); painel.add(salvarcomo); painel.add(salvarcopia); painel.add(localizar); //acrescenta o painel a um frame add(painel); pack(); setVisible(true); } public static void main(String[] arguments){ Icones ico = new Icones(); } } Obs.: Se estiver procurando cones para experimentar nas aplicaes Swing, poder encontr-los no seguinte endereo: http://developer.java.sun/developer/techDocs/hi/repository Exerccio 4: 1) Modifique o mtodo construtor dos botes para que o mesmo apresente somente os cones.

12

Escola Tcnica de Braslia

Curso de Java I

JLabel
Um rtulo um componente do usurio que contm texto informativo, um cone ou ambos. Os rtulos criados a partir da classe JLabel, normalmente so usados para identificar a finalidade de outros componentes de uma interface. Eles no podem ser editados diretamente por um usurio. Construtores: JLabel(Texto) Um rtulo com o texto especificado. JLabel(Texto, int) Um rtulo com texto e alinhamento especificados. JLabel(Texto, Icon, int) Um rtulo com o texto, cone e alinhamento especificados. O alinhamento de um rtulo determina como seu texto ou cone alinhado em relao rea tomada pela janela. Trs variveis de classe estticas da interface SwingConstants so usadas para especificar o alinhamento: LEFT, CENTER e RIGHT. O contedo de um rtulo pode ser definido com os mtodos setText(Texto) ou setIcon(cone). Podemos tambm utilizar os mtodos getText( ) e getIcon( ). Exemplos: JLabel nome = new JLabel (Nome, SwingConstants.LEFT); JLabel sexo = new JLabel (Sexo, SwingConstants.CENTER); JLabel cpf = new JLabel (CPF, SwingConstants.RIGHT);

JTextField
Um campo de texto um local em uma interface em que um usurio pode entrar e modificar texto usando o teclado. Os campos de texto so representados pela classe JTextField e podem tratar de uma linha de entrada. Construtores: JTextField( ) Um campo de texto vazio. JTextField(int) Um campo de texto com largura especificada. JTextField(Texto, int) Um campo de texto com texto e a largura especificados. O atributo de largura de um campo de texto s tem relevncia se a interface for organizada de uma maneira que no redimensione componentes. Exemplos: JTextField url = new JTextField(60); JTextField url2 = new JTextField(Entre com sua url aqui, 60); Os campos de texto e as reas de texto herdam da superclasse JTextComponent e compartilham muitos mtodos comuns. setEditable(boolean) - determina se um componente de texto pode ser editado. isEditable( ) verifica se um componente est habilitado, retorna um valor boolean correspondente. setText(Texto) - muda o texto para a string especificada getText( ) - retorna o texto atual do componente como uma string getSelectedText( ) - pega apenas o texto que um usurio destacou no componente. Campos de senha so campos de texto que escondem os caracteres que um usurio est digitando no campo. Eles so representados pela classe JPasswordField, uma subclasse de JTextField. Podemos utilizar o mtodo setEchoChar(Caractere) para ocultar a entrada, substituindo cada caractere pelo caractere especificado. Exemplo: JPasswordField senha = new JPasswordField(20); senha.setEchoChar(#);

13

Escola Tcnica de Braslia

Curso de Java I

JTextArea
As rea de texto, os campos de texto editveis que podem lidar com mais de uma linha de sada, so implementadas com a classe JTextArea. JTextArea inclui os seguintes mtodos construtores: JTextArea(int,int) Uma rea de texto com o nmero de linhas e colunas especificado. JTextArea(Texto, int, int) Uma rea de texto com o texto, linhas e colunas especificados. Podemos usar os mtodos getText( ), getSelectedText( ) e setText(Texto). Temos, ainda, os mtodos: append(Texto) acrescenta o texto especificado no final do texto atual. insert(Texto, int) insere o texto especificado na posio indicada. setLineWrap(boolean) determina se o texto quebrar para a linha seguinte quando atingir a margem do componente. Chame setLineWrap(true) para que ocorra a quebra de linha. setWrapStyleWord(boolean) determina o que ser quebrado para a linha seguinte ou a palavra atual (um argumento true) ou o caractere atual(false).

14

Escola Tcnica de Braslia Exemplo 5: JLabel, JTextField, JTextArea.

Curso de Java I

import javax.swing.*; public class Logon extends JFrame{ JTextField usuario = new JTextField(15); JPasswordField senha = new JPasswordField(15); JTextArea comentarios = new JTextArea(4,15); JButton ok = new JButton("OK"); JButton cancelar = new JButton("Cancelar"); public Logon(){ super("Logon"); setSize(200,280); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel painel = new JPanel(); JLabel usuariorotulo = new JLabel("Usurio"); JLabel senharotulo = new JLabel("Senha"); JLabel comentariosrotulo = new JLabel("Comentrios"); comentarios.setLineWrap(true);// quebra de linha comentarios.setWrapStyleWord(true); // quebra na palavra painel.add(usuariorotulo); painel.add(usuario); painel.add(senharotulo); painel.add(senha); painel.add(comentariosrotulo); painel.add(comentarios); painel.add(ok); painel.add(cancelar); add(painel); setVisible(true); } public static void main (String args[]){ Logon log = new Logon( ); } }

15

Escola Tcnica de Braslia

Curso de Java I

JScrollPane
O Swing oferece suporte a barras de rolagem por meio de um novo continer que pode ser usado para conter qualquer componente rolvel: JScrollPane. Um painel rolvel associado a um componente no mtodo construtor do painel. Podemos usar um dos seguintes construtores: JScrollPane(Componente) Um painel rolvel que contm o componente especificado. JScrollPane(Componente, int, int) Um painel rolvel com o componente especificado, configurao da barra de rolagem vertical e configurao da barra de rolagem horizontal. As barras de rolagem so configuradas por meio de variveis de classe estticas da interface ScrollPaneConstants. possvel usar cada uma das seguintes barras de rolagem verticais: VERTICAL_SCROLLBAR_ALWAYS VERTICAL_SCROLLBAR_AS_NEEDED VERTICAL_SCROLLBAR_NEVER H tambm trs variveis com nomes semelhantes para as barras de rolagem horizontais. Depois de criar um painel rolvel contento um componente, o painel dever ser acrescentado aos contineres no local desse componente. Exemplo: cria uma rea de texto com uma barra de rolagem vertical e nenhuma barra de rolagem horizontal e depois acrescenta a um painel de contedo. JPanel painel = new Panel( ); JTextArea texto = new JTextArea(5,15); JScrollPane rolagem = new JScrollPane(texto, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); painel.add(rolagem); setContentPane(painel);

16

Escola Tcnica de Braslia Exemplo 6: JScrollPane.

Curso de Java I

import javax.swing.*; import javax.swing.*; public class Logon2 extends javax.swing.JFrame { JTextField usuario = new JTextField(15); JPasswordField senha = new JPasswordField(15); JTextArea comentarios = new JTextArea(4, 15); JButton ok = new JButton("OK"); JButton cancelar = new JButton("Cancel"); public Logon2() { super("Logon"); setSize(200, 280); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel painel = new JPanel(); JLabel rotulousuario = new JLabel("Usurio: "); JLabel rotulosenha = new JLabel("Senha: "); JLabel rotulocomentarios = new JLabel("Comentrios: "); comentarios.setLineWrap(true); comentarios.setWrapStyleWord(true); JScrollPane rolagem = new JScrollPane(comentarios, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); painel.add(rotulousuario); painel.add(usuario); painel.add(rotulosenha); painel.add(senha); painel.add(rotulocomentarios); painel.add(rolagem); painel.add(ok); painel.add(cancelar); add(painel); setVisible(true); } public static void main(String[] arguments) { Logon2 log2 = new Logon2(); } }

17

Escola Tcnica de Braslia

Curso de Java I

JCheckBox - JRadioButton
So componentes que possuem apenas dois valores possveis: selecionado ou no-selecionado. As caixas de seleo normalmente so usadas para fazer escolhas simples em um programa, do tipo sim/no ou ligado/desligado. Os botes de opo so agrupados juntos para que apenas um boto seja selecionado por vez. As caixas de seleo( a classe JCheckBox) aparecem como caixas rotuladas ou no-rotuladas, que contm uma marca de seleo quando so selecionadas e nada, em caso contrrio. As classes JCheckBox e JRadioButton possuem vrios mtodos teis, herdados de sua superclasse comum: setSelect(boolean) Seleciona o componente se o argumento for true e remove a seleo se for false. isSelected( ) Retorna um boolean indicando se o componente est atualmente selecionado. Os seguintes construtores esto disponveis para a classe JCheckBox: JCheckBox(Texto) Uma caixa de seleo com o rtulo de texto especificado. JCheckBox(Texto, boolean) Uma caixa de seleo com o rtulo de texto especificado, que selecionado se o segundo argumento for true. JCheckBox(Icon) Uma caixa de seleo com o rtulo de cone especificado. JCheckBox(Icon, boolean) Uma caixa de seleo com o rtulo de cone especificado, que est selecionado se o segundo argumento for true. JCheckBox(Texto,cone) Uma caixa de seleo com o rtulo de texto e rtulo de cone especificados. JCheckBox(Texto, cone, boolean) Uma caixa de seleo com o rtulo de texto e o rtulo de cone especificados, selecionada se o terceiro argumento for true. A classe JRadionButton possui construtores com os mesmos argumentos e funcionalidade. As caixas de seleo e os botes de opo, por si ss, so no exclusivos. Para torn-los exclusivos, como os botes de opo deveriam ser, precisamos organizar os componentes relacionados em grupos. Para tanto podemos criar um objeto da classe ButtonGroup. Exemplo: ButtonGroup ch = new ButtonGroup( ); Chame o mtodo add(Componente) do grupo para acrescentar o componente especificado ao grupo. Exemplo: ButtonGroup grupo = new ButtonGroup( ); JRadioButton s1 = new JRadion("F",true); grupo.add(s1); JRadioButton s2 = new JRadioButon("M", false); grupo.add(s2); O objeto grupo usado para agrupar os botes de opo s1 e s2. O objeto s1, rotulado F, est selecionado. Somente um membro do grupo pode ser relacionado de cada vez se o componente est selecionado, o objeto ButtonGroup garante que todos os outros do grupo no estejam.

18

Escola Tcnica de Braslia Exemplo 7: JRadioButton, ButtonGroup.

Curso de Java I

import javax.swing.*; public class Grupo extends JFrame { JRadioButton[] rb = new JRadioButton[4]; public Grupo() { super("Pesquisa"); setSize(200, 180); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); rb[0] = new JRadioButton("poca"); rb[1] = new JRadioButton("Veja"); rb[2] = new JRadioButton("Super Interessante"); rb[3] = new JRadioButton("Casa e Jardim", true); JPanel painel = new JPanel(); JLabel escolha = new JLabel("Escolha sua preverida."); painel.add(escolha); ButtonGroup grupo = new ButtonGroup(); for (int i = 0; i < rb.length; i++) { grupo.add(rb[i]); painel.add(rb[i]); } add(painel); setVisible(true); } public static void main(String[] arguments) { Grupo g = new Grupo(); } }

revista

19

Escola Tcnica de Braslia

Curso de Java I

JComboBox
A classe JComboBox do Swing pode ser usada para criar caixas de combinao, componentes que apresentam um menu drop-dwon a partir do qual um nico valor pode ser selecionado. Ocultando-se o menu quando o componente no est sendo usado. Caixa de combinao: 1. O construtor JComboBox( ) usado sem argumentos. 2. O mtodo addItem(Object) da caixa de combinao acrescenta itens lista. Em uma caixa de combinao, os usurios podero selecionar somente um dos itens do menu drop-down. Se o mtodo setEditable( ) do componente for chamado com true como argumento, ele tambm oferecer suporte entrada de texto. Mtodos: getItemAt(int) Retorna o texto do item de lista na posio de ndice especificada pelo argumento inteiro. Assim com os arrays, o primeiro item de uma lista de escolha est na posio de ndice 0. getItemCount( ) Retorna o nmero de itens na lista. getSelectedIndex( ) Retorna a posio de ndice do item atualmente selecionado na lista. getSelectedItem( ) Retorna o texto do item atualmente selecionado. setSelectedIndex(int) Seleciona o item na posio de ndice indicada. setSelectedIndex(Object) Seleciona o objeto especificado na lista.

20

Escola Tcnica de Braslia Exemplo 8: JComboBox.

Curso de Java I

import javax.swing.*; public class Combinacao extends JFrame { String[] opcoes = { "poca", "Veja", "Casa e Jardim" }; JComboBox selecao = new JComboBox();

"Super

Interessante",

public Combinacao() { super("Pesquisa"); setSize(220, 150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel painel = new JPanel(); JLabel escolha = new JLabel("Escolha sua revista:"); painel.add(escolha); for (int i = 0; i < opcoes.length; i++) selecao.addItem(opcoes[i]); painel.add(selecao); add(painel); setVisible(true); } public static void main(String[] arguments) { Combinacao c = new Combinacao(); } }

21

Escola Tcnica de Braslia

Curso de Java I

JList
Utilizamos a classe JList, para permitir que um ou mais valores sejam selecionados em uma lista. As listas podem ser criadas e preenchidas com o contedo de um array ou de um vetor. Podemos utilizar os seguintes construtores: JList( ) Cria uma lista vazia JList(Object[]) Cria uma lista que contm um array da classe especificada (como String) JList(Vetor) Cria uma lista que contm o objeto java.util.Vector especificado. Mtodos: setListData( ) utilizado para preencher a lista. As listas exibem mais de uma de suas linhas quando so apresentadas em uma interface com o usurio. O padro exibir oito itens. Para alterar isso, chame setVisibleRowCount(int) com o nmero de itens a serem exibidos. getSelectValues( ) retorna um array de objetos que contm todos os itens selecionados na lista.

22

Escola Tcnica de Braslia Exemplo 9: JList.

Curso de Java I

import javax.swing.*; public class Lista extends JFrame { String[] livros = { "A Mo e a Luva", "A Semana", "Balas de Estalo", "Bons Dias", "Casa Velha", "Contos","Contos Fluminenses", "Crislidas", "Dom Casmurro", "Esa e Jac" }; JList lista = new JList(livros); public Lista( ) { super("Livros"); setSize(150, 300); JPanel painel = new JPanel(); JLabel escolha = new JLabel("Selecione seu(s) livros:"); painel.add(escolha); lista.setVisibleRowCount(8); JScrollPane rolagem = new JScrollPane(lista); painel.add(rolagem); add(painel); setVisible(true); } public static void main(String[] arguments) { Lista list = new Lista(); } }

23

Escola Tcnica de Braslia

Curso de Java I

UIManager
O gerenciamento do estilo tratado pelo UIManager, uma classe controladora da interface com o usurio do pacote javax.swing. As escolhas para o estilo variam, dependendo do ambiente de desenvolvimento Java usado. Os seguintes estilos esto disponveis com a Java 2 em uma plataforma Windows: Estilo Windows, Estilo Windows Classic, Sistema Motif x Windows, Plataforma Java Swing, conhecida como Metal. A classe UIManager possui um mtodo setLookAndFeel(LookAndFeel), que usado para escolher o estilo de um programa. Para obter um objeto LookAndFeel que voc possa usar com setLookAndFeel( ), use um dos seguintes mtodos: getCrossPlatformLookAndFeelClassName( ) esse mtodo retorna um objeto LookAndFeel representando o estilo Metal de plataforma cruzada da Java. getSystemLookAndFeelClassName( ) Esse mtodo retorna um objeto LookAndFeel representando o estilo do sistema corrente. O mtodo setLookAndFeel( ) lana uma exceo UnsupportedLookAndFeelException se no puder definir o estilo. Depois de chamar esse mtodo necessrio atualizar a interface com a nova aparncia chame o mtodo updateComponentTreeUI(Componente) da classe SwingUtilities com o componente da interface principal. Sob a maior parte das circunstncias, devemos chamar setLookAndFeel( ) apenas depois que cada componente tiver sido acrescentado sua interface grfica com o usurio (em outras palavras, imediatamente antes de tornar a interface visvel). As instrues a seguir montam um componente para empregar o estilo Java: try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName( )); SwingUtilities.updateComponenteTreeUI(this); } catch (Exception e) { System.out.println(Cant set look and feel: +e.getMessage( )) e.printStackTrace( ); } A palavra-chave this refere-se classe que contm essas instrues. Se voc a usar no final do mtodo construtor de um JFrame, cada componente desse frame seria exibido com o estilo Java. Linha de cdigo para visualizao dos estilos: UIManger.LookAndFeelInfo[] laf = UIManager.getInstalledLookAndFeel( ); for (int i = 0; i < laf.length;i++) { System.out.println(Class name:+laf[i].getClassName( )); System.out.printl (Name:=laf[i].getName( )+\n); } Em um ambiente Windows, essas instrues produzem a seguinte sada: Name: Metal Class name: javax.swing.plaf.metal.MetalLookAndFell Name: CDE:Motif Class name: javax.swing.plaf.motif.MotiflLookAndFell Name: Windows Class name: javax.swing.plaf.windows.WindowsLookAndFell Name: Windows Classic Class name: javax.swing.plaf.windows.WindowsClassicLookAndFell

24

Escola Tcnica de Braslia

Curso de Java I

JOptionPane
A classe JOptionPane oferece vrios mtodos que podem ser usados para criar caixas de dilogos padro. As quatro caixas de dilogo padro so os seguintes: ConfirmDialog Faz uma pergunta, com botes para respostas Yes/No/Cancel. InputDialog Pedidos de entrado de texto. MessageDialog Apresenta uma mensagem. OptionDialog Compreende todos os trs outros tipos de caixa de dilogo. Se configurarmos um estilo para usar com qualquer uma dessas caixas, deveremos estabelecer antes que a mesma seja aberta. CAIXAS DE DILOGO DE CONFIRMAO Podemos utilizar o mtodo showConfirmDialog(Componente, Objeto). O argumento Componente especifica o continer que deve ser considerado o pai da caixa de dilogo, e essa informao usada para determinar onde a janela de dilogo dever ser exibida na tela. Se null for usado no lugar de um continer, ou se o continer no for um objeto JFrame, a caixa de dilogo ser centralizada na tela. O segundo argumento, Object, pode ser uma string, um componente ou um objeto Icon. Se for uma string, esse texto ser exibido na caixa de dilogo. Se for um componente ou um Icon, esse objeto ser exibido no lugar de uma mensagem de texto. Esse mtodo retorna um de trs valores inteiros possveis, cada um sendo uma constante de classe de JOptionPane: YES_OPTION, NO_OPTION e CANCEL_OPTION. Exemplo: int resposta; resposta = JOptionPane.showConfirmDialog(null, Voc quer apagar todos os seus arquivos?); Podemos utilizar showConfirmDialog(Componente, Objeto, String, int, int). Os trs ltimos argumentos so os seguintes: Uma string que ser exibida na barra de ttulo da caixa de dilogo. Um inteiro que indica quais botes de opo sero mostrados, ele dever ser igual a uma das constantes de classe: YES_NO_CANCEL_OPTION ou YES_NO_OPTION. Um inteiro que descreve o tipo de caixa de dilogo em que se encontra, usando as constantes de classe, ERROR_MESSAGE, INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE, ou WARNING_MESSAGE. Serve para determinar que cone deve ser desenhado na caixa de dilogo, junto com a mensagem. Por exemplo: int resposta = JOptionPane.showConfirmDialog(null, Erro ao ler o arquivo, gostaria de tentar novamente?, Erro de leitura, JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE); CAIXAS DE DILOGO DE ENTRADA Uma caixa de dilogo de entrada faz uma pergunta e usa um campo de texto para armazenar a resposta. O modo mais fcil de criar uma caixa de dilogo de entrada com uma chamada ao mtodo showInputDialog(Componente, Objeto). Os argumentos so o componente pai e a string, o componente ou o cone a exibir a caixa. A chamada de mtodo da caixa de dilogo de entrada retorna uma string que representa a resposta do usurio. Exemplo: String resposta = JOptionPane.showInputDialog(null, Entre com o seu nome:);

25

Escola Tcnica de Braslia Curso de Java I Podemos criar uma caixa de dilogo de entrada com o mtodo showInputDialog (Componente, Objeto, String, int). Os dois ltimos argumentos so: O ttulo a exibir na barra de ttulo da caixa de dilogo. Uma das cinco constantes de classe descrevendo o tipo de caixa de dilogo: ERROR_MESSAGE, INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE, ou WARNING_MESSAGE. Exemplo: String resposta = JOptionPane.showInputDialog(null, Qual o seu CEP?, Entre com o CEP, JOptionPane.QUESTION_MESSAGE); CAIXAS DE DILOGO DE MENSAGEM uma janela simples, que mostra informaes para tanto invocamos o mtodo showMessageDialog (Componente, Objeto). Exemplo: JOptionPane.showMessageDialog(null, O programa foi desinstalado); Podemos utilizar tambm o mtodo showMessageDialog (Componente, Objeto, String, int). Exemplo: JOptionPane.showMessageDialog(null, Um asteride ir destruir a Terra., Alerta de destruio, JOptionPane.WARNING_MESSAGE); CAIXAS DE DILOGO DE OPO a mais completa, pode ser criada atravs do mtodo showOptionDialog(Componente, Objeto, String, int, int, Icon, Object[], Object). Os argumentos desse mtodo so os seguintes: O componente pai da caixa de dilogo. O texto, cone ou componente a exibir. Uma string para exibir na barra de ttulos. O tipo de caixa, usando as constantes de classe YES_NO_OPTION ou YES_NO_CANCEL_OPTION, ou a literal 0 se outros botes forem usados em vez disso. O cone a exibir, usando as constantes de classe ERROR_MESSAGE, INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE ou WARNING_MESSAGE, ou a literal 0, se nenhum desses tiver de ser usado. Um objeto Icon para exibir no lugar de um dos cones no argumento anterior. Um array de objetos mantendo os componentes ou outros objetos que representam as opes na caixa de dilogo, se YES_NO_OPTION e YES_NO_CANCEL_OPTION no estiverem sendo usados. O objeto representando a seleo padro, se as opes YES_NO_OPTION e YES_NO_CANCEL no estiverem sendo usadas. Os dois ltimos argumentos permitem criar uma grande variedade de opes para caixa de dilogo. Podemos criar um array de strings que mantenha o texto de cada boto para exibir na caixa de dilogo. Exemplo: String[] sexo = {Masculino, Feminino}; int resposta = JOptionPane.showOptionDialog(null, Qual o seu sexo?, Sexo?, 0, JOptionPane.INFORMATION_MESSAGE, null, sexo, sexo[1]);

26

Escola Tcnica de Braslia Exemplo 10: JOptionPane, UIManager.

Curso de Java I

import java.awt.GridLayout; import java.awt.event.*; import javax.swing.*; public class Caixas extends JFrame { private JLabel rotulonome SwingConstants.RIGHT); private JTextField nome; private JLabel rotulorevista SwingConstants.RIGHT); private JTextField revista; private JLabel rotuloavaliacao SwingConstants.RIGHT); private JTextField avaliacao;

new

JLabel("Nome:

",

new

JLabel("Revista:

",

new

JLabel("Avaliao:

",

public Caixas() { super("Pesquisa"); setSize(280, 105); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLookAndFeel(); String resp1 = JOptionPane.showInputDialog(null,"Digite seu nome:"); nome = new JTextField(resp1, 20); String resp2 = JOptionPane.showInputDialog(null, "Digite o nome de sua revista preferida:"); revista = new JTextField(resp2, 20); String[] notas = { "0-3", "3-6", "6-10" }; int resp3 = JOptionPane.showOptionDialog(null, "Qual sua avaliao sobre esta revista?", "Avaliao", 0, 27

Escola Tcnica de Braslia Curso de Java I JOptionPane.QUESTION_MESSAGE, null, notas, notas[0]); // designa o primeiro elemento do array como seleo padro da caixa de dilogo avaliacao = new JTextField(notas[resp3], 20); setLayout(new GridLayout(3, 2,10,1)); add(rotulonome); add(nome); add(rotulorevista); add(revista); add(rotuloavaliacao); add(avaliacao); setLookAndFeel(); setVisible(true); } private void setLookAndFeel() { try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); SwingUtilities.updateComponentTreeUI(this); } catch (Exception e) { System.err.println("Couldn't use the system " + "look and feel: " + e); } } public static void main(String[] arguments) { Caixas frame = new Caixas(); } }

28

Escola Tcnica de Braslia Extra: JOptionPane

Curso de Java I

import javax.swing.JOptionPane; public class Dialogos{ public static void main(String args[]){ String tituloDialogo = "Ttulo da caixa de Dilogo"; String msg = "Mensagem"; JOptionPane.showMessageDialog(null,msg); JOptionPane.showMessageDialog(null,msg,tituloDialogo,JOptionPane.PL AIN_MESSAGE); JOptionPane.showMessageDialog(null,msg, tituloDialogo,JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null,msg, tituloDialogo,JOptionPane.WARNING_MESSAGE); JOptionPane.showMessageDialog(null,msg, tituloDialogo,JOptionPane.ERROR_MESSAGE); msg = "Voc gosta de Java"; Object [] opcoes = {"Sim","No","Mais ou Menos"}; int resp = JOptionPane.showOptionDialog (null,msg,"Pergunta", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,null,opcoes,opcoes[2]); System.out.println("Resposta:"+opcoes[resp].toString()); String nome = JOptionPane.showInputDialog("Digite o seu nome:"); System.out.println("nome:"+nome); System.exit(0); } }

29

Escola Tcnica de Braslia

Curso de Java I

JSlider
So implementados com a classe JSlider, permitem que o usurio defina um nmero deslizando um controle dentro do intervalo de um valor mnimo e mximo. Em muitos casos, um controle deslizante pode ser usado para a entrada numrica em vez de um campo de texto e tem a vantagem de restringir a entrada a um intervalo de valores aceitveis. Os controles deslizantes so horizontais por padro. A orientao pode ser definida explicitamente usando duas constantes de classe da interface SwingConstants: HORIZONTAL ou VERTICAL. Podemos utilizar um dos seguintes mtodos construtores: JSlider(int, int) Um controle deslizante com valores mnimos e mximo especificados. JSlider(int, int, int) Um controle deslizante com mnimo, mximo e inicial especificados. JSlider(int, int, int, int) Um controle deslizante com orientao, valor mnimo, valor mximo e valor inicial especificados. Os componentes de controle deslizante possuem um rtulo opcional que pode ser usado para indicar o valor mnimo, valor mximo e dois conjuntos diferentes de marcas de tique variando entre os valores. Os valores padro so um mnimo de 0, mximo de 100, valor inicial de 50 e orientao horizontal. Os elementos desse rtulo so estabelecidos chamado vrios mtodos de JSlider: setMajorTickSpacing(int) Esse mtodo separa as marcas de tique principais pela distncia especificada. A distncia no est em pixels, mas em valores entre os valores mnimos e mximo representados pelo controle deslizante. setMinorTickSpacing(int) Esse mtodo separa as marcas de tique secundrias pela distncia especificada. As marcas de tique secundrias aparecem como metade do tamanho das marcas principais. setPaintTicks(boolean) Esse mtodo determina se as marcas de tique tiverem de ser exibidas (um argumento true) ou no (um argumento false). setPaintLabels(boolean) Esse mtodo determina se o rtulo numrico do controle deslizante deve ser exibido (ter) ou no (false). Esses mtodos devem ser chamados no controle deslizante antes que sejam acrescentados a um continer.

30

Escola Tcnica de Braslia Exemplo 11: JSlider.

Curso de Java I

import javax.swing.*; public class Video extends JFrame { public Video() { super("Vdeo"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JSlider barra = new JSlider(JSlider.HORIZONTAL, 1, 10, 1); barra.setMajorTickSpacing(2); barra.setMinorTickSpacing(1); barra.setPaintTicks(true); barra.setPaintLabels(true); add(barra); } public static void main(String[] args) { Video vid = new Video(); vid.pack(); vid.setVisible(true); } }

31

Escola Tcnica de Braslia

Curso de Java I

JScrollPane
Aparecem quando o texto no componente ocupa mais espao do que este poderia exibir. As barras de rolagem poderiam ser usadas na direo vertical ou horizontal para rolar pelo texto. Para que um componente possa rolar, ele precisa ser acrescentado a um continer JScrollPane. Esse continer JScrollPane acrescentado a um continer no lugar do componente rolvel. Os painis de rolagem podem ser criados usando o construtor JScrollPane(Objeto), onde o objeto representa o componente que pode ser rolado. Exemplo: Cria uma rea de texto em um painel de rolagem e acrescenta o painel de rolagem, scroller, a um continer chamado mainPane: textBox = new JTextArea(7, 30); JScrollPane scroller = new JScrollPane(textBox); mainPane.add(scroller); Enquanto trabalhamos com painis pode ser til indicar o tamanho que gostaramos que eles ocupassem na interface. Isso feito chamando o mtodo setPreferredSize(Dimension) do painel de rolagem antes de ser acrescentado a um continer. O objeto Dimension representa a largura e altura do tamanho predefinido, representado em pixels. Exemplo: Definindo o tamanho Dimension pref = new Dimension(350,100); scroller.setPreferredSize(pref); Isso dever ser tratado antes que scroller seja acrescentado a um continer. Por padro, um painel de rolagem no apresenta barra de rolagem, a menos que sejam necessrias. Se o componente dentro do painel no for maior do que o prprio painel, as barras no aparecero. No caso de componentes como reas de texto, onde o tamanho do componente pode aumentar enquanto o programa usado, as barras aparecem automaticamente quando so necessrias e desaparecem quando no so. Para redefinir esse comportamento podemos definir uma poltica para um componente JScrollBar quando ele for criado. Para tanto podemos utilizar as seguintes constantes da classe SrcollPaneConstants: HORIZONTAL_SCROLLBAR_ALWAYS HORIZONTAL_SCROLLBAR_AS_NEEDED HORIZONTAL_SCROLLBAR_NEVER VERTICAL_SCROLLBAR_ALWAYS VERTICAL_SCROLLBAR_AS_NEEDED VERTICAL_SCROLLBAR_NEVER Essas constantes de classe so usadas com o construtor JScrollPane(Objeto, int, int), que especifica o componente no painel, a poltica da barra de rolagem vertical e a poltica da barra de rolagem horizontal.

JToolBar
Uma barra de ferramentas um continer da classe JToolBar que agrupa vrios componentes em um linha ou coluna. Esses componentes normalmente so botes. As barras de ferramentas so linhas ou colunas de componentes que agrupam as opes de programa mais comumente usadas. As barras de ferramentas muitas vezes contm botes e listas e podem ser usadas como alternativa para o uso de menus pull-down ou teclas de atalho. As barras de ferramentas so horizontais por padro, mas a orientao definida explicitamente com as variveis de classe HORIZONTAL ou VERTICAL da interface SwingConstants. Os mtodos construtores incluem o seguinte: JToolBar( ) Cria uma nova barra de ferramentas. JToolBar(int) Cria uma nova barra de ferramentas com a orientao especificada. Quando criamos uma barra de ferramentas podemos acrescentar componentes a ela, usando o mtodo add(Objeto) da barra de ferramentas.

32

Escola Tcnica de Braslia Curso de Java I Muitos programas que usam barras de ferramentas permitem que o usurio mova as barras. Essas so chamadas barra de ferramentas encaixveis, pois podemos encaix-las nas bordas da tela. As barras de ferramentas do Swing tambm podem ser encaixadas em uma nova janela, separada da original. Para obter melhores resultados, um componente JToolBar encaixvel deve ser arrumado em um continer usando o gerenciador BorderLayout. Um layout de borda divide um continer em cinco reas: norte, sul, leste, oeste e centro. Cada um dos componentes direcionais ocupa o espao que ele precisar, e o restante alocado ao centro. A barra de ferramentas dever ser alocada em uma das reas direcionais do layout de borda. A nica outra rea do layout que pode ser preenchida o centro.

33

Escola Tcnica de Braslia Exemplo 12: JToolBar.

Curso de Java I

import java.awt.*; import javax.swing.*; public class Barra extends JFrame { public Barra() { super("Barra de Ferramentas"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ImageIcon iconenovo = new ImageIcon("c:\\cones\\novo.png"); ImageIcon iconesalvar = new ImageIcon("c:\\cones\\disk.png"); ImageIcon iconejustificado = new ImageIcon("c:\\cones\\text_align_justify.png"); ImageIcon iconeesquerda = new ImageIcon("c:\\cones\\text_align_left.png"); ImageIcon iconedireita = new ImageIcon("c:\\cones\\text_align_right.png"); JButton JButton JButton JButton JButton novo = new JButton(iconenovo); salvar = new JButton(iconesalvar); justificado = new JButton(iconejustificado); esquerda = new JButton(iconeesquerda); direita = new JButton(iconedireita);

JToolBar bar = new JToolBar(); bar.add(novo); bar.add(salvar); bar.add(justificado); bar.add(esquerda); bar.add(direita); JTextArea area = new JTextArea(8, 40); JScrollPane rolagem = new JScrollPane(area); BorderLayout borda = new BorderLayout(); setLayout(borda); add("North", bar); add("Center", rolagem); pack(); setVisible(true); } public static void main(String[] arguments) { Barra barra = new Barra(); } } 34

Escola Tcnica de Braslia

Curso de Java I

JProgressBar
So componentes usados para mostrar quanto tempo falta para a concluso de uma tarefa. So implementadas atravs da classe JProgressBar. As barras de progresso so usadas para rastrear o progresso de uma tarefa que pode ser representada numericamente. Elas so criadas especificando um valor mnimo e um mximo, que representam os pontos em que a tarefa est comeando e terminando. Uma instalao de software que consiste em 355 arquivos diferentes um bom exemplo de uma tarefa que pode ser quantificada numericamente. O nmero de arquivos transferidos pode ser usado para monitorar o progresso da tarefa. O valor mnimo 0 e o valor mximo 355. Os mtodos construtores incluem os seguintes: JProgressBar( ) Cria uma nova barra de progresso JProgressBar(int, int) Cria uma nova barra de progresso com valores mnimos e mximo especificados JProgressBar(int, int, int) Cria uma nova barra de progresso com a orientao, valores mnimos e mximos especificados. A orientao de uma barra de progresso pode ser estabelecida com as constantes de classe SwingConstants.VERTICAL e SwingConstants.HORIZONTAL. As barras de progresso so horizontais por padro. Os valores mnimo e mximo tambm podem ser configurados chamando-se os valores setMinimum(int) e setMaximum(int) da barra de progresso com os valores indicados. Para atualizar uma barra de progresso, chamamos o mtodo setValue(int) com um valor indicando em que ponto a tarefa se encontra no momento. Esse valor dever ser algo entre os valores mnimo e mximo estabelecidos pela barra. Exemplo: Apresenta uma barra de progresso install, do exemplo de instalao de software, quantos arquivos tiveram upload at aqui: int filesDone = getNumber0Files( ) representa algum cdigo que poderia ser usado para registrar quantos arquivos foram copiados at aqui durante a instalao. Quando esse valor passado para a barra de progresso pelo mtodo setValue( ), a barra atualizada imediatamente para representar a porcentagem que foi completada. As barras de progresso normalmente incluem um rtulo de texto alm do grfico de um caixa vazia sendo preenchida. Esse rtulo apresenta a porcentagem da tarefa que foi completada, e podemos configur-lo para uma barra chamando o mtodo setStringPainted(boolean) com um valor true.

35

Escola Tcnica de Braslia Exemplo 13: JProgessBar.

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Progresso extends JFrame { JProgressBar barra; Thread runner; int num = 0; public Progresso() { setTitle("Progresso"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); barra = new JProgressBar(0, 2000); // Valor mnimo e mximo barra.setValue(0); barra.setStringPainted(true); add(barra); pack(); setVisible(true); } public void evolucao() { //se repete enqto num menor que 2000 e aumenta em 95 a cada iterao while (num < 2000) { barra.setValue(num); // faz com que a barra use o valor ao desenhar o progresso. try { Thread.sleep(1000); } catch (InterruptedException e) { } num += 95; } } public static void main(String args[]) { Progresso prog = new Progresso(); prog.evolucao(); } }

36

Escola Tcnica de Braslia

Curso de Java I

JMenuBar - JMenu - JMenuItem


Os menus normalmente duplicam as mesmas tarefas que poderamos realizar utilizando botes e outros componentes da interface com o usurio, oferecendo duas maneiras de realizar o mesmo trabalho. Os menus em Java so aceitos por trs componentes que trabalham em conjunto um com o outro: JMenuItem Um item em um menu JMenu Um menu drop-down que contm um ou mais componentes JMenuItem, outros componentes de interface e separadores. JMenuBar Um continer que mantm um ou mais componentes JMenu e apresenta seus nomes. Um componente JMenuItem como um boto que pode ser configurado por meio de mtodos construtores, como um componente JButton. Chame-o com JMenuItem(String) para o item de texto, JMenuItem(Icon) para um item que mostra um arquivo grfico ou JMenuItem(String, Icon) para ambos. As instrues a seguir criam sete itens de menu: JMenuItem j1 = new JMenuItem(Open); JMenuItem j2 = new JMenuItem(Save); JMenuItem j3 = new JMenuItem(Save as Template); JMenuItem j4 = new JMenuItem(Page Setup); JMenuItem j5 = new JMenuItem(Print); JMenuItem j6 = new JMenuItem(Use as Default Message Style); JMenuItem j7 = new JMenuItem(Close); Um continer JMenu mantm todos os itens de menu para um menu drop-down. Para cri-lo, chame o construtor JMenu(String) com o nome do argumento. Esse nome aparecer na barra de menus. Depois de criar um continer JMenu, chame seu mtodo add(JMenuItem) para acrescentar um item de menu a ele. Novos itens so colocados no final do menu. O item colocado em um menu no precisa ser um item de menu. Chame o mtodo add(Componente) com um componente da interface com o usurio como argumento. Um que normalmente aparece em um menu uma caixa de seleo (a classe JCheckBox em Java). Para acrescentar um separador de linha ao final do menu, chame o mtodo addSeparator( ). Os separadores normalmente so usados para agrupar vrios itens relacionados visualmente em um menu. Exemplo: JMenu m1 = new JMenu(File); m1.add(j1); m1.add(j2); m1.add(j3); m1.addSeparator( ); m1.add(j4); m1.add(j5); m1.addSeparator( ); m1.add(j6); m1.addSeparator( ); m1.add(j7); Um continer JMenuBar mantm um ou mais contineres JMenu. Para criar uma barra de menus, chame o mtodo construtor JMenuBar( ) sem argumentos. Acrescente menus ao final de uma barra chamando seu mtodo add(JMenu). Depois de criar todos os itens, acrescent-los aos menus e os menus a uma barra, estaremos prontos para inclu-los a um frame. Chame o mtodo setJMenuBar(JMenuBar) do frame. Exemplo: JMenuBar bar = new JMenuBar( ); bar.add(m7); gui.setJMenuBar(bar);

37

Escola Tcnica de Braslia Exemplo 14: JMenuBar, JMenu, JMenuItem.

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Menus extends JFrame { public Menus() { super("Menus"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ImageIcon iconenovo = new ImageIcon("c:\\cones\\novo.png"); ImageIcon iconeabrir = new ImageIcon("c:\\cones\\abrir.png"); ImageIcon iconesalvar = new ImageIcon("c:\\cones\\salvar.png"); ImageIcon iconesalvarcomo = new ImageIcon("c:\\cones\\salvarcomo.png"); JButton novo = new JButton("Novo", iconenovo); JButton abrir = new JButton("Abrir", iconeabrir); JButton salvar = new JButton("Salvar", iconesalvar); JButton salvarcomo = new JButton("Salvar Como", iconesalvarcomo); JToolBar bar = new JToolBar(); bar.add(novo); bar.add(abrir); bar.add(salvar); bar.add(salvarcomo); JMenuItem j1 = new JMenuItem("Novo"); JMenuItem j2 = new JMenuItem("Abrir"); JMenuItem j3 = new JMenuItem("Salvar"); JMenuItem j4 = new JMenuItem("Salvar como"); JMenuBar menubar = new JMenuBar(); JMenu menu = new JMenu("Arquivo"); menu.add(j1); menu.add(j2); menu.addSeparator(); menu.add(j3); menu.add(j4); menubar.add(menu); JTextArea edit = new JTextArea(8, 40);

38

Escola Tcnica de Braslia JScrollPane scroll = new JScrollPane(edit); BorderLayout borda = new BorderLayout(); setLayout(borda); add("North", bar); add("Center", scroll); setJMenuBar(menubar); pack(); setVisible(true); } public static void main(String[] arguments) { Menus men = new Menus(); } }

Curso de Java I

39

Escola Tcnica de Braslia Extra: JMenuBar, JMenu, JMenuItem

Curso de Java I

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Menu{ public static void main(String args[]){ JFrame f1 = new JFrame ("Menu"); f1.setSize(500,400); JMenu sm = new JMenu("Novo"); sm.add(new JMenuItem("Texto")); sm.add(new JMenuItem("Dados")); JMenu m1 = new JMenu("Arquivo"); m1.setMnemonic(KeyEvent.VK_A); m1.add(sm); m1.add(new JMenuItem("Abrir...")); m1.add(new JMenuItem("Salvar")); m1.add(new JMenuItem("Salvar como...")); m1.add(new JMenuItem("Fechar")); m1.addSeparator(); m1.add(new JMenuItem("Sair")); JMenu m2 = new JMenu("Exibir"); m2.setMnemonic(KeyEvent.VK_E); m2.add(new JCheckBoxMenuItem("Ferramenta Grfica", true)); m2.add(new JCheckBoxMenuItem("Ferramenta Matemtica")); JMenu m3 = new JMenu("Ajuda"); m3.setMnemonic(KeyEvent.VK_J); m3.add(new JMenuItem("Sobre...")); JMenuBar mp = new JMenuBar(); mp.add(m1); mp.add(m2); mp.add(m3); f1.setJMenuBar(mp); f1.setVisible(true); f1.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } } ); } }

40

Escola Tcnica de Braslia

Curso de Java I

JTabbedPane
So implementados pela classe JTabbedPane. As guias podem ser organizadas horizontalmente, na parte inferior do componente, ou verticalmente, ao longo do lado esquerdo ou direito. Os painis com guias so criados com os trs mtodos construtores a seguir: JTabbedPane( ) Cria um painel vertical com guias no alto, sem rolagem. JTabbedPane(int) Cria um painel com guias, sem rolagem e com posicionamento especificado. JTabbedPane(int, int) Cria um painel com guias, com o posicionamento especificado (primeiro argumento) e poltica de rolagem (segundo argumento). Utilizamos os argumentos: JTabbedPane.TOP, JTabbedPane.BOTTOM, JTabbedPane.LEFT ou JTabbedPane.RIGHT. A poltica de rolagem determina como as guias sero exibidas quando houver mais guias do que a interface pode conter. Um painel com guias que no rola apresenta guias extras em sua prpria linha, que pode ser configurada por meio da varivel de classe JTabbed.WRAP_TAB_LAYOUT. Um painel em guias que rola apresenta setas de rolagem ao lado das guias. Isso pode ser configurado com JTabbedPane.SCROLL_TAB_LAYOUT. Depois de cria um painel com guias, poderemos acrescentar componentes a ele, chamando o mtodo addTab(String, Componente) do painel. O argumento String ser utilizado como rtulo da guia. O segundo argumento o componente que compor uma das guias no painel. comum utilizar um objeto JPanel para essa finalidade, mas no obrigatrio. Exemplo: As instrues a seguir criam cinco painis e os acrescentam a um painel com guias: JPanel mainSettings = new JPanel( ); JPanel advancedSettings = new JPanel( ); JPanel privacySettings = new JPanel( ); JPanel emailSettings = new JPanel( ); JPanel securitySettings = new JPanel( ); JTabbedPane tabs = new JTabbedPane( ); tabs.addTab(Main, mainSettings); tabs.addTab(Advanced, advancedSettings); tabs.addTab(Privacy, privacySettings); tabs.addTab(E-mail, emailSettings); tabs.addTab(Security, securitySettings); Depois de acrescentar todos os painis e outros componentes a um painel com guias, o painel pode ser acrescentado a outro continer.

41

Escola Tcnica de Braslia Exemplo 15: JTabbedPane.

Curso de Java I

import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Guias extends JFrame { JTabbedPane guias = new JTabbedPane(SwingConstants.BOTTOM); Painelcadastro cad = new Painelcadastro(); Painelconsulta con = new Painelconsulta(); public Guias() { setTitle("Gesto de Recursos Humanos"); setSize(650,300); guias.setTabPlacement(JTabbedPane.TOP); // local das orelhas guias.add(cad, "CADASTRO"); // adiciona o painel na orelha CADASTRO guias.add(con, "CONSULTA"); // adiciona o painel na orelha CADASTRO setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); this.getContentPane().add(guias); } public static void main(String[] args) { Guias g = new Guias(); } public class Painelcadastro extends JPanel{ JLabel rotulonome = new JLabel("Nome", SwingConstants.LEFT); JTextField camponome = new JTextField(40); String[] opcoes = { "Mdico", "Professor", "Engenheiro", "Outros" }; JLabel escolha = new JLabel("Escolha sua profisso:"); JComboBox selecao = new JComboBox(); public Painelcadastro(){ JPanel p1 = new JPanel(); p1.add(rotulonome); p1.add(camponome); p1.add(escolha); for (int i = 0; i < opcoes.length; i++) selecao.addItem(opcoes[i]); p1.add(selecao); p1.setLayout(new GridLayout(2,2,-300,1)); add(p1);

42

Escola Tcnica de Braslia setVisible(true); }

Curso de Java I

} public class Painelconsulta extends JPanel{ JLabel rotulonome = new JLabel("Nome", SwingConstants.LEFT); JTextField camponome = new JTextField(40); public Painelconsulta(){ JPanel p1 = new JPanel(); p1.add(rotulonome); p1.add(camponome); add(p1); setVisible(true); } } } Exerccio 15: 1) Crie as classes Painelcadastro e Painelconsulta no pacote. Observe que estas classes no contm um mtodo principal. 2) Acrescene mais componentes as classes Painelcadastro e Painelconsulta.

43

Escola Tcnica de Braslia

Curso de Java I

PARTE 2 - LAYOUT

44

Escola Tcnica de Braslia

Curso de Java I

Gerenciadores de Layout
Podemos utilizar os gerenciadores de layout que organizam como os componentes sero organizados quando so includos em um continer. O gerenciador de layout padro para painis a classe FlowLayout. Essa classe permite que os componentes fluam da esquerda para a direita na ordem em que so acrescentados a um continer. Quando no houver mais espao, uma nova fileira de componentes comea imediatamente abaixo da primeira. Java inclui vrios gerenciadores de layout para diversos propsitos: BorderLayout, BoxLayout, CardLayout, FlowLayout e GridBagLayout. Para criar um gerenciador de layout para um continer, chame o construtor do gerenciador de layout, como o exemplo a seguir: FlowLayout flo = new FlowLayout( ); Depois de criar um gerenciador de layout, tornamos o gerenciador de layout para um continer usando o mtodo setLayout( ). O gerenciador de layout precisa ser estabelecido antes que qualquer componente seja adicionado ao continer. Se o gerenciador de layout no for especificado, seu layout padro ser usado FlowLayout para painis e BorderLayout para frames e janelas. Exemplo: import java.awt.*; public class Layout extends javax.swing.JFrame; public Layout( ){ FlowLayout fl = new FlowLayout( ); setLayout(fl); // adio dos componentes }}

FLOWLAYOUT
Dispe os componentes de uma forma semelhante ao modo como as palavras so dispostas em uma pgina- da esquerda para a direita at que no haja mais espao, e depois na linha seguinte. Por padro, os componentes em cada linha sero centralizados quando voc usa o construtor FlowLayout( ) sem argumentos. Se quisermos que os componentes sejam ALINHADOS na margem esquerda ou direita do continer, a varivel FlowLayout.LEFT ou FlowLayout.RIGHT dever ser o nico argumento do construtor, como na instruo abaixo: FlowLayout right = new FlowLayout(FlowLayout.RIGHT); A varivel de classe FlowLayout.CENTER usada para especificar componentes centralizados.

45

Escola Tcnica de Braslia Exemplo 1: FlowLayout

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Nomes extends JFrame { JButton a = new JButton("Amanda"); JButton b = new JButton("Bianca"); JButton c = new JButton("Carla"); JButton d = new JButton("Dbora"); JButton e = new JButton("Eveline"); JButton f = new JButton("Fabiane"); public Nomes() { super("Nomes"); setSize(360, 120); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); FlowLayout lm = new FlowLayout(FlowLayout.LEFT); setLayout(lm); add(a); add(b); add(c); add(d); add(e); add(f); setVisible(true); } public static void main(String[] arguments) { Nomes n = new Nomes(); } }

46

Escola Tcnica de Braslia Curso de Java I O gerenciador de layout acima utiliza o INTERVALO de cinco pixels entre cada componente em uma fileira e um intervalo de cinco pixels entre cada linha. Podemos mudar o intervalo horizontal e vertical entre componentes com alguns argumentos extras ao construtor FlowLayout( ). O construtor FlowLayout(int, int, int) utiliza os trs argumentos a seguir, em ordem: O alinhamento, que precisa ser FlowLayout.CENTER, FlowLayout.LEFT ou FlowLayout.RIGHT O intervalo horizontal entre componentes, em pixels. O intervalo vertical, em pixels. Exemplo: gerenciador de fluxo com componentes centralizados, um intervalo horizontal de 30 pixels e um intervalo vertical de 10 pixels. FlowLayout flo = new FlowLayout(FlowLayout.CENTER, 30, 10);

BOXLAYOUT
Pode ser utilizado para empilhar componentes de cima para baixo ou da esquerda para a direita. O layout de caixa, gerenciado pela classe BoxLayout no pacote javax.swing, especializa o layout de fluxo CERTIFICANDOSE de que os componentes sempre se alinham vertical ou horizontalmente independente de como o continer redimensionado. Um gerenciador de layout de caixa deve ser criado com dois argumentos para seu construtor: o continer que gerenciar e a varivel de classe que estabelece o alinhamento vertical ou horizontal. O alinhamento, especificada com uma varivel da classe BoxLayout, pode ser X_AXIS para alinhamento horizontal da esquerda para a direita e Y_AXIS para alinhamento vertical de cima para baixo. O cdigo a seguir configura um painel para uso do layout de caixa vertical: JPanel optionPane = new JPanel( ); BoxLayout box = new BoxLayout(optionPane, BoxLayout.Y_AXIS); Os componentes adicionados ao continer se alinharo com o eixo especificado e sero exibidos em seus tamanhos preferidos. No alinhamento horizontal, o gerenciador do layout de caixa tenta deixar todos os componentes com a mesma altura. No alinhamento vertical, ele procura usar a mesma largura para todos.

47

Escola Tcnica de Braslia Exemplo 2: BoxLayout.

Curso de Java I

import java.awt.*; import javax.swing.*; public class LayoutCaixa extends JFrame { public LayoutCaixa() { super("BoxLayout"); setSize(500,245); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel painel = new JPanel(); BoxLayout horizontal = new BoxLayout(painel, BoxLayout.X_AXIS); painel.setLayout(horizontal); JButton novo = new JButton("Novo"); JButton abrir = new JButton("Abrir"); JButton salvar = new JButton("Salvar"); JButton salvarcomo = new JButton("Salvar Como"); painel.add(novo); painel.add(abrir); painel.add(salvar); painel.add(salvarcomo); JTextArea area = new JTextArea(10, 43); JScrollPane rolagem = new JScrollPane(area); FlowLayout fluxo = new FlowLayout(); setLayout(fluxo); add(painel); add("SOUTH",rolagem); setVisible(true); } public static void main(String args[]) { LayoutCaixa caixa = new LayoutCaixa(); } }

48

Escola Tcnica de Braslia

Curso de Java I

GRIDLAYOUT
Este gerenciador arruma os componentes em uma grade de linhas e colunas. Os componentes so acrescentados primeiro na fileira superior da grade, comeando com a clula mais esquerda e continuando para a direita. Quando todas as clulas na fileira de cima estiverem completas, o prximo componente ser acrescentado clula mais esquerda na segunda fileira da grade se houver uma segunda linha e assim por diante. Os layouts de grade so criados com a classe GridLayout. Dois argumentos so enviados ao construtor GridLayout o nmero de linhas na grade e o nmero de colunas. A instruo a seguir cria um gerenciador de layout de grade com 10 linhas e 3 colunas: GridLayout gr = new GridLayout(10, 3); Assim como no layout de fluxo, podemos especificar um intervalo vertical e horizontal entre componentes com dois argumentos extras. A instruo a seguir cria um layout de grade com 10 linhas e 3 colunas, um intervalo horizontal de 5 pixels e um intervalo vertical de 8 pixels: GridLayout gr2 = new GridLayout(10,3,5,8); O intervalo padro entre os componentes sob o layout de grade de 0 pixel em direes vertical e horizontal.

49

Escola Tcnica de Braslia Exemplo 3: GridLayout.

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LayoutGrade extends JFrame { JButton zero = new JButton("0"); JButton maismenos = new JButton("+/-"); JButton ponto = new JButton(","); JButton soma = new JButton("+"); JButton um = new JButton("1"); JButton dois = new JButton("2"); JButton tres = new JButton(3"); JButton sub = new JButton("-"); JButton quatro = new JButton("4"); JButton cinco = new JButton("5"); JButton seis = new JButton("6"); JButton mult = new JButton("*"); JButton sete = new JButton("7"); JButton oito = new JButton("8"); JButton nove = new JButton("9"); JButton div = new JButton("/"); public LayoutGrade() { super("GridLayout"); setSize(260, 260); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel painel = new JPanel(); GridLayout grade = new GridLayout(4, 4,2,2); painel.setLayout(grade); painel.add(zero); painel.add(maismenos); painel.add(ponto); painel.add(soma); painel.add(um); painel.add(dois); painel.add(tres); painel.add(sub); painel.add(quatro); painel.add(cinco); painel.add(seis); painel.add(mult); painel.add(sete); painel.add(oito); painel.add(nove); painel.add(div); add(painel); setVisible(true); } public static void main(String[] arguments) { LayoutGrade grade = new LayoutGrade(); } }

50

Escola Tcnica de Braslia Curso de Java I Devemos observar que os botes se expandem para preencher o espao disponvel em cada clula. Essa uma diferena importante entre layout de grade e alguns dos outros gerenciadores de layout.

BORDERLAYOUT
So criados usando a classe BorderLayout em java.awt, o gerenciador divide o continer em cinco sees: norte, sul, leste, oeste e centro. Sob o layout de borda, os componentes nos quatro pontos de bssola ocupam o mximo de espao que precisarem o centro recebe qualquer espao restante. Normalmente, isso resultar em uma arrumao com um grande componente central e quatro componentes finos em torno dele. Um layout de borda criado com os construtores BorderLayout( ) ou BorderLayout(int, int). O primeiro construtor cria um layout de borda sem intervalo entre qualquer um dos componentes. O segundo construtor especifica o intervalo horizontal e o vertical, respectivamente. Depois de criar um layout de borda e configur-lo como o gerenciador de layout de um continer, os componentes sero acrescentados usando uma chamada ao mtodo add( ), que diferente do que vimos anteriormente. O primeiro argumento o que deve ser adicionado ao continer. O segundo argumento uma varivel de classe BorderLayout que indica a qual parte do layout de borda atribuir o componente. As variveis NORTH, SOUTH, EAST e CENTER podem ser usadas. O segundo, argumento para esse mtodo o componente que deve ser adicionado ao continer.

51

Escola Tcnica de Braslia Exemplo 4: BorderLayout.

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LayoutBorda extends JFrame { JButton norte = new JButton("Norte"); JButton sul = new JButton("Sul"); JButton leste = new JButton("Leste"); JButton oeste = new JButton("Oeste"); JButton centro = new JButton("Centro"); public LayoutBorda() { setTitle("BorderLayout"); setSize(240, 280); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); add(norte, BorderLayout.NORTH); add(sul, BorderLayout.SOUTH); add(leste, BorderLayout.EAST); add(oeste, BorderLayout.WEST); add(centro, BorderLayout.CENTER); setVisible(true); } public static void main(String args[]) { LayoutBorda borda = new LayoutBorda(); } }

52

Escola Tcnica de Braslia MISTURANDO OS GERENCIADORES DE LAYOUT

Curso de Java I

Isso feito colando-se vrios contineres dentro de um continer maior (como um frame) e dando a cada continer menor seu prprio gerenciador de layout. O continer a ser usado para esses contineres menores o painel, que criado a partir do painel JPanel. Os painis so contineres usados para agrupar componentes. Ao trabalhar com painis, deve se ter em mente: O painel preenchido com componentes antes que seja colocado em um continer maior. O painel possui seu prprio gerenciador de layout. O mtodo de layout definido para um painel com a chamada ao mtodo setLayout( ).

CARDLAYOUT
Os layouts de ficha diferem dos outros porque escondem alguns componentes. Um layout de ficha um grupo de contineres ou componentes que so EXIBIDOS UM DE CADA VEZ. Cada continer no grupo chamado de ficha. O modo mais comum de usar um layout de ficha usar um painel para cada ficha. Primeiro, os componentes so acrescentados aos painis, e depois os painis so acrescentados ao continer definido para utilizar o layout de ficha. Um layout de ficha utilizado a partir da classe CardLayout(no pacote java.awt) com uma chamada simples ao construtor: CardLayout cc = new CardLayout( ); O mtodo setLayout( ) usado para tornar este gerenciador de layout para o continer, como na instruo abaixo: setLayout(cc); Depois de definir um continer para usar o gerenciador de layout de ficha, ter de usar uma chamada de mtodo add( ) ligeiramente diferente para adicionar fichas ao layout. O mtodo a ser usado add(Componente, String). O primeiro argumento especifica o conteiner ou o componente que a ficha. Se for um continer, todos os componentes precisam ter sido acrescentados a ele antes que a ficha seja acrescentada. O segundo argumento do mtodo add( ) uma string que representa o nome da ficha. Pode ser qualquer coisa que voc queira chamar. Poderamos numerar as fichas de alguma maneira e usar o nmero no nome, com em Ficha 1, Ficha 2, e assim por diante. Exemplo: Acrescenta um painel chamado options a um continer e d a essa ficha o nome Carto de Opes: add(options, Carto de Opes); Quando um continer usando um layout de ficha for exibido pela primeira vez, a ficha visvel ser a primeira acrescentada ao continer. Fichas subseqentes podero ser exibidas chamando o mtodo show( ) do gerenciador de layout, que utiliza dois argumentos: O continer com todas as fichas O nome da ficha Exemplo: Chamada ao mtodo show( ) de um gerenciador de layout de ficha chamado cc: cc.show(this, Carto); A palavra-chave this refere-se ao objeto dentro do qual a instruo cc.show aparece. Carto o nome da ficha a revelar. Quando a ficha mostrada, a ficha exibida anteriormente obscurecida. Somente uma ficha de um layout de ficha pode ser vista de cada vez. Em um programa que usa o gerenciador do layout de ficha, uma mudana de ficha normalmente ser disparada pela ao de um usurio.

53

Escola Tcnica de Braslia Exemplo 5: CardLayout.

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LayoutCard extends JPanel implements ActionListener { int cartao = 0; CardLayout cartoes = new CardLayout(); Componentes[] pergunta = new Componentes[3]; public LayoutCard() { super(); setSize(240, 140); setLayout(cartoes); String questao1 = "Qual o seu sexo?"; String[] resposta1 = { "Masculino", "Feminino", "No responderei" }; pergunta[0] = new Componentes(questao1, resposta1, 2); String questao2 = "Qual a sua idade?"; String[] resposta2 = { "Menos que 25", "25-34", "35-54", "Mais que 54" }; pergunta[1] = new Componentes(questao2, resposta2, 1); String questao3 = "Quantas vezes voc faz exerccio por semana?"; String[] resposta3 = { "Nunca", "1-3 vezes", "Mais que 3" }; pergunta[2] = new Componentes(questao3, resposta3, 1); pergunta[2].setQuestaoFinal(true); for (int i = 0; i < pergunta.length; i++) { pergunta[i].proximo.addActionListener(this); pergunta[i].fim.addActionListener(this); add(pergunta[i], "Card " + i); } }

54

Escola Tcnica de Braslia public void actionPerformed(ActionEvent evt) { cartao++; if (cartao >= pergunta.length) { System.exit(0); } cartoes.show(this, "Card " + cartao); } } class Componentes extends JPanel { JLabel questao; JRadioButton[] resposta; JButton proximo = new JButton("Prximo"); JButton fim = new JButton("Fim");

Curso de Java I

Componentes(String ques, String[] resp, int def) { super(); setSize(160, 110); questao = new JLabel(ques); resposta = new JRadioButton[resp.length]; JPanel sub1 = new JPanel(); ButtonGroup grupo = new ButtonGroup(); JLabel rotulo = new JLabel(ques); sub1.add(rotulo); JPanel sub2 = new JPanel(); for (int i = 0; i < resp.length; i++) { if (def == i) { resposta[i] = new JRadioButton(resp[i], true); } else { resposta[i] = new JRadioButton(resp[i], false); } grupo.add(resposta[i]); sub2.add(resposta[i]); } JPanel sub3 = new JPanel(); proximo.setEnabled(true); sub3.add(proximo); fim.setEnabled(false); sub3.add(fim); GridLayout grade = new GridLayout(3, 1); setLayout(grade); add(sub1); add(sub2); add(sub3); } void setQuestaoFinal(boolean questaofinal) { if (questaofinal) { proximo.setEnabled(false); fim.setEnabled(true); } } }

55

Escola Tcnica de Braslia

Curso de Java I

Exemplo 5: Executora CardLayout import java.awt.*; import javax.swing.*; public class PrincipalCard extends JFrame { public PrincipalCard( ) { super("Cartes"); setSize(290, 140); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); LayoutCard lc = new LayoutCard(); add(lc); setVisible(true); } public static void main(String[] arguments) { PrincipalCard pc = new PrincipalCard(); }} Extra: CardLayout, ActionListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemplo0920 extends JFrame implements ActionListener { JPanel painelBotoes ,painelCard,P1,P2,P3; JButton B1,B2,B3,B4,B5,B6,btpainel1,btpainel2,btpainel3; JLabel L1,L2,L3; JTextField T1,T2; public Exemplo0920() { setTitle("Uso do gerenciador CardLayout"); setSize(280,170); setLocation(50,50); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setBackground(new Color(0,128,128)); getContentPane().setLayout(new BorderLayout()); B1 = new JButton("Boto 1"); B2 = new JButton("Boto 2"); B3 = new JButton("Boto 3"); B4 = new JButton("Boto 4"); B5 = new JButton("Boto 5"); B6 = new JButton("Boto 6"); L1 = new JLabel("Esse o painel 1",JLabel.CENTER); L2 = new JLabel("Esse o painel 2",JLabel.CENTER); L3 = new JLabel("Esse o painel 3",JLabel.CENTER); T1 = new JTextField("Linguagem",20); T2 = new JTextField("Java",10); btpainel1 = new JButton("Painel 1"); btpainel1.addActionListener(this); btpainel2 = new JButton("Painel 2"); btpainel2.addActionListener(this);

56

Escola Tcnica de Braslia btpainel3 = new JButton("Painel 3"); btpainel3.addActionListener(this); painelCard = new JPanel(); painelCard.setLayout(new CardLayout());

Curso de Java I

painelBotoes = new JPanel(); painelBotoes .setLayout(new GridLayout(1,3)); P1 = new JPanel(); P1.setLayout(new FlowLayout()); P1.add(L1);P1.add(T1);P1.add(T2); P2 = new JPanel(); P2.setLayout(new GridLayout(4,1)); P2.add(L2);P2.add(B1);P2.add(B2);P2.add(B3); P3 = new JPanel(); P3.setLayout(new BorderLayout()); P3.add("North",B4);P3.add("Center",L3); P3.add("East",B5);P3.add("South",B6); painelBotoes .add(btpainel1); painelBotoes .add(btpainel2); painelBotoes .add(btpainel3); painelCard.add(P1,"p1"); painelCard.add(P2,"p2"); painelCard.add(P3,"p3"); getContentPane().add("North",painelBotoes ); getContentPane().add("South",painelCard); setVisible(true); } public void actionPerformed(ActionEvent e){ CardLayout cl = (CardLayout) painelCard.getLayout(); if (e.getSource()==btpainel1) cl.show(painelCard,"p1"); if (e.getSource()==btpainel2) cl.show(painelCard,"p2"); if (e.getSource()==btpainel3) cl.show(painelCard,"p3"); } public static void main(String args[]) { JFrame Janela=new Exemplo0920(); } }

57

Escola Tcnica de Braslia

Curso de Java I

GRID BAG LAYOUT


uma extenso do gerenciador de layout de grade. Difere do layout de grade das seguintes maneiras: Um componente pode ocupar mais de uma clula na grade. As propores entre diferentes linhas e colunas no precisam ser iguais. Um componente no precisa preencher toda(s) a(s) clula(s) que ele ocupa Um componente pode ser alinhado a qualquer borda de uma clula. Um layout grid bag requer as classes GridBagLayout e GridBagConstraints, ambas partes do pacote java.awt.GridBagLayout o gerenciador de layout e, GridBagConstraints define o posicionamento dos componentes na grade. O construtor do gerenciador de layout grid bag no possui argumentos e pode ser aplicado a um continer, como qualquer outro gerenciador. As instrues a seguir podem ser usadas no mtodo construtor de um frame ou janela para usar o layout grid bag desse continer: Container pane = getContentPane( ); GridBagLayout bag = new GridBagLayout( ); pane.setLayout(bag); Em um layout grid bag, cada componente usa um objeto GridBagConstraints para ditar a(s) clula(s) que ocupa em uma grade, seu tamanho e outros aspectos de sua apresentao. Um objeto GridBagConstraints possui 11 variveis de instncia que determinam o posicionamento dos componentes: gridx a posio x da clula que contm o componente (caso se estenda por vrias clulas, a posio x da poro superior esquerda do componente). gridy a posio y da clula ou sua poro superior esquerda. gridwidth o nmero de clulas que o componente ocupa em uma direo horizontal. gridheight - o nmero de clulas que o componente ocupa em uma direo vertical weightx um valor que indica o tamanho do componente em relao a outros componentes da mesma linha de grade. weighty um valor que indica seu tamanho em relao aos componentes da mesma coluna da grade. anchor um valor que determina onde o componente ser exibido dentro de sua clula (se no preencher a clula toda). fill um valor que determina se o componente se expande horizontal ou verticalmente para preencher sua clula. insets um objeto insets que define o espao em branco em torno do componente dentro de sua clula. ipadx a quantidade a expandir a largura do componente alm de seu tamanho mnimo. ipady a quantidade a expandir a altura do componente Com exceo de insets, todos esses componentes podem conter valores inteiros. A maneira mais fcil de usar essa classe criar um objeto constraints sem argumentos e definir suas variveis individualmente. As variveis no definidas explicitamente usam seus valores padro. Exemplo: Criao de um layout bag grid e um objeto constraints usado para posicionar os componentes na grade: Container pane = getContentPane( ); GridBagLayout gridbag = new GridBagLayout( ); GridBagConstraints constraints = new GridBagConstraints( ); pane.setLayout(gridbag); O objeto constraints pode ser configurador com um conjunto de instrues de atribuies: constraints.gridx = 0; constraints.gridy = 0; constraints.gridwidth = 2; constraints.gridheight = 1; constraints.weightx = 100; 58

Escola Tcnica de Braslia

Curso de Java I

constraints.weighty = 100; constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.CENTER; Esse cdigo configura uma restrio que pode ser usada para colocar um componente na posio de grade(0,0) que tem duas clulas de largura e uma clula de altura. O tamanho do componente dentro de sua clula e posio definido com variveis de classe de GridBagConstraints. O componente ser centralizado na sua clula (um valor anchor de CENTER) e no se expande para preencher a clula toda (um valor fill de NONE). Os valores weightx e weighty somente fazem sentido em relao aos mesmos valores para outros componentes. Um componente acrescentado a um layout grid bag em duas etapas: 1. O mtodo setConstraints (Componente, GridBagConstraints) do gerenciador de layout chamado com o componente e objetos constraints como argumentos. 2. O componente acrescentado a um continer que usa esse gerenciador. Um objeto constraints deve ser definido antes do posicionamento de cada componente na grade. public Cadastro( ){ GridBagLayout gridbag = new GridBagLayout( ); setLayout(gridbag); Jlabel rotulonome = new Jlabel(Nome:); GridBagConstraints constraints = new GridBagConstraints( ); constraints.gridx = 0; constraints.gridy = 0; constraints.gridwidth = 1; constraints.gridheight = 1; constraints.weightx = 10; constraints.weighty = 100; constraints.fill = GridBagConstraints.NONE; constraints.gridx = GridBagConstraints.EAST; gridbag.setConstraints(toLabel, constraints( )); add(nome); JTextField to = new JTextField( ); constraints.gridx = 1; constraints.gridy = 0; constraints.gridwidth = 9; constraints.gridheight = 1; constraints.weightx = 90; constraints.weighty = 100; constraints.fill = GridBagConstraints.HORIZONTAL; constraints.gridx = GridBagConstraints.WEST; gridbag.setConstraints(to, constraints( )); add(nome); } Obs.: Verifique que temos que definir novos valores para posicionar cada novo objeto. Isto extremamente invivel, a menos que faamos um mtodo para adicionar apenas os valores que desejamos para o componente.

59

Escola Tcnica de Braslia Exemplo 6: GridBagLayout

Curso de Java I

import java.awt.*; import javax.swing.*; public class Cadastro extends JPanel { GridBagLayout gridbag = new GridBagLayout(); public Cadastro() { super(); GridBagConstraints constraints; setLayout(gridbag); JLabel rotulonome = new JLabel("Nome: "); JTextField nome = new JTextField(); JLabel rotulocargo = new JLabel("Cargo: "); JTextField cargo = new JTextField(); JLabel rotulofone = new JLabel("Telefone: "); JTextField fone = new JTextField(); JLabel rotulocep = new JLabel("CEP: "); JTextField cep = new JTextField(); addComponente(rotulonome,0,0,1,1,10,100,GridBagConstraints.NONE, GridBagConstraints.EAST); addComponente(nome,1,0,9,1,90,100,GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST); addComponente(rotulocargo,0,1,1,1,10,100,GridBagConstraints.NONE, GridBagConstraints.EAST); addComponente(cargo,1,1,9,1,90,100, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST); addComponente(rotulofone,0,2,1,1,10,100, GridBagConstraints.NONE, GridBagConstraints.EAST); addComponente(fone,1,2,4,1,40,100, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST); addComponente(rotulocep,5,2,1,1,10,100, GridBagConstraints.NONE, GridBagConstraints.EAST); addComponente(cep,6,2,4,1,40,100, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST); } private void addComponente(Component componente, int gridx, int gridy, int gridwidth, int gridheight, int weightx, int weighty, int fill, int anchor) {

60

Escola Tcnica de Braslia

Curso de Java I

GridBagConstraints constraints = new GridBagConstraints(); constraints.gridx = gridx; constraints.gridy = gridy; constraints.gridwidth = gridwidth; constraints.gridheight = gridheight; constraints.weightx = weightx; constraints.weighty = weighty; constraints.fill = fill; constraints.anchor = anchor; gridbag.setConstraints(componente, constraints); add(componente); } }

Exemplo 6: Executora GridBagLayout import java.awt.*; import javax.swing.*; public class PrincipalCadastro extends JFrame { public PrincipalCadastro() { super("Cadastro"); setSize(290, 140); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Cadastro cad = new Cadastro(); add(cad); setVisible(true); } public static void main(String[] arguments) { PrincipalCadastro pc = new PrincipalCadastro(); } } Extra: GridBagLayout

import javax.swing.*; import java.awt.*; public class Bag extends JFrame{ public Bag () { GridBagLayout layout = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); getContentPane().setLayout(layout); JButton botao1 = new JButton("Boto 1"); JButton botao2 = new JButton("Boto 2");

61

Escola Tcnica de Braslia Curso de Java I JButton botao3 = new JButton("Boto 3"); JButton botao4 = new JButton("Boto 4"); JButton botao5 = new JButton("Boto 5"); //Configura as propriedades de cada boto //boto 1 c.gridy=0;//primeira linha c.gridx=0;//primeira coluna layout.setConstraints(botao1,c); getContentPane().add(botao1); c.gridy=0;//primeira linha c.gridx=1;//segunda coluna layout.setConstraints(botao2,c); getContentPane().add(botao2); c.gridy=0;//primeira linha c.gridx=2;//terceira coluna layout.setConstraints(botao3,c); getContentPane().add(botao3); c.gridy=1;//segunda linha c.gridx=0;//primeira coluna c.gridwidth=3;//ocupar o espao de 3 colunas layout.setConstraints(botao4,c); getContentPane().add(botao4); c.gridy=2;//terceira linha c.gridx=1;//segunda coluna c.gridwidth=2; layout.setConstraints(botao5,c); getContentPane().add(botao5); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } public static void main (String args[]){ new Bag(); }} Extra: GridBagLayout

import javax.swing.*; import java.awt.*; public class FormularioCliente extends JFrame{ private JTextField fId, fNome; private JLabel lId, lNome; private JButton botaoOK, botaoCancela; private JPanel principal, painelBotoes; public FormularioCliente(){ this.setTitle("Formulrio de clientes"); 62

Escola Tcnica de Braslia Curso de Java I iniciaComponentes(); } private void iniciaComponentes(){ principal = new JPanel(); painelBotoes = new JPanel(); getContentPane().setLayout(new BorderLayout()); getContentPane().add(principal,BorderLayout.CENTER); getContentPane().add(painelBotoes,BorderLayout.SOUTH); painelBotoes.setLayout(new FlowLayout()); botaoOK = new JButton ("OK"); botaoCancela = new JButton("Cancela"); painelBotoes.add(botaoOK); painelBotoes.add(botaoCancela); principal.setLayout(new GridBagLayout()); fId=new JTextField(4); fNome = new JTextField(40); lId = new JLabel("CPF"); lNome = new JLabel ("Nome"); botaoOK = new JButton("0K"); botaoCancela = new JButton ("Cancela"); addEtiqueta(principal, lId, 1,2,1,1); addCampo(principal, fId, 1,3,2,1); addEtiqueta(principal, lNome,2,2,1,1); addCampo(principal, fNome,2,3,2,1); pack(); setVisible(true); } public void addCampo (JPanel painel, Component componente, int linha, int coluna, int largura, int altura){ GridBagConstraints posicao = new GridBagConstraints(); posicao.anchor=GridBagConstraints.WEST; add(painel,componente,linha,coluna,largura,altura,posicao); } public void addEtiqueta(JPanel painel, Component componente, int linha, int coluna, int largura, int altura){ GridBagConstraints posicao = new GridBagConstraints(); posicao.anchor = GridBagConstraints.CENTER; add(painel, componente,linha, coluna, largura, altura, posicao); } public void add (JPanel painel, Component componente, int linha, int coluna, int largura, int altura, GridBagConstraints posicao){ posicao.gridx=coluna; posicao.gridy=linha; posicao.gridwidth=largura; posicao.gridheight=altura; posicao.weightx=1; posicao.weighty=1; ((GridBagLayout)painel.getLayout()).setConstraints(componente,posic ao);

63

Escola Tcnica de Braslia painel.add(componente);

Curso de Java I

} public static void main (String args []){ FormularioCliente f = new FormularioCliente(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }

PARTE 3 - EVENTOS

64

Escola Tcnica de Braslia

Curso de Java I

EVENTOS
Cada ouvinte trata de um tipo especfico de evento. O pacote java.awt.event contm todos os ouvintes de eventos bsicos, assim como os objetos que representam eventos especficos. Essas interfaces de ouvinte so as mais comuns: ActionListener eventos de ao, que so gerados por um usurio que realiza uma ao sobre um componente. AdjustmentListener eventos de ajuste, que so gerados quando um componente ajustado, como quando o boto de uma barra de rolagem movimentado. FocusListener eventos de foco do teclado, que so gerados quando um componente (como um campo de texto) ganha ou perde foco. ItemListener eventos de item, que so gerados quando um item (como uma caixa de seleo) alterado. KeyListener eventos de teclado, que ocorrem quando um usurio entra com texto no teclado. MouseListener eventos de mouse, que so gerados por cliques do mouse, um mouse entrando ou saindo da rea do componente. MouseMotionListener eventos de movimento do mouse, que acompanham todo o movimento de um mouse sobre um componente. WindowListener eventos de janela. Uma classe pode implementar quantos ouvintes forem necessrios. Exemplo: public class Suspense extends JFrame implements ActionListener, TextListener{ // ...} CONFIGURANDO OS COMPONENTES Depois que um componente criado, voc pode chamar um dos seguintes mtodos no componente para associar um ouvinte a ele: addActionListener( ) Componente JButton, JCheckBox, JComboBox, JTextField, JRadioButton e JMenuItem. addFocusListener( ) Todos os componentes Swing. addItemListener( ) Componentes JButton, JCheckBox, JComboBox e JRadioButton. addKeyListener( ) Todos os componentes Swing. addMouseListener( ) Todos os componentes Swing. addMouseMotionListener( ) Todos os componentes Swing. addTextListener( ) Componentes JTextField e JTextArea. addWindowListener( ) Todos os componentes JWindow e JFrame. Exemplo: Cria um objeto JButton e associa um ouvinte de evento de ao a ele: JButton zap = new JButton(Zap); zap.addActionListener(this); Todos os mtodos add pegam um argumento: o objeto que est escutando eventos desse tipo. O uso de this indica que a classe atual o ouvinte de evento. Voc precisa especificar um objeto diferente, desde que sua classe implemente a interface de ouvinte correta. MTODOS DE TRATAMENTO DE EVENTO Quando associamos uma interface a uma classe, a classe precisa lidar com todos os mtodos contidos na interface. No caso dos ouvintes de evento, cada um dos mtodos chamado automaticamente pelo sistema de janela quando ocorre o correspondente evento do usurio.

65

Escola Tcnica de Braslia Curso de Java I A interface ActionListener possui apenas um mtodo: actionPerformed( ). Todas as classes que implementam ActionListener precisam ter um mtodo com uma estrutura semelhante a esta: public void actionPerformed(ActionEvent evt){ // tratamento do evento} Se somente um componente na interface grfica com o usurio do programa tiver um ouvinte para eventos de ao, esse mtodo actionPerformed( ) poder ser usado para responder a um evento gerado por esse componente. Se mais de um componente tiver um ouvinte de evento de ao teremos de usar o mtodo para descobrir detalhes sobre o componente que gerou o evento. ActionEvent e todos os outros objetos de evento fazem parte do pacote java.awt.event e so subclasses da classe EventObject. Cada mtodo de tratamento de evento recebe um objeto de evento de algum tipo. O mtodo getSource( ) do objeto pode ser usado para determinar o componente que enviou o evento. Exemplo: public void actionPerformed( ){ Object source = evt.getSource( );} O objeto retornado pelo mtodo getSource( ) pode ser comparado com os componentes por meio do operador = =. As instrues a seguir podem ser usadas dentro do exemplo actionPerformed( ) anterior: if (source = = quitButton) quitProgram( ); else if (source = = sortRecords) sortRecords( );} Se o objeto quitButton tiver gerado o evento, ser chamado o mtodo quitProgram( ). Se tiver sido o boto sortRecords a gerar o evento, ser chamado o mtodo sortRecords( ). Muitos mtodos de tratamento de eventos chamam um mtodo diferente para cada tipo de evento ou componente. Isso torna o mtodo de tratamento de evento mais fcil de ser lido. Alm disso, se houver mais de um mtodo de tratamento de evento em uma classe, cada um pode chamar os mesmos mtodos para realizar o trabalho. O operador instanceof pode ser usado em um mtodo de tratamento de evento para determinar que classe de componente gerou o evento. O exemplo a seguir pode ser usado em um programa com um boto e um campo de texto, cada um deles gerando um evento de ao: void actionPerformed(Action event){ Object source = event.getSource( ); if(source instanceof JTextField) calculeScore( );} else if (source instanceof JButton) quitProgram( ); }}

66

Escola Tcnica de Braslia Exemplo 1: ActionListener

Curso de Java I

import java.awt.event.*; import javax.swing.*; import java.awt.*; public class Alterar extends JFrame implements ActionListener { JButton b1 = new JButton("Eventos"); JButton b2 = new JButton("Java"); public Alterar() { super("Ttulo"); setSize(300,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); b1.addActionListener(this); b2.addActionListener(this); FlowLayout flow = new FlowLayout(); setLayout(flow); add(b1); add(b2); setVisible(true); } public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if (source == b1) { setTitle("Eventos"); } else if (source == b2) { setTitle("Java"); } repaint(); } public static void main(String[] arguments) { Alterar a = new Alterar(); } } O mtodo getSource( ) do objeto evt determina a origem do evento. Se for igual ao boto b1, o ttulo do frame definido como Eventos; se for igual a b2, o ttulo definido como Java. Uma chamada a repaint( ) necessria para que o frame seja redesenhado depois de qualquer mudana de ttulo que possa ter ocorrido no mtodo.

67

Escola Tcnica de Braslia TRABALHANDO COM MTODOS

Curso de Java I

O mtodo getSource( ) pode ser usado em qualquer objeto de evento para determinar qual objeto gerou o evento.

ActionListener
Os eventos de ao ocorrem quando um usurio completa uma ao usando componentes como botes, caixas de seleo, itens de menu, campos de texto e botes de opo. Uma classe precisa implementar a interface ActionListener para poder tratar desses eventos. Alm do mais, o mtodo addActionListener( ) precisa ser chamado em cada componente que deva gerar um evento de ao a menos que voc queira ignorar os eventos de ao desse componente. O mtodo actionPerformed(ActionEvent) o nico mtodo da interface ActionListener. Ele tem o seguinte formato: public void actionPerformed(ActionEvent event){ // ...} Alm do mtodo getSource( ), voc pode usar o mtodo getActionCommand( ) no objeto ActionEvent para descobrir mais informaes sobre a origem do evento. O comando de ao, por padro, o texto associado ao componente, como o rtulo em um boto. Podemos definir um comando de ao diferente para um componente, chamando seu mtodo setActionCommand(String). O argumento de string dever ser o texto desejado do comando de ao. Por exemplo, as instrues a seguir criam um boto e um item de menu, dando a ambos o comando de ao Sort Files: JButton sort = new JButton(Sort); JMenuItem menuSort = new JMenuItem( ); sort.setActionCommand(Sort Files); menuSort.setActionCommand(Sort Files); Extra: ActionListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemplo0903 extends JFrame implements ActionListener { JButton b1,b2; ImageIcon icone = new ImageIcon("C:/Imagens/busca.gif"); public Exemplo0903() { setTitle("Inserindo botoes na janela"); setSize(350,100); setLocation(50,50); getContentPane().setBackground(new Color(180,180,180)); b1 = new JButton("Busca",icone); b1.setHorizontalTextPosition(AbstractButton.LEFT);//posicao texto // texto b1.setBackground(new Color(100,180,180));//cor de fundo do boto b1.setVerticalTextPosition(AbstractButton.TOP);//posicao do

do

68

Escola Tcnica de Braslia Curso de Java I b1.setForeground(Color.black);//cor do titulo do boto b1.setFont(new Font("ScriptS",Font.BOLD,20)); //define a fonte do boto b1.setEnabled(true); b1.addActionListener(this); b1.setToolTipText("Pressione aqui para realizar uma busca"); b1.setMnemonic(KeyEvent.VK_B); // b1.setActionCommand("botao1");//define o nome da acao b2 = new JButton("Cancelar"); b2.addActionListener(this); b2.setMnemonic(KeyEvent.VK_C); b2.setToolTipText("Pressione aqui para cancelar"); getContentPane().setLayout(new FlowLayout()); getContentPane().add(b1); getContentPane().add(b2); } public void actionPerformed(ActionEvent e) { // metodo implementado pelo ActionListener if (e.getSource()==b1) { JOptionPane.showMessageDialog(null,"Boto pressionado"); } if (e.getSource()==b2) { JOptionPane.showMessageDialog(null,"Boto pressionado"); } } public static void main(String args[]) { JFrame Janela = new Exemplo0903(); Janela.show(); //para fechar a janela WindowListener x = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; Janela.addWindowListener(x); } }

69

Escola Tcnica de Braslia Extra: ActionListener

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; class Calculadora1 extends JFrame implements ActionListener{ JLabel L1,L2,L3; JButton B1, B2, B3, B4, B5; JTextField T1,T2,T3; Calculadora1(){ setTitle("Calculadora"); setSize(350,90); setLocation(50,50); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(150,250,350,90); getContentPane().setBackground(new Color(150,150,150)); getContentPane().setLayout(new GridLayout(3,4)); L1 = new JLabel("Num.1"); L1.setForeground(Color.black); L1.setFont(new Font("",Font.BOLD,14)); L2 = new JLabel("Num.2"); L2.setForeground(Color.black); L2.setFont(new Font("",Font.BOLD,14)); L3 = new JLabel("Total"); L3.setFont(new Font("",Font.BOLD,14)); B1 = new JButton ("+"); B1.addActionListener(this); B2 = new JButton ("-"); B2.addActionListener(this); B3 = new JButton ("x"); B3.addActionListener(this); B4 = new JButton ("/"); B4.addActionListener(this); B5 = new JButton ("Limpar"); B5.addActionListener(this); B5.setBackground(Color.black); B5.setForeground(Color.white); T1 = new JTextField(); T2 = new JTextField(); T3 = new JTextField(); T3.setEditable(false); //define que o textField como somente leitura getContentPane().add(L1); getContentPane().add(T1); getContentPane().add(B1); getContentPane().add(B2); getContentPane().add(L2); getContentPane().add(T2); getContentPane().add(B3); getContentPane().add(B4); getContentPane().add(L3); getContentPane().add(T3); getContentPane().add(B5);

70

Escola Tcnica de Braslia setVisible(true); }

Curso de Java I

public void actionPerformed(ActionEvent e) { if (e.getSource()==B5) { T1.setText(""); T2.setText(""); T3.setText(""); return; } float N1=0,N2=0,result=0; try { N1 = Float.parseFloat(T1.getText()); N2 = Float.parseFloat(T2.getText()); } catch (NumberFormatException erro) { T3.setText("Erro"); return; } if (e.getSource()==B1) { result = N1 + N2; } if (e.getSource()==B2) { result = N1 - N2; } if (e.getSource()==B3) { result = N1 * N2; } if (e.getSource()==B4) { result = N1 / N2; } T3.setText(""+result); } public static void main(String args[]){ JFrame janela=new Calculadora1(); } }

71

Escola Tcnica de Braslia Extra: ActionListener

Curso de Java I

import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Calculadora2 extends JFrame implements ActionListener{ JLabel l1 = new JLabel("Nmero 1"); JLabel l2 = new JLabel("Nmero 2"); JLabel l3 = new JLabel("Resultado"); JTextField t1 = new JTextField(25); JTextField t2 = new JTextField(25); JButton b1 = new JButton("Somar"); JButton b2 = new JButton("Subtrair"); JButton b3 = new JButton("Dividir"); JButton b4 = new JButton("Multiplicar"); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JPanel p3 = new JPanel(); Double t,n1,n2; public Calculadora2(){ super("Calculadora"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); p1.setLayout(new GridLayout(2,2,-200,0)); p1.add(l1);p1.add(t1); p1.add(l2);p1.add(t2); p2.add(b1);p2.add(b2);p2.add(b3);p2.add(b4); p3.add(l3); BorderLayout borda = new BorderLayout(); setLayout(borda); add(p1,"North"); add(p2,"Center"); add(p3,"South"); pack(); setVisible(true); } public void actionPerformed(ActionEvent evt){ Object source = evt.getSource(); if(source==b1){ try{ n1=Double.parseDouble(t1.getText()); 72

Escola Tcnica de Braslia Curso de Java I n2=Double.parseDouble(t2.getText()); }catch (NumberFormatException ex){ JOptionPane.showMessageDialog(null,ex.getMessage(),"Erro",JOptionPa ne.ERROR_MESSAGE); } t=n1+n2; l3.setText("Resultado:"+t); } else if(source==b2){ try{ n1=Double.parseDouble(t1.getText()); n2=Double.parseDouble(t2.getText()); }catch (NumberFormatException ex){ JOptionPane.showMessageDialog(null,ex.getMessage(),"Erro",JOptionPa ne.ERROR_MESSAGE); } t=n1-n2; l3.setText("Resultado:"+t); } else if(source==b3){ try{ n1=Double.parseDouble(t1.getText()); n2=Double.parseDouble(t2.getText()); }catch (NumberFormatException ex){ JOptionPane.showMessageDialog(null,ex.getMessage(),"Erro",JOptionPa ne.ERROR_MESSAGE); } t=n1/n2; l3.setText("Resultado:"+t); } else if(source==b4){ try{ n1=Double.parseDouble(t1.getText()); n2=Double.parseDouble(t2.getText()); }catch (NumberFormatException ex){ JOptionPane.showMessageDialog(null,ex.getMessage(),"Erro",JOptionPa ne.ERROR_MESSAGE); } t=n1*n2; l3.setText("Resultado:"+t); } } public static void main(String args[]){ Calculadora2 calc = new Calculadora2(); } }

73

Escola Tcnica de Braslia Extra: ListSelectionListener, ActionListener

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class Exemplo0907 extends JFrame implements ListSelectionListener, ActionListener{ JLabel L1; JTextField T1; JList lista; JButton bquant,bindice,bclear; DefaultListModel listModel; public Exemplo0907(){ setLocation(300,100); setTitle("Uso do JList"); setSize(200,250); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); T1 = new JTextField(); T1.addActionListener(this); L1 = new JLabel("Sem selecao"); L1.setForeground(Color.black); bquant = new JButton("Quantidade de itens"); bquant.addActionListener(this); bindice = new JButton("Indice selecionado"); bindice.addActionListener(this); bclear = new JButton("Remove item"); bclear.addActionListener(this); listModel = new DefaultListModel(); listModel.addElement("Banana"); listModel.addElement("Pera"); listModel.addElement("Maa"); listModel.addElement("Uva"); lista = new JList(listModel); lista.addListSelectionListener(this); //registra a lista JScrollPane Painel = new JScrollPane(lista); getContentPane().setLayout(new GridLayout(6,1)); getContentPane().add(L1); getContentPane().add(T1); getContentPane().add(Painel); getContentPane().add(bquant); getContentPane().add(bindice);

74

Escola Tcnica de Braslia Curso de Java I getContentPane().add(bclear); setVisible(true); } public void actionPerformed(ActionEvent e){ if (e.getSource()==T1) { listModel.addElement(T1.getText()); //adiciona itens a lista T1.setText(""); } if (e.getSource()==bquant) T1.setText("Quantidade: " + listModel.getSize()); if (e.getSource()==bindice) T1.setText("Indice selecionado: " + lista.getSelectedIndex()); if (e.getSource()==bclear) { int index = lista.getSelectedIndex(); L1.setText("Removido : "+ lista.getSelectedValue()); listModel.remove(index); } } public void valueChanged(ListSelectionEvent e) { L1.setText("Selecionado : "+ lista.getSelectedValue()); } public static void main(String args[]) { JFrame Janela = new Exemplo0907(); } }

75

Escola Tcnica de Braslia Extra: ActionListener

Curso de Java I

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemplo0912 extends JFrame implements ActionListener { JButton B1,B2,B3; JLabel L1; public Exemplo0912() { setBackground(new Color(190,190,190)); setSize(400,100); setTitle("Caixas de confirmacao"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER)); L1=new JLabel("Resposta: "); B1=new JButton("Sim e Nao"); B1.addActionListener(this); B2=new JButton("Sim, Nao e Cancelar"); B2.addActionListener(this); B3=new JButton("Ok e Cancelar"); B3.addActionListener(this); getContentPane().add(B1); getContentPane().add(B2); getContentPane().add(B3); getContentPane().add(L1); setVisible(true); } public void actionPerformed(ActionEvent e){ int resposta=0; if(e.getSource()==B1)

76

Escola Tcnica de Braslia Curso de Java I resposta=JOptionPane.showConfirmDialog(null,"Erro ao acessar arquivo. Tentar novamente?","Erro de arquivo",JOptionPane.YES_NO_OPTION,JOptionPane.ERROR_MESSAGE); if(e.getSource()==B2) resposta=JOptionPane.showConfirmDialog(null,"Deseja salvar as alteracoes?","Salvar o arquivo",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE); if(e.getSource()==B3) resposta=JOptionPane.showConfirmDialog(null,"Deseja abrir o arquivo?","Abrir arquivo",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE); switch(resposta) { case 0: L1.setText("Pressionado o boto Yes / Ok"); break; case 1: L1.setText("Pressionado o boto No"); break; case 2: L1.setText("Pressionado o boto Cancel"); break; } } public static void main(String args[]){ JFrame Janela = new Exemplo0912(); } } Extra: ActionListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemplo0916 extends JFrame implements ActionListener{ JTextArea TA1,TA2; JTextField T1; JButton B1,B2; Exemplo0916() { setSize(480,280); setTitle("Uso do JTextArea"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER)); T1 = new JTextField(40); T1.addActionListener(this); B1 = new JButton("Copia Tudo");

77

Escola Tcnica de Braslia Curso de Java I B1.addActionListener(this); B2 = new JButton("Copia Selecao"); B2.addActionListener(this); TA1 = new JTextArea("Editor de texto:\n",5,40); TA2 = new JTextArea(5,40); JScrollPane painel1 = new JScrollPane(TA1); JScrollPane painel2 = new JScrollPane(TA2); getContentPane().add(painel1); getContentPane().add(T1); getContentPane().add(B1); getContentPane().add(B2); getContentPane().add(painel2); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource()==T1) //ao pressionar ENTER no JTextField { TA1.append(T1.getText()); T1.setText(""); } if (e.getSource()==B1) //copia contedo de TA1 em TA2 TA2.setText(TA1.getText()); if (e.getSource()==B2) //copia selecao TA2.setText(TA1.getSelectedText()); } public static void main(String args[]) { JFrame Janela = new Exemplo0916(); } } Extra: ActionListener

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemplo0917 extends JFrame implements ActionListener { JMenuBar M1; JTextField T1; JMenu menuCadastro, menuRelatorio; JMenuItem micliente, mifornecedor, misair, mirlcliente, mirlfornecedor; public static void main(String args[]) { JFrame Janela=new Exemplo0917(); } Exemplo0917() { setTitle("Uso de Menus"); setSize(270,130); setLocation(50,50);

78

Escola Tcnica de Braslia Curso de Java I setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setBackground(new Color(0,128,128)); T1 = new JTextField(); M1 = new JMenuBar(); //cria a barra de menus menuCadastro = new JMenu("Cadastro"); //cria um novo menu menuCadastro.setMnemonic(KeyEvent.VK_C);//ALT + C menuRelatorio = new JMenu("Relatorios"); micliente = new JMenuItem ("Cliente");//cria um item micliente.addActionListener(this); micliente.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEven t.CTRL_MASK)); //CTRL + C mifornecedor = new JMenuItem ("Fornecedor"); mifornecedor.addActionListener(this); misair = new JMenuItem ("Sair do sistema"); misair.addActionListener(this); menuCadastro.add(micliente);//adiciona o item ao menu menuCadastro.add(mifornecedor); menuCadastro.add(misair); mirlcliente = new JMenuItem ("Relao de Clientes"); mirlcliente.addActionListener(this); mirlfornecedor = new JMenuItem ("Relao de Fornecedores"); mirlfornecedor.addActionListener(this); menuRelatorio.add(mirlcliente); menuRelatorio.add(mirlfornecedor); M1.add(menuCadastro);//adiciona o menu na barra de menus M1.add(menuRelatorio); setJMenuBar(M1);//define a barra de menus como padrao getContentPane().add(T1); setVisible(true); } public void actionPerformed(ActionEvent e){ if (e.getSource()==micliente) T1.setText("Escolhido o item Cliente"); if (e.getSource()==mifornecedor) T1.setText("Escolhido o item Fornecedor"); if (e.getSource()==mirlcliente) T1.setText("Escolhido o item Relao de Clientes"); if (e.getSource()==mirlfornecedor) T1.setText("Escolhido o item Relao de Fornecedores"); if (e.getSource()==misair) System.exit(0); } }

79

Escola Tcnica de Braslia Extra: ActionListener

Curso de Java I

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ListTest extends JFrame implements ActionListener{ private JList compra, sel; private Button b1,b2; private String itens[]={"Ford Ka","Ford Fiesta","Ford Fiesta Sedan", "Ford Fiesta Trail","Ford Focus","Ford Focus Sedan","Ford Fusion"}; public ListTest() { super("Selecione seu carro"); setSize(300,180); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); p1.setLayout(new FlowLayout()); p2.setLayout(new BoxLayout(p2,BoxLayout.Y_AXIS)); compra = new JList(itens); compra.setVisibleRowCount(5); compra.setFixedCellWidth(110); compra.setFixedCellHeight(20); compra.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); sel = new JList(); sel.setVisibleRowCount(5); sel.setFixedCellWidth(110); sel.setFixedCellHeight(20); b1=new Button(">>"); 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()]); } }

FocusListener
Os 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

ItemListener
Ocorrem 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

KeyListener
Ocorrem 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(); } }

MouseListener
Os 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

MouseMotionListener
Os 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

WindowListener
Os 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()<96 || 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<25;i++) System.out.println();} else{ try{ rs=meuState.executeQuery(t1.getText()); while(rs.next()) { try{System.out.println(rs.getString("codigo"));} catch(SQLException erro1){} try{System.out.println(rs.getString("titulo"));} catch(SQLException erro2){} try{System.out.println(rs.getString("genero"));} catch(SQLException erro3){} try{System.out.println(rs.getString("produtora"));} catch(SQLException erro4){} try{System.out.println(rs.getString("datacompra"));} catch(SQLException erro5){} System.out.println(); } t2.setText("Comando SQL executado com sucesso!");} catch(SQLException erro){ t2.setText("Comando SQL invlido!"); } }}}

117

Escola Tcnica de Braslia Exemplo 4.

Curso de Java I

import java.sql.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; class Exemplo1303 extends JFrame implements ActionListener{ JLabel L1,L2,L3,L4,L5; JButton b1,b2,b3,b4,b5,b6; JTextField tfCodigo,tfTitulo,tfGenero,tfProdutora,tfDatcom; JPanel p1 = new JPanel(); ResultSet rs; public static void main(String args[]) { JFrame janela = new Exemplo1303(); janela.setUndecorated(true); janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setVisible(true); } Exemplo1303() { p1.setLayout(new FlowLayout(FlowLayout.LEFT)); L1 = new JLabel("Cdigo "); L2 = new JLabel("Ttulo"); L3 = new JLabel("Gnero"); L4 = new JLabel("Produtora"); L5 = new JLabel("Data de Compra "); tfCodigo = new JTextField(10); tfCodigo.addActionListener(this); tfTitulo = new JTextField(35); tfGenero = new JTextField(10); tfProdutora = new JTextField(15); tfDatcom = new JTextField(8); b1=new JButton("Prximo"); b2=new JButton("Anterior"); b3=new JButton("Primeiro"); b4=new JButton("ltimo"); b5=new JButton("+10 registros"); b6=new JButton("-10 registros"); b1.setBackground(new Color(180,180,250)); b2.setBackground(new Color(180,180,250)); b3.setBackground(new Color(180,180,250)); b4.setBackground(new Color(180,180,250)); b5.setBackground(new Color(180,180,250)); 118

Escola Tcnica de Braslia Curso de Java I b6.setBackground(new Color(180,180,250)); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); b5.addActionListener(this); b6.addActionListener(this); p1.add(L1); p1.add(tfCodigo); p1.add(L2); p1.add(tfTitulo); p1.add(L3); p1.add(tfGenero); p1.add(L4); p1.add(tfProdutora); p1.add(L5); p1.add(tfDatcom); p1.add(b3); p1.add(b2); p1.add(b1); p1.add(b4);p1.add(b5);p1.add(b6); getContentPane().add(p1); setTitle("Navegao da tabela de Filmes"); setSize(630,120); setResizable(false); 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); //TYPE_SCROLL_SENSITIVE - navegao nos dois sentidos. permitida a alterao em tempo de execuo //CONCUR_READ_ONLY - somente leitura ou CONCUR_UPDATABLE leitura e atualizao rs = MeuState.executeQuery("SELECT * FROM Filmes"); rs.first();//posiciona o objeto rs no primeiro registro atualizaCampos(); } catch(ClassNotFoundException ex) { System.out.println("Driver JDBC-ODBC no encontrado!"); } catch(SQLException ex) { System.out.println("Problemas na conexao com a fonte de dados"); } } public void actionPerformed(ActionEvent e) { try { if (e.getSource()==b1) rs.next(); if (e.getSource()==b2) rs.previous(); if (e.getSource()==b3)

119

Escola Tcnica de Braslia rs.first(); if (e.getSource()==b4) rs.last(); if (e.getSource()==b5) rs.relative(10); if (e.getSource()==b6) rs.relative(-10); atualizaCampos(); } catch(SQLException ex) { // tratamento de erros durante a navegao } }

Curso de Java I

public void atualizaCampos() { try { tfCodigo.setText(rs.getString("Ficodigo"));//os nomes dos campos deveram ser iguais os titulos dos campos na tabela filmes tfTitulo.setText(rs.getString("Finome")); tfGenero.setText(rs.getString("Figenero")); tfProdutora.setText(rs.getString("Fiprodut")); tfDatcom.setText(""+rs.getDate("Fidatcom")); } catch(SQLException ex) { } } }

120

Escola Tcnica de Braslia createStatement e ResultSet

Curso de Java I

As variveis possveis de inicializao de um objeto createStatement so: createStatement() cria um objeto no navegvel, cuja ordem de navegao permitida apenas para frente createStatement(navegao, ao) cria um objeto com os parmetros fornecidos, os quais vo definir o comportamento do objeto Statement, em que: Navegao pode ser: TYPE_FORWARD_ONLY - navegao apenas para frente TYPE_SCROLL_INSENSITIVE navegao nos dois sentidos TYPE_SCROLL_SENSITIVE navegao nos dois sentidos Os ltimos dois tipos de navegao so similares. A diferena que as alteraes no contedo da tabela realizadas em tempo de execuo no refletem no tipo INSENSITIVE Ao pode ser: o CONCUR_READ_ONLY somente leitura o CONCUR_UPDATABLE leitura e atualizao Movimentao em Registros: o rs.first() posiciona no primeiro registro o rs.last() posiciona no ltimo registro o rs.next() posiciona no prximo registro o rs.previous() posiciona no registro anterior o rs.absolute(5) coloca o ponteiro na quinta posio a partir do primeiro registro o rs.absolute(-5) coloca o ponteiro na quinta posio anterior a partir do ltimo registro o rs.relative(5) coloca o ponteiro na quinta posio posterior posio atual o rs.relative(-5) coloca o ponteiro na quinta posio anterior posio atual o rs.beforeFirst() posiciona o ponteiro antes do incio do primeiro registro o rs.afterLast() posiciona o ponteiro depois do ltimo registro o rs.isBeforeFirst() usado para verificar se o ponteiro est posicionado no nicio dos resgistros o rs.isAfterLanst() usado para verificar se o ponteiro est posicionado no final dos registros

121

Escola Tcnica de Braslia Exemplo 5.

Curso de Java I

import java.sql.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class Exemplo1304 extends JFrame{ Connection conexao; JTable tab; public static void main(String args[]) { JFrame Janela = new Exemplo1304(); Janela.show(); WindowListener x = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; Janela.addWindowListener(x); } public Exemplo1304() { setTitle( "Tabela de Filmes" ); setSize(600,300); String url = "jdbc:odbc:MeuBanco"; try { Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); conexao = DriverManager.getConnection(url, "", "" ); } catch (ClassNotFoundException cne) { System.out.println("Erro ao carregar o driver JDBC/ODBC"); } catch (SQLException sqlne ) {

122

Escola Tcnica de Braslia System.out.println("Problemas na Conexo"); } buscaTabela(); }

Curso de Java I

private void buscaTabela() { Statement st; ResultSet res; try { Vector cabecalho = new Vector(); Vector linhas = new Vector(); st = conexao.createStatement(); res = st.executeQuery("SELECT * FROM Filmes"); res.next(); // busca os cabealhos ResultSetMetaData rsmd = res.getMetaData(); for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) cabecalho.addElement( rsmd.getColumnName( i ) ); // busca dados das linhas do { linhas.addElement( proximaLinha( res, rsmd ) ); } while ( res.next() ); // Mostra a tabela com cabealhos e registros tab = new JTable( linhas, cabecalho ); JScrollPane scroller = new JScrollPane( tab ); getContentPane().add(scroller, BorderLayout.CENTER); validate(); st.close(); } catch (SQLException sqlex) { } } private Vector proximaLinha(ResultSet rs, ResultSetMetaData rsmd ) { Vector LinhaAtual = new Vector(); try { for ( int i = 1; i <= rsmd.getColumnCount(); ++i ) switch( rsmd.getColumnType(i)) { case Types.VARCHAR: LinhaAtual.addElement(rs.getString(i));break; case Types.TIMESTAMP: LinhaAtual.addElement(rs.getDate(i));break; }

123

Escola Tcnica de Braslia } catch(SQLException e) {} return LinhaAtual; } }

Curso de Java I

Explicao: Vetor cabecalho = new Vetor() declara cabecalho como um objeto do tipo vetor Vetor linhas = new Vetor() armazena todas as linhas que vo compor a tabela ResultSetMetaData rsmd = res.getMetaData() res o objeto que contm o resultado da consulta. Alm do resultado res mantm inclusive o nome das colunas dos campos da tabela consultada. Essa linha contm a utilizao da interface ResultSetMetaData usada para realizar a leitura de ipos de dados e propriedades armazenadas em um objeto do tipo ResultSet A interface ResultSetMetaData possui uma srie de mtodos dentre os quais se destacam: o getColumnName() usado para retornar o nome de uma coluna o getColumnType() usado para descobrir o tipo de dado armazenado no campo o getColumnCount() retorna o nmero de colunas existentes no objeto o addElement adio dos elementos

124

Escola Tcnica de Braslia Exemplo 6.

Curso de Java I

import java.sql.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; class Exemplo1305 extends JFrame implements ActionListener{ JLabel label1,label2,label3,label4,label5; JButton btGravar, btAlterar,btExcluir,btNovo,btLocalizar,btCancelar; static JTextField tfCodigo,tfTitulo,tfGenero,tfProdutora,tfDataCompra; JPanel painel1 = new JPanel(); ResultSet resultSet; Statement statement; public static void main(String args[]) { JFrame janela = new Exemplo1305(); janela.setUndecorated(true); janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setVisible(true); } Exemplo1305() { painel1.setLayout(new FlowLayout(FlowLayout.LEFT)); label1 = new JLabel("Cdigo "); label2 = new JLabel("Ttulo"); label3 = new JLabel("Gnero"); label4 = new JLabel("Produtora"); label5 = new JLabel("Data de Compra "); tfCodigo = new JTextField(10); tfCodigo.addActionListener(this); tfTitulo = new JTextField(35); tfGenero = new JTextField(10); tfProdutora = new JTextField(15); tfDataCompra = new JTextField(8); btGravar=new JButton("Gravar"); btAlterar=new JButton("Alterar"); btExcluir=new JButton("Excluir"); btLocalizar=new JButton("Localizar"); btNovo=new JButton("Novo"); btCancelar=new JButton("Cancelar"); btGravar.setBackground(new Color(180,180,250)); btAlterar.setBackground(new Color(180,180,250)); btExcluir.setBackground(new Color(180,180,250)); btLocalizar.setBackground(new Color(180,180,250)); btNovo.setBackground(new Color(180,180,250));

125

Escola Tcnica de Braslia Curso de Java I btCancelar.setBackground(new Color(180,180,250)); btGravar.addActionListener(this); btAlterar.addActionListener(this); btExcluir.addActionListener(this); btLocalizar.addActionListener(this); btNovo.addActionListener(this); btCancelar.addActionListener(this); painel1.add(label1); painel1.add(tfCodigo); painel1.add(label2); painel1.add(tfTitulo); painel1.add(label3); painel1.add(tfGenero); painel1.add(label4); painel1.add(tfProdutora); painel1.add(label5); painel1.add(tfDataCompra); painel1.add(btNovo); painel1.add(btLocalizar); painel1.add(btGravar);painel1.add(btAlterar); painel1.add(btExcluir);painel1.add(btCancelar); getContentPane().add(painel1); setTitle("Cadastramento de Filmes"); setSize(610,120); setResizable(false); setBotoes(true,true,false,false,false,false); carregaResultSet(); } public void actionPerformed(ActionEvent e){ if (e.getSource()==btNovo) { limpaCampos(); setBotoes(false,false,true,false,false,true); return; } if (e.getSource()==btCancelar) { limpaCampos(); setBotoes(true,true,false,false,false,false); return; } if (e.getSource()==btGravar) { try { String sql = "INSERT FILMES(codigo,titulo,genero,"+ "produtora,datacompra)values('"+ tfCodigo.getText()+"','"+ tfTitulo.getText()+"','"+ tfGenero.getText()+"','"+ tfProdutora.getText()+"','"+ tfDataCompra.getText()+"')"; statement.executeUpdate(sql); JOptionPane.showMessageDialog(null, "Gravao realizada com sucesso!"); setBotoes(true,true,false,true,true,false);

INTO

126

Escola Tcnica de Braslia

Curso de Java I

} catch(SQLException erro) { if(erro.getMessage().equals("General erro")) JOptionPane.showMessageDialog(null, "Filme j Cadastrado!"); else JOptionPane.showMessageDialog(null,"Data Invlida!"); } carregaResultSet(); } //--------------------------Final da Incluso ------------------------------if (e.getSource()==btAlterar) { try { String sql = "UPDATE Filmes SET"+ "codigo='"+tfCodigo.getText()+"',"+ "titulo='"+tfTitulo.getText()+"',"+ "genero='"+tfGenero.getText()+"',"+ "produtora='"+tfProdutora.getText()+"',"+ "datacompra='"+tfDataCompra.getText()+"'"+ "WHERE codigo ='"+tfCodigo.getText()+"'"; int r = statement.executeUpdate(sql); if(r==1) JOptionPane.showMessageDialog(null, "Alterao realizada com sucesso"); else JOptionPane.showMessageDialog(null,"Problemas na alterao."); setBotoes(true,true,false,true,true,false); } catch(SQLException erro) { JOptionPane.showMessageDialog(null, invlida!"); } carregaResultSet(); } //------------------------------Final da Alterao --------------------------------if(e.getSource()==btExcluir) //Excluir um registro { try { String sql = "SELECT codigo, titulo from filmes where codigo= '"+tfCodigo.getText()+"'"; resultSet = statement.executeQuery(sql);

"Data

127

Escola Tcnica de Braslia Curso de Java I String nome = ""; try { resultSet.next(); nome="Deletar o Filme:"+resultSet.getString("titulo"); } catch(SQLException ex1) { JOptionPane.showMessageDialog(null,"Filme no encontrado!"); carregaResultSet(); return; } int n=JOptionPane.showConfirmDialog(null,nome," ",JOptionPane.YES_NO_OPTION); if(n==JOptionPane.YES_OPTION) { sql="Delete from filmes where codigo='"+ tfCodigo.getText()+"'"; int r = statement.executeUpdate(sql); if(r==1) JOptionPane.showMessageDialog(null,"Excluso sucesso"); else realizada com

JOptionPane.showMessageDialog(null,"No foi possvel filme"); limpaCampos();

excluir

setBotoes(true,true,false,false,false,false); } } catch(SQLException erro){} carregaResultSet(); } //------------------------------Final da Excluso ------------------------------------if (e.getSource()==btLocalizar || e.getSource()==tfCodigo) { try { String SQL = "SELECT * FROM Filmes Where Ficodigo = '"+tfCodigo.getText()+"'"; resultSet = statement.executeQuery(SQL); resultSet.next(); atualizaCampos(); setBotoes(true,true,false,true,true,false); } catch(SQLException ex) {

128

Escola Tcnica de Braslia Curso de Java I JOptionPane.showMessageDialog(null,"Filme nao Encontrado!"); carregaResultSet(); return; } } //---------------------------------------Final da localizao-----------------------------------------------} public void carregaResultSet(){ String url = "jdbc:odbc:MeuBanco"; try { Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); Connection minhaConexao = DriverManager.getConnection(url); statement = minhaConexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); resultSet = statement.executeQuery("SELECT * FROM Filmes"); } catch(ClassNotFoundException ex) { System.out.println("Driver JDBC-ODBC no encontrado!"); } catch(SQLException ex) { System.out.println("Problemas na conexao com a fonte de dados"); } } /*em todas as operaes realizadas com a tabela no banco de dados usados o mesmo objeto,declarado como resultSet. Este objeto armazena o resultado da operao SQL em memria. Por esse motivo, a cada operao realizada fisicamente no banco de dados pelos comandos SQL, o objeto resultSet fica com contedo diferente da tabela do banco de dados. Ento, todas as vezes que o banco de dados alterado, o objeto resultSet precisa ser recarregado com todos os registros da tabela. O mtodo carregaResultSet responsvel por realizar a conexo com o banco de dados e incializar o objeto resultSet com todos os registros pelo comando "SELECT * FROM FILMES". */ public static void limpaCampos() { tfCodigo.setText(""); tfTitulo.setText(""); tfGenero.setText(""); tfProdutora.setText(""); tfDataCompra.setText(""); } public void atualizaCampos() { try {

129

Escola Tcnica de Braslia Curso de Java I tfCodigo.setText(resultSet.getString("Ficodigo")); tfTitulo.setText(resultSet.getString("Finome")); tfGenero.setText(resultSet.getString("Figenero")); tfProdutora.setText(resultSet.getString("Fiprodut")); tfDataCompra.setText(""+resultSet.getDate("Fidatcom")); } catch(SQLException ex) { } } public void setBotoes(boolean bNovo,boolean bLocalizar,boolean bGravar, boolean bAlterar, boolean bExcluir, boolean bCancelar) { btNovo.setEnabled(bNovo); btLocalizar.setEnabled(bLocalizar); btGravar.setEnabled(bGravar); btAlterar.setEnabled(bAlterar); btExcluir.setEnabled(bExcluir); btCancelar.setEnabled(bCancelar); } }

130

Você também pode gostar