Java Interface SWING

download Java Interface SWING

of 80

Transcript of Java Interface SWING

Java e Interfaces GrficasUniversidade Catlica de Braslia Especializao em Engenharia de Software abril / 2006

Material elaborado colaborativamente por: Aliomar Mariano Rgo Fernando Goulart Jorge Farias Leila de Ftima Carvalho Marcos Mota Costa

1

Java e Interfaces GrficasContexto:ApresentaoDesktop WEB Mvel

Negcio

Dados ou Persistncia

Dados

Dados

_____________ _____________ _____________ _____________ ____________

Outra Aplicao ou Legado

2

Java fornece um suporte muito interessante para construo de aplicaes grficas por meio de duas interfaces: AWT (Abstract Windowing Toolkit) . Inicialmente o nico tipo de ferramentas, at a verso 1.1. Todas as classes esto no pacote java.awt. bastante incompleta: faltam Table, TabbedPane, Slider etc. Dependente de plataforma (peermodel) e comportamento heterogneo. Swing ou JFC (Java Foundation Class) surgiu na verso JDK1.2. Substituiu AWT, mas ainda compartilham partes fundamentais (como eventos). Atualmente as classes esto no pacote javax.swing. So lightweight components, independentes de plataforma.3

Qual a relao entre AWT e JFC ? H compatibilidade entre os componentes AWT e Swing, para que no haja conflito de verses. H componentes Swing que herdam de componentes AWT. Exemplo: o componente JFrame, que fornece a janela principal da aplicao, derivado da classe Frame. Os nomes dos componentes JFC sempre comeam com J. No mais utilizar os componentes AWT: usar os componentes correspondentes criados no Swing. So dois grandes exemplos de reuso: no necessrio reescrever cdigo, mas apenas utilizar as funcionalidades implementadas nesses pacotes.4

Os 3 elementos AWT/Swing1 - Componentes grficos: so elementos que o usurio manipula com omouse ou com o teclado.

5

outros componentes grficos:

6

mais componentes grficos:

7

Os 3 elementos AWT/Swing2 - Gerenciadores de layout: governam a maneira pelaqual os componentes aparecem na tela.

3 - Eventos: assinalam aes do usurio consideradasimportantes, como o click do mouse em um boto. Java adota o tipo de programao dirigida por eventos: um evento ocorrido tratado por event listener, uma categoria especial de classes.

8

A hierarquia

9

JWindow

Window

Dialog

JDialog

Frame Component Container JLabel

JFrame

AbstractButton

JButton

JComponent JPanel

JRootPane10

Classes Bsicas (Color, Font, etc...)Color: atribui cor (frente ou fundo) ao componente,atravs da composio primria de vermelho, verde e azul (padro RGB). Use: 1 - o construtor Color(int red, int green, int blue); 2 - ou as Constantes (tambm em minsculas): BLACK BLUE CYAN DARK_GRAY GRAY GREEN LIGHT_GRAY MAGENTA ORANGE PINK RED WHITE YELLOW Exemplo: Color c = new Color (255, 51, 0); //red

Font: determina a fonte (letra) em que os rtulos sero escritos. Use o construtorFont(String nome, int estilo, int tamanho). Estilo: PLAIN, BOLD, ITALIC(use o + para juntar estilos)

Exemplo: Font f = new Font(arial, Font.PLAIN, 14);

11

JComponent

totalmente Swing/JFC

1 - Uma aparncia (pluggable look and feel - plaf) que pode ser especificada peloprogramador ou (opcionalmente) selecionada pelo usurio em tempo de execuo. Site para download:http://www.l2fprod.com/javootoo.com/plaf/synthetica/index.php.

12

JComponent2 - Diversos tipos de borda, que tambm definem os limites do componente.

13

JComponent3 - A habilidade para definir o tamanho mximo, mnimo e preferido de um componente, mesmo se a tela for redimensionada. 4 - ToolTip: faixa de texto que aparece quando o cursor passa sobre o componente.

5 - A classe JOptionPane: vrias janelas de dilogos. S usar!!Vide DialogDemo.java e CustomDialog.java.

14

JFrame o tipo mais especializado de janela Java. Possui uma barra de ttulo e uma borda. JFrame derivado do controle da AWT. Permite interaes atravs de teclado e mouse. Incluir no cdigo: import javax.swing.*; um container: pode conter outros componentes. Para alterar o cone da janela, consulteSpecifying Window Decorations:http://java.sun.com/docs/books/tutorial/uiswing/components/frame.html#setDefaultLookAndFeelDecorated

Possui 5 subcontainers. Por isso, ligeiramente incompatvel com java.awt.Frame, que no possui subcontainers. um gerenciador de layout automaticamente associado a cada um de seus subcontainers. A seguir:15

Os containers de JFrame

J

JContentPane

Consulte: http://java.sun.com/products/jfc/tsc/articles/containers/index.html

16

Os containers de JFrame1 - JRootPane: container principal de JFrame, gerencia os demais JRootPanesubcontainers. Cobre a superfcie inteira da janela, exceto a barra de ttulo e o tamanho da barra. Consulte:http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html

2 - JLayeredPane : adiciona profundidade a um container, permitindosobreposio de componentes, quando necessrio. Veja exemplos em:http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html#layeredpane.

17

Os containers de JFrame3 - MenuBar: encapsula os conceitos da plataforma para os limites da barra MenuBarde menu. Para associar uma barra de menu janela, chamar setMenuBar. O gerenciador de layout default o BoxLayout. Consulte:http://java.sun.com/docs/books/tutorial/uiswing/components/menu.html

4 - GlassPane: o painel de vidro, a vidraa. Permite interceptar ou impedir GlassPaneeventos de mouse, torna os componentes grficos inacessveis, embora visveis. Consulte:http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html#glasspane

18

Os containers de JFrame5 - ContentPane: rea de trabalho onde adicionamos diretamente nossos ContentPanecomponentes. O gerenciador de layout default o BorderLayout. Para BorderLayout obter este componente, execute objJanela.getContentPane( ). Consulte:http://java.sun.com/docs/books/tutorial/uiswing/components/toplevel.html

19

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

- exemplo

public class BasicFrame extends JFrame { public static void main(String[] args) { BasicFrame bf = new BasicFrame ("Tela Simples"); } public BasicFrame(String title) { super(title); setSize(250, 200); setVisible(true); } }20

JFrame - resultado

21

JFrame import javax.swing.*; import java.awt.*; public class MyJFrame1 {

exemplo 1

public static void main (String args[]){ JFrame tela = new JFrame();

tela.setSize(200,200); tela.setBackground(Color.blue); tela.setTitle("Tela Exemplo1"); tela.setVisible(true); } }

Exerccio:

a) altere a cor (fundo) da rea de trabalho para azul; e b) posicione a janela em x = 300, y = 400.22

JFrame exemplo 2import java.awt.*; import javax.swing.*; class MyJFrame2 extends JFrame{ public MyJFrame2(String titulo) { super(titulo); setSize(200,200); Container c = getContentPane(); setVisible(true); } }

public class ChamaMyJFrame { public static void main(String args[]){ MyJFrame2 tela = new MyJFrame2("Tela Exemplo2"); } }23

Interfaces grficas

- observaes

Durante a abordagem dos componentes e containers do pacote Swing, ser utilizada apenas uma classe, que, na concluso do tpico, dever ter o aspecto mostrado no slide a seguir. A cada nova etapa (a cada novo componente aprendido), ser utilizado o exerccio anterior para insero do componente adicional. Neste ponto, apenas criaremos a janela (recipiente ou container) que conter os demais componentes.24

Interfaces grficas

resultado final

25

Interfaces grficas

- boas prticas

Os atributos de instncia devem ter visibilidade private. Os mtodos de instncia devem ter visibilidade public. Por legibilidade, declare os atributos preferencialmente logo no incio da classe. Tambm podem ser declarados ao final, aps todos os mtodos.

Instancie os atributos dentro do construtor, ou nos mtodos correspondentes chamados por ele.

Configure agrupadamente todas as caractersticas de um atributo. Para tratar o prximo atributo, salte uma linha e recomece o mesmo processo.

Deixe para o final da classe a rea de adicionar atributos aos containers, isto , a chamada dos mtodos add .

O setVisible(true) deve aparecer como ltima instruo.26

Interfaces grficas//imports import ... public class BoasPraticas { //declarao private JPanel p; private Jframe j;

- boas prticas - exemplo

public BoasPraticas () { //instanciao p = new JPanel(); ... //configurao de cada atributo p.setBackground(Color.GREEN); ... //adio aos containers c.add(p); .... } j.setVisible(true);

} }

public static void main(String args[]){ BoasPraticas tela = new BoasPraticas ( );

27

JFrame

exerccios

1 - Crie a classe CadastroEvento.java, que contenha o atributo de instncia privado janela (tipo JFrame). Esse atributo dever ser instanciado no construtor especializado (String titulo), com as seguintes caractersticas: Ttulo Cor de Fundo Dimenso Layout Resizable Posio cone da barra de ttulo : Cadastro de Evento : (255, 255, 255) : largura = 510 e altura = 510 : nulo : false : mostre a janela no centro da tela : box.sm.gif

2 - Faa com que o construtor default chame o construtor especializado acima.*Incluir as instrues import java.awt.* ; import javax.swing.* ;

28

JFrameInterface Listener

eventos de janelaMtodos ( public void..) windowActived( WindowEvent e)

Classe Adapter

WindowListener

WindowAdapter

windowClosed( WindowEvent e) windowClosing( WindowEvent e) windowDeactivated( WindowEvent e) windowDeiconified( WindowEvent e) windowIconified( WindowEvent e) windowOpened( WindowEvent e) Para um componente do tipo janela, chame addWindowListener ( WindowListener w) e implemente o mtodo correspondente de WindowListener (vide tabela acima). Exemplo:janela.addWindowListener( new WindowAdapter( ){ public void windowClosing(WindowEvent w){.....}});

Mais detalhes em: http://java.sun.com/docs/books/tutorial/uiswing/events/api.html.

29

JFrame

eventos de janela - exerccio

Na classe CadastroEvento.java, implemente uma classe annima interna de WindowAdapter que permita: a) fechar a janela atual ( System.exit(0) ) e b) emitir um alerta de que a aplicao ser encerrada, chamando o mtodo showOptionDialog da classe JOptionPane com os seguintes parmetros: Frame-pai: o frame principal Mensagem: Deseja mesmo fechar a aplicao ?. Ttulo: Pergunta Tipo de opo: JOptionPane.YES_NO_OPTION. Tipo de mensagem: JOptionPane.QUESTION_MESSAGE. cone: nulo. Array de opes: array de Object com as opes Sim e No. Opo default: Sim (posio zero).

*Consulte o mtodo setDefaultCloseOperation(int i) de JFrame para saber como proceder se o 30 usurio retroceder na sua deciso de fechar a janela da aplicao.

JFrame

inserir componentes

H 2 possveis maneiras: 1- Adicionar os componentes em localizao fixa (absolute positioning), usando:setLayout (null) add ( Component c ) setLocation ( int x, int y ) setSize ( int largura, int altura ) setBounds ( int x, int y, int largura, int altura )

2- Usar gerenciador de layout para controlar a localizao dos componentes em janelas e painis. Os principais mtodos so:setLayout ( LayoutManager lm ) add ( Component c ) ou add ( Component c, int i ) setPreferredSize ( Dimension d )

31

JFrame

gerenciadores de layout

32

JFrame

gerenciadores de layout

33

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

gerenciadores de layout - exemplo

public class BorderLayoutDemo extends JFrame { public static void main(String args[]) { BorderLayoutDemo Container j = new BorderLayoutDemo(); c = j.getContentPane();

j.setTitle("BorderLayout"); c.setLayout (new BorderLayout()); c.add (new Button ("Area Norte"),BorderLayout.NORTH); c.add (new Button ("Area Sul"),BorderLayout.SOUTH); c.add (new Button ("Area Leste"),BorderLayout.EAST); c.add (new Button ("Area Oeste"),BorderLayout.WEST); c.add (new Button ("Area Centro"),BorderLayout.CENTER); j.pack(); j.setVisible(true); }}34

JFrame

gerenciadores de layout - dicas

Pode-se simplificar um layout pelo agrupamento de componentes em containers do tipo JPanel (visveis ou invisveis). Exemplo : distribuir componentes no ContentPane de um JFrame. Pode-se usar painis dentro de painis e cada um deles sendo controlado por um gerenciador de layout diferente, o que tambm auxilia a distribuio dos componentes visuais. Exemplo : botes posicionados com distncias horizontais diferentes. possvel atribuir painis s reas dos gerenciadores de layout (os que assim o permitam) e aplicar a cada uma dessas reas um novo gerenciador. Exemplo : quando no se consegue um boa distribuio direta (sem JPanel) dos componentes na rea disponibilizada por um BorderLayout.35

Dilogos Pr-definidos O Swing oferece um conjunto de dilogos simples pr-definidos para uso em interaes breves com o usurio mensagens de erro, de alerta obteno de uma confirmao entrada de um nico campo de texto

Esses dilogos so modais36

Classe JOptionPane Estrutura bsica:

mensagem cone entrada de dados

botes de opo

37

MessageDialog Exibe uma mensagem e aguarda OK do usurioINFORMATION QUESTION WARNING ERROR PLAIN38

Exemplo de MessageDialogJOptionPane.showMessageDialog(janela, "Cuidado com o apago!", "ATENO", JOptionPane.WARNING_MESSAGE);

39

ConfirmDialog Exibe uma mensagem e obtm uma confirmao (YES/NO, OK/CANCEL) Conjuntos de botes de opo (optionType): JOptionPane.DEFAULT_OPTION JOptionPane.YES_NO_OPTION JOptionPane.YES_NO_CANCEL_OPTION JOptionPane.OK_CANCEL_OPTION40

Exemplo de ConfirmDialogint resp = JOptionPane.showConfirmDialog(janela, "Prossegue com a tarefa?", "Escolha uma opo", JOptionPane.OK_CANCEL_OPTION);

CLOSED_OPTION

OK_OPTION

CANCEL_OPTION41

InputDialog Exibe uma mensagem e obtm um valor de entrada do usurio campo de texto editvel combo box

42

Exemplo de InputDialogString nome = JOptionPane.showInputDialog(janela, "Qual o seu nome?", "Identifique-se", JOptionPane.QUESTION_MESSAGE);

43

OptionDialog Exibe uma mensagem (ou objeto) e obtm uma opo escolhida pelo usurio O nmero de botes e seus textos so configurveis A opo default configurvel

44

Exemplo de OptionDialogObject[] opes = {"Sim", "No", "Mais Tarde", "Amanh", "Sei l!"}; int resp = JOptionPane.showOptionDialog(janela, "Prossegue com a tarefa?", "Escolha uma opo", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, opes, opes[0]);

45

Exemplo de OptionDialog

46

JPanel um container: tem o propsito de agrupar componentes para serem inseridos posteriormente em outro container, at mesmo outros painis. Com isso, permite a criao de layouts sofisticados. Utiliza o gerente de layout FlowLayout como padro.

Construtores: JPanel() JPanel(LayoutManager l)

47

JPanel - exemploimport java.awt.*; import javax.swing.*; public class PanelDemo { private JPanel painelAzul; private JPanel painelVermelho; private JFrame janelaDemo; public PanelDemo() { painelAzul = new JPanel(); painelVermelho = new JPanel(); janelaDemo = new JFrame(); Container c = janelaDemo.getContentPane(); c.setLayout(new FlowLayout()); janelaDemo.setSize(200,200); painelAzul.setBackground(Color.blue); painelVermelho.setBackground(Color.red); painelAzul.setPreferredSize(new Dimension(50,50)); painelVermelho.setPreferredSize(new Dimension( 100,100)); c.add(painelAzul); c.add(painelVermelho); janelaDemo.setVisible(true); } public static void main(String[] args) { 48 PanelDemo p = new PanelDemo(); } }

JPanel exerccio classe CadastroEvento.java, acrescente-lhe 3 atributos privados do tipo JPanel. Esses atributos devero ser instanciados no construtor da classe atual e adicionados ao ContentPane. painelTitulo:Cor de fundo: cinza claro Tamanho: ajuste com setPreferredSize para largura = 450 e altura = 170. Layout: manter o default, com os parmetros (FlowLayout.LEFT, 15, 6).

painelOrganizador:Cor de fundo: cinza claro Tamanho: ajuste com setPreferredSize para largura = 450 e altura = 180. Layout: manter o default, com os parmetros (FlowLayout.LEFT, 15, 6).

painelBotoes:Cor de fundo: amarelo Tamanho: ajuste com setPreferredSize para largura = 450 e altura = 63. Layout: manter o default

49

BotesOs botes podem conter texto e cone. Reagem a eventos de ao ou de item.

JRadioButton: boto de seleo agrupada

JCheckBox: boto de seleo independente

JButton: boto comum JMenuItem: em formato de boto 50

JButton um boto comum, que pode conter texto e cone. Reage a eventos de ao.

Construtores: JButton( ) JButton(String texto) JButton(Icon icon) JButton(String texto, Icon icon)

51

JButton

- mtodos mais usados

getText( ):retorna o texto vinculado ao boto. setIcon(Icon icon): define o cone a ser mostrado. setDisabledIcon(Icon icon) Atribui um cone diferente a ser exibido quando o boto for inibido. O boto j deve possuir um cone.

setSelectedIcon(Icon icon) Atribui um cone diferente a ser exibido quando o boto (JRadioButton, JCheckBox etc) for selecionado. O boto j deve possuir um cone.

setPressedIcon(Icon icon) Atribui um cone diferente a ser exibido quando o boto for pressionado. O boto j deve possuir um cone.

setRolloverIcon(Icon icon) Atribui um cone diferente a ser exibido quando o mouse passar sobre o boto. O boto j deve possuir um cone.52

Icon

- imagens nos componentes

A interface Icon implementada pela classe ImageIcon, que permite associar ImageIcon imagens a objetos JComponent. Construtores: ImageIcon(String fileName) ImageIcon(URL url) ImageIcon(Image img) Exemplo: Icon d = new ImageIcon ( "///A:/duke2.gif ); Icon m = new ImageIcon ( middle.gif ); Java pode manusear: GIF, JPEG e JPG.

53

JButton

exemplo

import javax.swing.*; import java.awt.*; public class JButtonDemo { private JButton[] botoes; private JFrame janelaDemo; public JButtonDemo() { botoes = new JButton[4]; janelaDemo = new JFrame(Botes); Container c = janelaDemo.getContentPane(); c.setLayout(new FlowLayout()); Icon icones[] = {new ImageIcon(middle.gif), new ImageIcon(box.sm.gif), new ImageIcon(flip.sm.gif)}; for(int i = 0; i< botoes.length-1;i++) { botoes[i] = new JButton(Boto +i, icones[i]); c.add(botoes[i]); } botoes[3] = new JButton(Boto 3); c.add(botoes[3]); janelaDemo.pack(); janelaDemo.setVisible(true); }public static void main(String[] args) { JButtonDemo t = new JButtonDemo(); } } 54

JButton exerccio classe CadastroEvento.java, acrescente-lhe 2 atributos privados do tipo JButton. Esses atributos devero ser instanciados no construtor da classe atual e adicionados ao PainelBotoes.

jbConfirma:Cor de fundo : branco Texto : Confirma ToolTip: Clique aqui para confirmar cone inicial : hlpglobe.gif PressedIcon : middle.gif

jbCancela:Cor de fundo : branco Texto : Confirma ToolTip: Clique aqui para cancelar

55

JButtonInterface Listener

evento de aoMtodo ( public void..) actionPerformed( ActionEvent e)

Classe Adapter

ActionListener

------------

Para um componente do tipo boto ou outro que aceite evento de ao, chame addActionListener ( ActionListener a) e implemente o nico mtodo actionPerformed (vide tabela acima). Exemplo: botao.addActionListener( new ActionListener( ){ public void actionPerformed(ActionEvent a){ ..... }});

Mtodo importante que pode ser usado dentro do actionPerformed: - getSource( ): retorna o objeto (do tipo Object) que gerou o evento.

Mais detalhes em: http://java.sun.com/docs/books/tutorial/uiswing/events/api.html.

56

JButton

evento de ao - exerccio

Na classe CadastroEvento.java:

jbConfirma:Ao clicar: mostrar a mensagem Ao no implementada., usando o mtodo showMessageDialog da classe JOptionPane. Implementao: classe interna chamada EventoConfirma (implements de ActionListener).

jbCancela:Ao clicar: fechar a janela, chamando a implementao feita para windowClosing, dentro do actionPerformed. Implementao: classe annima interna. Dica:janela.dispatchEvent ( new WindowEvent ( janela, WindowEvent.WINDOW_CLOSING)); 57

Componentes textuaisNa classe CadastroEvento.java, inserir: a) 5 objetos do tipo JLabel: jlTitulo,jlDescricao, jlNome, jlEmail e jlSenha.

exerccio

b) 1 objeto do tipo JTextArea :jtaDescricao. (Linhas = 4 e colunas = 37)ToolTip: Digite aqui a Descrio informada

c) 3 objetos do tipo JTextField: jtfTitulo, jtfNome, jtfEmail. (Colunas = 38)ToolTip: Digite aqui ....

d) 1 objeto do tipo JPasswordField:jpwSenha. (Colunas = 38)ToolTip: Digite aqui a Senha do Organizador 58

JLabelUm rea onde textos no editveis e imagens podem ser mostrados. Construtores: JLabel( ) JLabel (String s) JLabel (String s, int alignment) JLabel(String text, Icon icon, int horizontalAlignment) JLabel(Icon icon, int horizontalAlignment) Constantes de alinhamento: SwingConstants.LEFT SwingConstants.CENTER SwingConstants.RIGHT59

JLabelmantendo-os ligados.

- mtodos mais usados

setLabelFor(Component c):atribui um rtulo para o componente c, setText(String s):atribui o texto s ao rtulo. setHorizontalAlignment(int a): alinha o texto do rtulo em relao aoeixo X.

setVerticalAlignment(int a): alinha o texto do rtulo em relao aoeixo Y.

setVerticalTextPosition(int v): especifica a posio do texto emrelao imagem (TOP, CENTER (default)ou BOTTOM).

setHorizontalTextPosition(int h): especifica a posio do texto emrelao imagem (LEFT, CENTER, RIGHT).

setHorizontalTextPosition(int h): especifica a posio do texto emrelao imagem (LEFT, CENTER, RIGHT).60

JLabel

- exemplo

import java.awt.*; import javax.swing.*; public class TesteLabel { public static void main(String[] args) { JFrame fr = new JFrame(); JLabel lb = new JLabel(Texto em baixo, new ImageIcon(toolbox.med.gif), SwingConstants.CENTER); lb.setHorizontalTextPosition(SwingConstants.CENTER); lb.setVerticalTextPosition(SwingConstants.BOTTOM); fr.getContentPane().add(lb); fr.pack(); fr.setVisible(true); } }61

JTextComponent A classe JTextComponent uma abstrao de um componente que recebe inseres de textos do usurio. Algumas de suas subclasses so: JTextField, JTextArea, JFormattedTextField e JPasswordField.

Veja tambm: http://java.sun.com/docs/books/tutorial/uiswing/components/formattedtextfield.html62

JScrollPaneNa classe CadastroEvento.java, inserir:

exerccio

a) 1 objeto do tipo JScrollPane :

jscDescricao.- Barra de rolagem vertical: ALWAYS. - Barra de rolagem horizontal: ALWAYS. - Adicionar jtaDescricao como seu Componente. - Adicionar jscDescricao ao painelTitulo. - No mais adicionar jtaDescricao ao painelTitulo.

*Vide exemplo no prximo slide.

63

JComboBoxComponente visual para manipulao de colees de objetos, permitindo ao usurio selecionar um ou mais objetos da coleo. possvel editar os componentes selecionveis e pesquisar rapidamente um elemento digitando a primeira letra dele.

Construtores: JComboBox( ) JComboBox(Object[] items) JComboBox(Vector items) JComboBox(ComboBoxModel aModel)64

JComboBox

Mais detalhes em: http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

65

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

exemplo com array

public class ExemploJComboBoxArray { public ExemploJComboBoxArray() { JFrame f = new JFrame("Exemplo com Array"); String[] dados = {"Melancia","Abacate","Melo"}; JComboBox comboBox = new JComboBox(dados); f.getContentPane().setLayout(new FlowLayout()); f.getContentPane().add(comboBox); f.setSize(300,100); f.setVisible(true); } public static void main(String args[]) { ExemploJComboBoxArray e = new ExemploJComboBoxArray(); } }66

JComboBoxNa classe CadastroEvento.java, inserir:a) 1 objeto do tipo JComboBox:

exerccio

jcbNome,

no lugar de jtfNome.

- cor de fundo: branca. - fonte: ("TimesRoman",Font.ITALIC,12). - ToolTip: Digite ou escolha o nome - Array de nomes: {"Joo Bosco Lins", "Pedro Antnio Villas Boas", "Marcelo Martins", "Juliana Cristina} - ndice selecionado: 1 - Tamanho preferido: Dimension(415, 20) - Editvel: true*Obs: eliminar o atributo jtfNome. 67

JComboBoxInterface Listener Classe Adapter

evento de itemMtodo ( public void..) itemStateChanged ( ItemEvent e)

ItemListener

------------

Para um componente do tipo JComboBox ou outro que aceite evento de item, chame addItemListener ( ItemListener a ) e implemente o nico mtodo itemStateChanged (vide tabela acima). Exemplo: jCombo.addItemListener( new ItemListener( ){ public void itemStateChanged(ItemEvent e) { if(e.getStateChange( ) == ItemEvent.SELECTED){ ....... }}}); Importante: JComboBox tambm pode reagir a evento de ao. Mais detalhes em: http://java.sun.com/docs/books/tutorial/uiswing/events/api.html.68

JComboBox

evento de item

Mtodos importantes que podem ser usados dentro do itemStateChanged :

getSource( ): retorna o objeto (do tipo Object) que gerou o evento. getItem( ): retorna o componente associado ao item cujo estado tenha mudado.Freqentemente, o retorno uma String contendo o texto sobre o item selecionado. No caso de uma lista de itens (List), ele o inteiro (Integer) que especifica o ndice do item selecionado.

getItemSelectable( ): retorna o componente que gerou o evento (item). getStateChange( ): retorna o novo estado do item, que pode ser SELECTEDe DESELECTED.69

JComboBoxNa classe CadastroEvento.java: jcbNome:

evento de item - exerccio

Ao selecionar um item: preencher o campo jtfEmail, conforme a seguinte regra: - login: iniciais do nome selecionado + ltimo sobrenome. - domnio: @cadastroevento.com.br Implementao: classe annima interna.

Dicas: -use e.getItem().toString() para o item selecionado. -use StringTokenizer de java.util; -use o mtodo charAt() de String. 70

Border Border uma interface, que permite a criao de vrios tipos de bordas. Exemplo: Border borda = ...; H as implementaes especficas de Border, que tambm podem ser utilizadas para criar bordas. So elas: BevelBorder, CompoundBorder, EmptyBorder, EtchedBorder, LineBorder, LoweredBevelBorder, MatteBorder, RaisedBevelBorder e TitledBorder. Exemplo: LineBorder borda = ...; Incluir a instruo import javax.swing.border.*;71

Border

- tipos pr-definidos (1)

Mais detalhes em: http://java.sun.com/docs/books/tutorial/uiswing/misc/border.html#demo.

72

Border - tipos pr-definidos (2)

73

BorderFactory No instanciamos diretamente uma borda. A fbrica de bordas que instancia os objetos do tipo Border. Emprega o design pattern Factory. uma classe utilitria, com diversos mtodos estticos. Para cada tipo de borda desejado, h um mtodo create correspondente.Exemplo: LineBorder borda = BorderFactory. createLineBorder();

Aps criar a borda, use o mtodo setBorder(Border b) para setBorder atribu-la a um componente.74

BorderFactory

- mtodos mais usados

createBevelBorder(int tipo, Color destaque, Color sombra) createCompoundBorder( Border outB, Border inB) createEmptyBorder() createEtchedBorder(Color destaque, Color sombra) createLineBorder(Color color) createLoweredBevelBorder() createMatteBorder(int top, int left, int bottom,int right, Icon tileIcon)

createRaisedBevelBorder()75

createTitledBorder(Border b, String title)

Etapas na utilizao de bordas1. Criar o objeto visual que conter a borda:JPanel painelComBorda = new JPanel();

2. Criar o(s) objeto(s) bordas por meio da classe BorderFactory . Segue oexemplo de uma TitledBorder com uma RaisedBevelBorder:

Border rbbBorda = BorderFactory.createRaisedBevelBorder(); TitledBorder tbBorda = BorderFactory.createTitledBorder ( rbbBorda, "Painel com TitledBorder" );

3. Caso existam ajustes de personalizao na borda, efetu-los antes deatribu-la ao objeto visual. Os parmetros abaixo se referem a uma TitledBorder: tbBorda.setTitlePosition(TitledBorder.TOP); tbBorda.setTitleJustification(TitledBorder.LEFT);

4. Vincular a borda ao objeto visual:painelComBorda.setBorder(tbBorda);76

Border exerccioNa classe CadastroEvento.java, inserir: a) 1 objeto do tipo EtchedBorder : ebBorda,com destaque cinza escuro e sombra branca. Atribu-la ao painelTitulo.

b) 1 objeto do tipo TitleBorder : tbBorda,com uma BevelBorder (BevelBorder.RAISED, white, white) e ttulo Organizador. Atribuir tbBorda ao painelOrganizador.

c) 1 objeto do tipo BevelBorder : lbbBorda,tipo (BevelBorder.LOWERED, darkGray, white). Atribu-la ao painelBotoes.

*Use o mtodo setBorder( ) e no se esquea de fazer import javax.swing.border.*;

77

Look&FeelNa classe CadastroEvento.java, inserir:a) Os diretrios COM e META-INF e todos os arquivos .ZIP no mesmo diretrio do cdigo-fonte desta classe (ou fazer o download de skinlf-1.2.3-20020729). b) Os seguintes imports:import com.l2fprod.gui.*; import com.l2fprod.gui.plaf.skin.*; import com.l2fprod.util.*;

exerccio

c) Incluir o seguinte trecho no incio do mtodo main:try { SkinLookAndFeel.setSkin(SkinLookAndFeel.loadThemePack( //"aquathemepack.zip")); //"bbjthemepack.zip")); //"beosthemepack.zip")); //"macosthemepack.zip")); //cinza com contorno azul //cinza claro e cinza escuro //cinza claro e cinza escuro //verde (cantos arredondados, checkbox com X) //verde/azul (objetos quadrados)//verde/azul (objetos com borda,seleo em verde)

"modernthemepack.zip"));//"whistlerthemepack.zip")); //"xplunathemepack.zip")); SkinLookAndFeel.enable();

}catch(Exception e){System.out.println("Ocorreu erro no Look&Feel "+e);} CadastroEvento tela = new CadastroEvento( ); }

78

FIM79

Bibliografia Cornell, Gary. Core Java; traduo Daniel Vieira; reviso tcnica Rodrigo Rodrigues. So Paulo, Makron Books, 1997. Eckel, Bruce. Thinking in Java. Prentice Hall PTR, USA, 1998. Campione, Mary. The Java Tutorial: object-oriented programming for the internet. Addison Wesley Longman, California- USA, 1998. Deitel, H. M.;Deitel, P. J. Java, Como Programar. 3a. edio Porto Alegre: Bookman, 2001. Java Tutorial : http://java.sun.com/docs/books/tutorial/java/TOC.html#nutsandbolts. JAVA Swing (JFC) : http://java.sun.com/docs/books/tutorial/uiswing/TOC.html#start. JAVADOC: http://java.sun.com/j2se/1.4/docs/api/index.html. Classes Essenciais Java: http://java.sun.com/docs/books/tutorial/essential/TOC.html. JAVA WORLD e CORE JAVA: http://www.javaworld.com/channel_content/jw-core-index.shtml.

80