java interface swing
Post on 17-Jul-2015
411 Views
Preview:
TRANSCRIPT
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
top related