73
1 Programação com Acesso a BD “Há apenas uma pequena distância entre criatividade e insanidade. O que impede as idéias criativas é o demônio crítico da mente que prematuramente as considera impossíveis” M. P. J. Clayton Maciel Costa Campus: Ipanguaçu Curso: Técnico em Informática [email protected] Programação com Acesso a BD Programação com Acesso a BD

Programação com Acesso a BD - ifrn.edu.brclaytonmaciel/files/20111/bd/Aula 18 - Interfaces... · Gráficas em Java Pacote AWT Pacote utilizado para construir GUIs (Graphical User

  • Upload
    vukhanh

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

1

Programação com Acesso a BD

“Há apenas uma pequena distância entre

criatividade e insanidade. O que impede as idéias

criativas é o demônio crítico da mente que

prematuramente as considera impossíveis”M. P. J.

Clayton Maciel Costa

Campus: IpanguaçuCurso: Técnico em Informática

[email protected]

Programação com Acesso a BD

Programação com Acesso a BD

2

Unidade VII: Criando Interfaces Gráficas em Java

Pacote AWT

� Pacote utilizado para construir GUIs (Graphical User Interfaces)

� Classes AWT podem se dividir em:– Componentes– Layouts– Classes Utilitárias

Programação com Acesso a BD

3

Aplic. Standalone x Applets

� Aplic. Standalone– Método

Interessante:main()

� Applets– Métodos Interessantes:

init()

start()

stop()

destroy()

Criando Interfaces Gráficas

� Criar os containers;� Adicionar os componentes de interface;� Posicionar os componentes (lay out);� Adicionar funcionalidade (Manipulação

de Eventos).

4

Exemplo - Adicionando um Botão

Frame

Panel

Botão

Applet

Botão

Exemplo

import java.awt.*;import java.applet.Applet;

public class Exemplo1 extends Applet {Button hiButton;

public void init() {hiButton = new Button(“Click Me!”);add(hiButton);

}}

5

Exemplo

import java.awt.*;

public class ExFrame {Frame f = new Frame("Meu Frame");Panel p = new Panel();Button b = new Button("OK");

ExFrame() {p.add(b);f.add(p);f.setSize(400,200);f.setVisible(true);

}

public static void main(String argv[]) {new ExFrame();

}}

Exemplo

200

400

Panel

6

Componentes

� Elementos de interface apresentados aos usuários.

� Podem ser programados para reagir a interações com usuários (Manipulação de Eventos)

� A maioria dos componentes são derivados da classe Component, com exceção da classe MenuComponent.

Observação

A Classe Component é uma classe

abstrata, que define elementos

comuns a todos os componentes,

como fonte, cor, pintura, forma e

manipulação de eventos. Por ser

abstrata, não pode ser instanciada.

7

Árvore da Classe Component

Button Canvas Checkbox

AppletJava.applet

Panel

FileDialog

Dialog Frame

Window Scrollpane

Container Label List

TextArea TextField

TextComponent Scrollbar Choice

Component

Observações

� Todo item visível do AWT é subclasse de Component.– Isto permite que métodos sejam utilizados da

mesma forma para todos os componentes,como, por exemplo, mudar a cor de fundo.

� Tudo no AWT é direcionado a eventos.– O estilo de programação é, então, não-

linear.

� Componentes podem ser colocados na página tanto em posição absoluta quanto relativa.

8

Observações

� Uma classe em um pacote pode ser subclasse de uma superclasse em outro pacote.

� Por exemplo:– O caso da classe Applet, que pertence ao

pacote java.applet, mas é subclasse de Panel, que pertence ao pacote java.awt.

Componentes

� Componentes Simples� Componentes de Texto� Containers

9

Componentes Simples

� Button� Checkbox� Choice List� Label� List

Button

� Classe: java.awt.Button;� Construtor:

– Button()– Button(String label)

� Métodos:– String getLabel()– void setLabel(String label)

� Exemplo:– Button aButton = new Button(“Ok”);

10

Checkbox

Classe: java.awt.Checkbox;Construtor:

Checkbox()Checkbox(String label)Checkbox(String label, boolean s)Checkbox(String label, boolean s, CheckboxGroup g);

Métodos Principais:String getLabel()void setLabel(String label)boolean getState()void setState(boolean s)CheckboxGroup getCheckboxGroup()void setCheckboxGroup(CheckboxGroup g)

Valor Inicial

Checkbox (cont.)

� Exemplo:

Checkbox cbCadastrar = new Checkbox(“Show”);cbCadastrar.setState(true);...if (cbCadastrar.getState()) {

cbCadastrar.setLabel(“Show1”);}

11

Checkbox & Radio Button

� Checkbox– Selecionar mais de um elemento de cada vez– Não necessita de CheckboxGroup

� Radio Button– Selecionar apenas um elemento de cada vez– Necessita de CheckboxGroup

Checkbox & Radio Button

� Exemplo:

Checkbox cbPoupanca = new Checkbox(“Poupanca”);

Checkbox cbConta = new Checkbox(“Conta Corrente”);CheckboxGroup chTipoConta = new CheckboxGroup();cbPoupanca.setCheckboxGroup(chTipoConta);cbConta.setCheckboxGroup(chTipoConta);

12

Choice List

Classe: java.awt.Choice;Construtor:

Choice()Métodos Principais:

void addItem(String item)int getItemCount()void remove(int ind)String getItem(int ind)String getSelectedItem()void select(int ind)

Choice List (cont.)

� Exemplo:

Choice chTipoConta = new Choice();chTipoConta.addItem(“Poupanca”);chTipoConta.addItem(“Conta Normal”);chTipoConta.addItem(“Conta Especial”);chTipoConta.select("Conta Normal");String tipoConta = chTipoConta.getSelectedItem();if (tipoConta.equals("Conta Normal")){

Conta c = new ContaNormal(123, null);}

13

Label

Classe: java.awt.Label;Construtor:

Label()Label(String label)Label(String label, int alin)

Métodos:int getAlignment()void setAlignment(int alin)String getText()void setText(String texto)

Label

� Exemplo:

Label aLabel = new Label(“Hello”, Label.CENTER);

14

Scrolling List

� Classe: java.awt.List;� Construtores:

– List(int num, boolean mult)– List()

� Métodos Principais:– String getItem(int indice)– void addItem(String label)

� Exemplo:List l = new List(3);l.addItem(“Domingo”);l.addItem(“Segunda”);l.addItem(“Terça”);l.addItem(“Quarta”);

Número de Opções

Multiselect

Scrolling List (cont.)

� Valor de Multiselect:– true: Permite a seleção de mais de uma

opção ao mesmo tempo.

– false: Permite a seleção de apenas uma opção.

15

Componentes de Texto

� Textfield– Uma linha e n colunas

� TextArea– n linhas e m colunas

TextField

Classe: java.awt.TextField;Construtor:

TextField()TextField(int cols)TextField(String texto)TextField(String texto, int cols)

Métodos:int getColumns()String getText()void setText(String texto)

Exemplo:TextField aTf = new TextField(“37”, 4);

16

TextArea

Classe: java.awt.TextArea;Construtor:

TextArea()TextArea(int lin, int cols)TextArea(String texto)TextArea(String texto, int lin, int cols)

Métodos:int getColumns() e int getRows()String getText()void setText(String texto)

Exemplo:TextArea aTa = new TextArea(“Ok”, 5, 40);

Exemplo

TextField tfContad = new TextField();tfContad.setText("");String numConta = tfContad.getText();...TextArea aTextArea = new TextArea("Ok", 5, 40);aTextArea.setText("");String numConta = aTextArea.getText();

17

Container

� Componente que pode conter outros componentes, inclusive outro container.

� Principais containers:– Panel

– ScrollPane

– Window

A classe Applet é subclasse de Panel, logo um Applet deve ser

tratado como um panel

Lembrete

Panel

� Normalmente utilizados para agrupar componentes em uma área específica da tela.

� Um applet é um tipo especial de Panel com propriedades adicionais relativas às implementações de browsers.

18

ScrollPane

� Um tipo especial de container.� Este componente pode receber um

conteúdo até maior do que a área dopróprio ScrollPane. Neste caso, barras derolagem (Scrollbars ) são disponibilizados.

Window

� Esta classe encapsula as janelas de alto nível.

� A classe Window representa uma janela simples, sem barra de título e sem bordas. Suas subclasses oferecem títulos, ícones e funções de controle, como minimizar, maximizar e fechar.

� Estas subclasses são: Frame e Dialog.

19

Classe Frame

� Construtores:– Frame()

– Frame(String)

� Principais métodos:– void add()

– void setSize()

– void setTitle(String)

– setVisible(boolean)

Exemplo

import java.awt.*;

public class ExFrame {Frame f = new Frame("Meu Frame");Panel p = new Panel();Button b = new Button("OK");

ExFrame() {p.add(b);f.add(p);f.setSize(400,200);f.setVisible(true);

}

public static void main(String argv[]) {new ExFrame();

}}

20

Exemplo

200

400

Panel

Classe Dialog

� Construtores:– Dialog(Frame, String, boolean)– Dialog(Dialog, String, boolean)

� Subclasse:– FileDialog

� Exemplo:Dialog d = new Dialog(f,"Atenção", true);

Modal

21

Exemplo Dialog

import java.awt.*;public class ExDialogModal{

Frame f = new Frame("Meu Frame");Panel p = new Panel();Button b = new Button("OK");java.awt.Dialog d;

ExDialogModal(){

f.add(p);f.setSize(400,200);f.setVisible(true);d = new Dialog(f,"Aviso",true);b.setBounds(40,70,57,24);d.add(b);

Exemplo Dialog

d.setLayout(null);java.awt.Dimension screenSize =

java.awt.Toolkit.getDefaultToolkit().getScreenSize();d.setBounds((screenSize.width-400)/2,

(screenSize.height-300)/2, 400, 300);d.show();

}

public static void main(String argv[]){

new ExDialogModal();}

}

22

Exemplo Dialog

Classe FileDialog

� Janela completa para seleção de arquivo e diretório.

� Construtor:– FileDialog(Frame, String, int)

� Métodos:– String getFile()– String getDirectory()

23

Exemplo FileDialog

import java.awt.*;public class ExDialog{

Frame f = new Frame("Meu Frame");Panel p = new Panel();Button b = new Button("OK");FileDialog d;String nome;ExDialog(){

p.add(b);f.add(p);f.setSize(400,200);f.setVisible(true);

Exemplo FileDialog

d = new FileDialog(f,"Abrir Arquivo",FileDialog.LOAD);// (SAVE)

d.show(); //d.setVisible(true);nome = d.getFile();System.out.println(nome);

}

public static void main(String argv[]){

new ExDialog();}

}

24

Exemplo FileDialog

Exemplo - MenuBar

MenuBar menuPrinc = new MenuBar();

this.setMenuBar(menuPrinc);

Menu cadastro = new Menu("Cadastro");

Menu estoque = new Menu("Estoque");

Menu ajuda = new Menu("Ajuda");

MenuItem segmento = new MenuItem("Segmento");

MenuItem produto = new MenuItem("Produto");

MenuItem estoque1 = new MenuItem("Estoque");

MenuItem fornecedor = new MenuItem("Fornecedor");

MenuItem sair = new MenuItem("Sair");

MenuItem sobre = new MenuItem("Sobre");

25

cadastro.add(estoque1);

cadastro.add(fornecedor);

cadastro.add(produto);

cadastro.add(segmento);

ajuda.add(sair);

ajuda.add(sobre);

menuPrinc.add(cadastro);

menuPrinc.add(estoque);

menuPrinc.add(ajuda);

menuPrinc.setHelpMenu(ajuda);

Exemplo - MenuBar

Exemplo - MenuBar

import java.awt.*;

public class ExFrameMenu {Frame f = new Frame("Meu Frame");Panel p = new Panel();Button b = new Button("OK");ExFrameMenu() {

MenuBar menuPrinc = new MenuBar();f.setMenuBar(menuPrinc);Menu cadastro = new Menu("Cadastro");Menu estoque = new Menu("Estoque");Menu ajuda = new Menu("Ajuda");MenuItem segmento = new MenuItem("Segmento");MenuItem produto = new MenuItem("Produto");MenuItem estoque1 = new MenuItem("Estoque");MenuItem fornecedor = new MenuItem("Fornecedor");MenuItem sair = new MenuItem("Sair");MenuItem sobre = new MenuItem("Sobre");

26

Exemplo - MenuBar

cadastro.add(estoque1);cadastro.add(fornecedor);cadastro.add(produto);cadastro.add(segmento);

ajuda.add(sair);ajuda.add(sobre);

menuPrinc.add(cadastro);menuPrinc.add(estoque);menuPrinc.add(ajuda);menuPrinc.setHelpMenu(ajuda);

p.add(b);f.add(p);f.setSize(400,200);f.setVisible(true);

}

Exemplo - MenuBar

public static void main(String argv[]){

new ExFrameMenu();}

27

Exemplo - MenuBar

Eventos

� O que são Eventos.

� Componentes + Eventos = Interação

28

Manipulação de Eventos

� Os eventos são gerados e ficam disponíveis para a aplicação ou applet.

� Eventos são propagados a partir dos componentes para os objetos “listeners”.

� O objeto “listeners” deve registrar quais eventos interessam à aplicação.

Eventos

ObjetoListener

actionPerformed()

Registrar Listeners

addActionListener()

29

Modelo de Tratamento de Eventos

� Modelo de Delegação de EventoUso de uma escuta de evento no tratamento do eventoProcessa o evento delegado para o objeto particular

� Quando um evento ocorrreComponente GUI notifica sua escuta

Chama o método que trata o evento escutado

Classe AWTEvent

FocusEvent

KeyEvent MouseEvent

InputEvent WindowEvent

ComponentEvent

AWTEvent

30

java.lang.Object

java.util.EventObject

java.awt.AWTEvent

ActionEvent

AdjustmentEvent

ItemEventl

ComponentEvent

FocusEvent

PaintEvent

WindowEvent

InputEvent

ContainerEvent

KeyEvent

Nome da Classe

Nome da Interface

Hierarquia das Classes AWT.event

MouseEvent

Classe AWTEvent

java.lang.Object

java.util.EventListener

ActionListener

AdjustmentListener

ComponentListener

ContainerListener

ItemListener

KeyListener

WindowListener

TextListener

FocusListener

Nome da Classe

Nome da Interface

Interfaces do Pacote AWT.event

MouseMotionListener

MouseListener

Classe AWTEvent

31

public class ExFileDialog implements ActionListener {Frame f = new Frame("Meu Frame");Panel p = new Panel();Button b = new Button("OK");FileDialog d;String nome;

ExFileDialog() {b.addActionListener(this);p.add(b);f.add(p);f.setSize(400,200);f.setVisible(true);

}

public static void main(String argv[]) {new ExFileDialog();

}

public void actionPerformed(ActionEvent e) {d = new FileDialog(f,"Abrir Arquivo",FileDialog.LOAD);d.setVisible(true);nome = d.getFile();System.out.println(nome);

}}

Exemplo - ActionListener

Exemplo - ActionListener

public class TestList extends Applet implements ActionListener {

Button b;

TextArea t;

List l;

public void init() {

b = new Button("Checar");

t = new TextArea(5,10);

l = new List(4,false);

b.addActionListener(this);

l.addItem("Um");

l.addItem("Dois");

l.addItem("Três");

l.addItem("Quatro");

add(b);

add(l);

add(t);

}

public void actionPerformed(ActionEvent e) {

String buttonCommand = e.getActionCommand();

if (buttonCommand.equals("Checar")) {

Object[] ao = l.getSelectedObjects();

for(int i=0;i<=Array.getLength(ao)-1;i++) {

t.append(ao[i].toString()+”\n”);

}

}

}

}

32

Exemplo - MouseListener

public class ExFrame implements MouseListener {Frame f = new Frame("Meu Frame");Panel p = new Panel();Button b = new Button("OK");ExFrame() {

p.add(b);f.add(p);f.setSize(400,200);p.addMouseListener(this);f.setVisible(true);

}public static void main(String argv[]) {new ExFrame();}

public void mousePressed(MouseEvent e) {System.out.println(e.toString()); }

public void mouseEntered(MouseEvent e) {System.out.println(e.toString()); }

public void mouseClicked(MouseEvent e) {System.out.println(e.toString()); }

public void mouseReleased(MouseEvent e) {System.out.println(e.toString()); }

public void mouseExited(MouseEvent e) {System.out.println(e.toString()); }

}

Exemplo - MouseMotionListener

public class ExFrame3 implements MouseMotionListener {Frame f = new Frame("Meu Frame");Panel p = new Panel();Button b = new Button("OK");

ExFrame3() {p.add(b);f.add(p);f.setSize(400,200);p.addMouseMotionListener(this);b.addMouseMotionListener(this);f.setVisible(true);

}

public static void main(String argv[]) {new ExFrame3();

}

public void mouseMoved(MouseEvent e) {System.out.println(e.toString());

}

public void mouseDragged(MouseEvent e) {System.out.println(e.toString());

}}

33

Exemplo - KeyListener

import java.awt.*;import java.awt.event.*;

public class ExFrame4 implements KeyListener {Frame f = new Frame("Meu Frame");Panel p = new Panel();Button b = new Button("OK");

ExFrame4() {p.add(b);f.add(p);f.setSize(400,200);p.addKeyListener(this);b.addKeyListener(this);f.setVisible(true);

}public static void main(String argv[]) {

new ExFrame4(); }public void keyReleased(KeyEvent e) {

System.out.println(e.toString()); }public void keyPressed(KeyEvent e) {

System.out.println(e.toString()); }public void keyTyped(KeyEvent e) {

System.out.println(e.toString()); }}

Conversão de Tipos

double valor = c.saldo();

String valorStr = String.valueOf(valor);

...

String valorStr = tfValor.getText();

double valor=Double.valueOf(valorStr).doubleValue();

...

Integer i = new Integer(1);

System.out.println(i.toString());

...

String line = “3”;

int i = Integer.parseInt(line);

...

line = Integer.toString(i);

...

Integer valor = Integer.getInteger(line);

34

Eventos de Mouse

� As interfaces que tratam eventos de mouse são MouseListener e MouseMotionListener

public void mousePressed( MouseEvent e )

public void mouseClicked( MouseEvent e)

public void mouseReleased( MouseEvent e)

public void mouseEntered( MouseEvent e)

public void mouseExited( MouseEvent e)

public void mouseDragged( MouseEvent e)

public void mouseMoved( MouseEvent e)

� mouse é pressionado.

� pressionado ou "released" sem mover

� "released" após ser arrastado (dragged).

� entra no componente.

� sai do componente.

� pressionado e movido.

� movido sobre o componente

Classe Adapter para Eventos de Mouse

� Muitas das interfaces event-listerner têm vários métodos. Nem sempre é desejável definir todos os métodos da interface.

� O pacote java.awt.event oferece classes adapter event-listerner.

� Toda interface com mais de um método tem sua classe adapter correspondente.

� A classe adapter provê uma implementação default de todos os métodos da interface.

35

Classes Adapter

Classe adapter Implementa

ComponentAdapter ComponentListener

ContainerAdapter ContainerListener

FocusAdapter FocusListener

MouseAdapter MouseListener

MouseMotionAdapter MouseMotionListener

KeyAdapter KeyListener

WindowAdapter WindowListener

Diferença Entre os Botões do Mouse

� isMetaDown()Este método retorna true quando o usuário clica com o botão direito de um mouse com dois ou três botões. Para simular um click com este botão o usuário pode pressionar Meta e click o mouse.

� isAltDown()Este método retorna true quando o usuário clica com o botão do centro dou mouse em um mouse de três botões. Para simular um click com este botão o usuário pode pressionar alt e click o mouse.

36

Eventos do Teclado

� Interface KeyListener define os seguintes métodos

public void keyPressed( KeyEvent e )

public void keyReleased( KeyEvent e)

public void keyTyped( KeyEvent e)

� tecla é pressionada.

� tecla liberada "released"

� tecla digitada

� isActionKey()Método para determinar se a tecla do evento é uma tecla de ação.

Interfaces Gráficas com Swing

Swing

37

Interfaces Gráficas com Swing

� O pacote AWT que baseia-se na biblioteca gráfica de cada plataforma mostrou-se problemática:– Os componentes tinham diferenças sutis de

comportamento– Algumas plataformas não possuíam uma

coleção muito boa de componentes gráficos impossibilitando a criação de componentes

– Haviam erros na implementação da biblioteca gráfica de diferentes plataformas

– “Escreva uma vez, debug em todo lugar!”

� O pacote Swing surgiu numa parceria com a Netscape como alternativa para solucionar esses problemas.

� No caso da biblioteca Swing os componentes são desenhados em cima de uma janela em branco.

� Como o desenho e o comportamento são implementados pela própria JVM em cima de “quadros” é possível manter o mesmo comportamento e aparência em todas platafortmas.

Interfaces Gráficas com Swing

38

Interfaces Gráficas com Swing

� A interface Swing apresenta vantagens:– Apresenta um conjunto mais rico e conveniente de

elementos para a GUI– Depende muito menos da plataforma subjacente,

sendo menos sujeito a erros específicos.– Manutenção do mesmo padrão de interface entre

plataformas

� E desvantagens:– A interface é mais lenta de aparecer– As aplicações Java podem ter aparência diferente

das demais aplicações

Interfaces Gráficas com Swing

39

Componentes Swing

� As classes Swing estão no pacote javax.swing

� A maior parte dos componentes AWT possuem componentes equivalente Swing com nome iniciado por “J”.– Ex: Button e JButton, Panel e JPanel ...

� O componente JFrame é um dos poucos em Java que não é desenhado em um quadro, mas usado uma janela equivalente da plataforma subjacente.

Componentes Swing

JButton

JComboBox JPanel

JLabel JListJScrollbar JTree

Component

Window

Frame

Container

JComponent

JFileChooser

JMenuBar

JOptionPane

JTableJFrame

JCheckBox

JTextFieldJTextArea

Dialog

JDialog

JScrollPane

40

Componentes Swing

Componentes Swing

� Os componentes básicos possuem comportamento análogo aos equivalentes AWT:

Swing AWT

JPanel Panel

JTextField TextField

JTextArea TextArea

JLabel Label

JScrollPane ScrollPane

JMenuBar MenuBar

41

Swing top-level containers

� Possuem um JRootPane onde devem ser inserido todos os componentes

� Todos os componentes devem ser inseridos no content pane.

� Exemplo:– frame.getContentPane().add(child);

� Swing top-level containers:– JFrame e JDialog

Swing top-level containers

42

Swing top-level containers

import javax.swing.*;public class HelloWorldSwing {

public static void main(String[] args) {JFrame frame = new JFrame("HelloWorldSwing");final JLabel label = new JLabel("Hello World");frame.getContentPane().add(label);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.pack();frame.setVisible(true);

}}

pack() causes a window to be

sized to fit the preferred size and

layouts of its sub-components

Swing Exemplo

43

import javax.swing.*;

public class HelloWorldFrame extends JFrame {

public HelloWorldFrame() {

super(“HelloWorldSwing”);

final JLabel label = new JLabel("Hello World");

getContentPane().add(label);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

pack();

setVisible(true);

}

public static void main(String[] args) {

HelloWorldFrame frame = new HelloWorldFrame();

}

}

Swing Exemplo

Object[] options = {"Yes!", "No, I'll pass", "Well, if I must"}; int n = JOptionPane.showOptionDialog(

frame, "Duke is a cartoon mascot. \n" + "Do you still want to cast your vote?", "A Follow-up Question",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,null, options,options[2]);

Swing Exemplo

44

Menu Menu barButton LabelText

field

Swing Exemplo

� jdk1.x.y/demo/jfc/SwingApplet� jdk1.x.y/demo/jfc/SwingSet2� http://java.sun.com/docs/books/tutorial/uiswing/components/exam

ples/index.html#ListDemo

Classes do Pacote Swing

� Component – define métodos que podem ser usados nas suas subclasses (Ex: paint and repaint)

� Container – coleção de componentes relacionadosQuando usado com JFrames, attach componentes para o painel (a Container)Método add

� JComponent – superclass da maioria dos componentes Swing

� Muitas das funcionalidades dos componentes são herdadas dessa classe

45

Subclasses de JComponent

� Aparência e Comportamento uniforme em todas as plataformas

� Acesso direto aos componentes pelo tecladoTeclas de atalho

� Tratamento de evento comumSe os componentes realizam as mesmas ações

� Dicas da ferramentaDescrição do componente que aparece quando o mouse fica sobre ele.

Principais Componentes Swing

Mostra Informações não Editáveis

Label Progress Bar

Tool Tips

46

Demonstração da JLabel

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

public class JLabelDemo extends Japplet {JLabel label1, label2, label3;Icon icon;Container c;

public void init() {c = getContentPane();c.setLayout( new GridLayout(3,1) );

icon = new ImageIcon("middle.gif");label1 = new JLabel("Este Label tem Texto e Imagem",

icon, SwingConstants.LEFT );label1.setToolTipText("Este é o Label 1");

label2 = new JLabel("Este Label tem Texto embaixo");label2.setToolTipText("Este é o Label 2");label2.setIcon(icon);

label2.setVerticalTextPosition(SwingConstants.BOTTOM);label2.setHorizontalTextPosition(SwingConstants.CENTER);label2.setHorizontalAlignment( SwingConstants.CENTER );

label3 = new JLabel(icon);label3.setToolTipText("Este é o Label 3");

c.add(label1);c.add(label2);c.add(label3);

}}

Principais Componentes Swing

Controles Básicos

Menu

List

Combo Box

SliderTextfield

Buttons

47

Demonstração Controles Básicos

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

public class Swing_Basico extends JApplet {JLabel label1, label2;JTextField text1, text2;JPasswordField password;JButton but1, but2;Icon icon1;Container c;

public void init() {c = getContentPane();c.setLayout ( new FlowLayout() );icon1 = new ImageIcon("left.gif");

label1 = new JLabel( "Entre com texto: ");text1 = new JTextField( 10 );

label2 = new JLabel( "Enre com password: ");password = new JPasswordField( "Texto Escondido"

);but1 = new JButton("Click", icon1);but2 = new JButton("Exit");

c.add(label1);c.add(text1);c.add(label2);c.add(password);c.add(but1);c.add(but2);

}}

Principais Componentes Swing

Container de Propósito Geral

Panel

Split Pane Scroll Pane

Tabbed Pane

Tool Bar

48

Principais Componentes Swing

Dispaly Editável de Informações Formatadas

Color Choose

Table

File Choose

TextArea Tree

Principais Componentes Swing

Container de Alto Nível

Applet Caixa de Dialogo Frame

49

Principais Componentes Swing

Container de Propósito Especial

Internal Frame

Root Pane

Layered Pane

Link

JCheckBox e JRadioButton

� Botões de EstadoJToggleButton

Subclasses JCheckBox, JRadioButton

Tem valores on/off (true/false)

� Class JCheckBoxTexto aparece a direita do checkbox

Construtor

JCheckBox myBox = new JCheckBox( "Title" );

50

JCheckBox

� Quando JCheckBox muda de estadoGera ItemEvent

Tratado por um ItemListener, deve definir o método itemStateChanged

O handlers é registrado com o método addItemListener

� Class ItemEventgetStateChange()

Returns ItemEvent.SELECTED or ItemEvent.DESELECTED

JCheckBox Utilização

� JTextFieldMethod setText( fontObject )

new Font( name, style_CONSTANT, size )

style_CONSTANT - FONT.PLAIN, BOLD, ITALIC Can add to get combinations

� ExemploUse JCheckBox para trocar a fonte do JTextField

51

Exemplo

JRadioButton

� Radio buttonsTem dois estados: selecionado e não selecionado

Normalmente utilizado como um grupo

Somente um radio button no grupo pode ser selecionado de cada vez

Selecionando um força os outros para off –Opções mutuamente exclusivas

ButtonGroup – mantém o relacionamento lógico entre os botões

� Classe JRadioButtonConstrutor

JRadioButton( "Label", selected )

If selected true, JRadioButton initially selected

52

JRadioButton

� Classe JRadioButtonGera ItemEvents (como JCheckBox)

� Classe ButtonGroupButtonGroup myGroup = new ButtonGroup();

Interliga radio buttons em relacionamentos lógicos

Método addAssocia um radio button com um grupo

myGroup.add( myRadioButton )

Exemplo

53

JComboBox

� Combo box (drop down list)

Lista de itens, usuário faz uma seleçãoClasse JComboBox

Gera ItemEvents

� JComboBox

ConstrutorJComboBox ( arrayOfNames )

Índice numérico recupera os elementosPrimeiro elemento é adicionado no índice 0Primeiro ítem adicionado aparece como ítem previamente selecionado

JComboBox

� Métodos de JComboBox

getSelectedIndex()

Retorna o índice do item selecionado

myComboBox.getSelectedIndex()

setMaximumRowCount( n )

Seta o número máximo de elementos para mostrar quando o usuário click na combo box

Scrollbar é automaticamente inserida

setMaximumRowCount( 3 )

� Exemplo

Use JComboBox para setar um Icon para um JLabel

54

JList

� ListMostra uma série de itens, pode selecionar um ou mais

� Classe JListConstrutor

JList( arrayOfNames )array de Objetos (Strings) é mostrado na lista

setVisibleRowCount( n )Mostra n itens de cada vezNão insere automaticamente scrolling

JList

� Objeto JScrollPane usado para scrolling

Takes component to which to add scrolling as argumentAdiciona um objeto JScrollPane para content pane

� Métodos JListsetSelectionMode( selection_CONSTANT )SINGLE_SELECTION

Um item selecionado de cada vezSINGLE_INTERVAL_SELECTION

Lista de seleção múltipla, permite itens contínuos serem selecionados

MULTIPLE_INTERVAL_SELECTIONLista de seleção múltipla, qualquer item pode ser selecionado

40 c.add( new JScrollPane( colorList ) );

55

JList

� Métodos JListgetSelectedIndex()

Retorna o índice do ítem selecionado

� Event handlersImplementa interface ListSelectionListener (javax.swing.event)Define método valueChanged()Registre handler com addListSelectionListener

� Exemplo

Use uma JList para selecionar a cor de background

Exemplo

56

Listas com Múltiplas Seleções

� Listas com Mútiplas seleçõesSINGLE_INTERVAL_SELECTION

Seleciona um grupo de ítens contínuos mantendo a tecla Shift pressionada

MULTIPLE_INTERVAL_SELECTIONSeleciona qualquer quantidade de ítensPressione a tecla Ctrl e click cada item selecionado

� Métodos de JListgetSelectedValues()

Retorna um array de Objetos representando os itens selecionados

setListData( arrayOfObjects )Seta itens de JList para elementos no arrayOfObjects

Listas com Múltiplas Seleções

� Métodos de JList

– setFixedCellHeight( height )

• Especifica a altura em pixels de cada item na JList– setFixedCellWidth( width )

• Como acima, especifica a largura da lista

� Exemplo– Tem duas listas de múltiplas seleções– Botão Copy copia itens selecionados na primeira lista

para outra

57

Exemplo

JTree

� Implementa uma visão de uma árvore.� Utiliza o modelo TreeModel

– Object getChild(Object parent, int index) – int getChildCount(Object parent) – int getIndexOfChild(Object parent, Object child) – Object getRoot() – boolean isLeaf(Object node) – void valueForPathChanged(TreePath path, Object

newValue)

� A implementação default de TreeModel é DefaultTreeModel

58

JTree

JTable

� Implementa a visão de uma tabela� Utiliza o modelo TableModel:

– int getColumnCount()– String getColumnName(int columnIndex) – int getRowCount()– Object getValueAt(int rowIndex, int columnIndex) – boolean isCellEditable(int rowIndex, int

columnIndex) – void setValueAt(Object aValue, int rowIndex, int

columnIndex) � A implementação default de TableModel

é DefaultTableModel

59

JTable

JFileChooser

� Implementa um mecanismo de para selecionar um arquivo:

JFileChooser chooser = new JFileChooser();

ExampleFileFilter filter = new ExampleFileFilter();

filter.addExtension("jpg");

filter.addExtension("gif");

filter.setDescription("JPG & GIF Images");

chooser.setFileFilter(filter);

int returnVal = chooser.showOpenDialog(parent);

if(returnVal == JFileChooser.APPROVE_OPTION) {

System.out.println("You chose to open this file: " +

chooser.getSelectedFile().getName());

}

60

JFileChooser

� Um filtro de arquivo deve implementar a classe abstrata FileFilter:– abstract boolean accept(File f) – abstract String getDescription()

Gerenciadores de Layout

� Organizam os componentes GUI num container.

FlowLayoutPadrão para java.awt.Applet, java.awt.Panel e javax.swing.JPanel. Coloca os componentes (da direita para esquerda) na ordem que foram adicionados.

BorderLayoutPadrão para paineis de conteúdo de Jframes (e outras janelas) e JApplets. Organiza os componentes em cinco áreas: Norte, Sul, Leste, Oeste e Centro.

GridLayoutOrganiza os componentes nas linhas e colunas

61

Exemplos

FlowLayout

GridLayout

BorderLayout

Painéis

� GUIs ComplexasÉ necessário que cada componente seja colocado numa localização exataPodemos usar vários painéis

Cada painel de componente pode ter um gerenciamento de layout específico

� PainéisClasse JPanel herda de JComponent, que herda de java.awt.Container

Cada JPanel é um ContainerJPanels pode ter componentes (e outros JPanels) adicionados a ele

JPanel define o tamanho para os componentes nele contidoCresce para acomodar componentes quando eles são adicionados

62

� Como usarCrie painéis, e defina o layout para cada um

Adicione componentes para os painéis

Adicione os painéis ao content pane (default BorderLayout)

Painéis

Bordas

� O modelo swing proporciona um modelo de bordas para os componentes que herdam e JComponent.

� Para isso pode-se utilizar a classe BorderFactory para criar uma borda.

TitledBorder titledBorder1 = new TitledBorder("Cores");

jPanel1.setBorder(titledBorder1);

63

Bordas

Modelos de componentes

� A API Swing busca implementar o padrão de projeto Model-View-Control.

� Para isso, em alguns componentes existe uma interface e uma implementação default do modelo.

� O usuário pode criar seu próprio modelo ou compartilhar o mesmo modelo com vários componentes de interface.

64

AbstractButton

� As classes que estendem de AbstractButton usam como modelo um ButtonModel– setModel(ButtonModel)

� A classe DefaultButtonModel é a implementação default do modelo de um botão.– boolean isArmed() – boolean isEnabled() – boolean isPressed() – boolean isSelected() – void addActionListener(ActionListener l) – void fireActionPerformed(ActionEvent e)

� Usado em JButton, JCheckBox e JRadioButton

Buttons

65

Menus

JMenuBar

Outros Componentes

JApplet

Border Interface

JColorChooser

ImageIcon

JDialogJFileChooser

JInternalFrame

66

JList

JOptionPane

JScrollBar

JScrollPane JSlider

JSplitPaneJTabbedPane

JLabel

Outros Componentes

JTable

JTextArea

JTextField

JToolBar

JToolTip

JTree

Outros Componentes

67

Architecture

� Goals:– entirely on Java– pluggable L&F– model-driven

programming– JavaBeans– compability with AWT

� Use MVC?– Model represents the

data– View as a visual

representation of the data

– Controller takes input and translates it to changes in data

The UI Delegate

� No reason to separate controller and view� A separate UI object for defining the visual

representation and controller behaviour� the UI delegate

68

Models

� Data-centric applications� Separate model interface for every

component– GUI-state models

• up-down state in JButton and subclasses

– application data models• selection state in JToggleButton and subclasses

� Application programmer can implement his/her own data models for existing components

� Shared model definitions

Model Separation� JSlider uses BoundedRangeModel

– public JSlider(int orientation, int min, int max, int

value) {

checkOrientation(orientation);

this.orientation = orientation;

this.model = new DefaultBoundedRangeModel(value, 0, min,

max);

this.model.addChangeListener(changeListener);

updateUI();

}

� Calling setModel, application can replace the default– JSlider slider = new JSlider();

BoundedRangeModel myModel =

new DefaultBoundedRangeModel() {

public void setValue(int n) {

System.out.println("SetValue: "+ n);

super.setValue(n);

}

});

slider.setModel(myModel);

69

Change Notification

� Models implement methods for adding andremoving listeners

� Lightweight notification– only notify– listener queries about the changes– e.g. scrollabar dragged

� Stateful notification– event described the change– for complex data models– e.g. changes in the column of table

Lightweight Notification

� ChangeListener with one single method– public void stateChanged(ChangeEvent e);

� Listening to JSlider– JSlider slider = new JSlider();

BoundedRangeModel model = slider.getModel();

model.addChangeListener(new ChangeListener()

{

public void stateChanged(ChangeEvent e) {

// need to query the model to get

updated value...

BoundedRangeModel m =

(BoundedRangeModel)e.getSource();

System.out.println("model changed: " +

m.getValue());

}

});

70

Stateful Notification

� Tracking JList selection– String items[] = {"One", "Two", "Three");

JList list = new JList(items);

ListSelectionModel sModel =

list.getSelectionModel();

sModel.addListSelectionListener

(new ListSelectionListener() {

public void

valueChanged(ListSelectionEvent e) {

// get change information directly //

// from the event instance...

if (!e.getValueIsAdjusting()) {

System.out.println("selection

changed: " +

e.getFirstIndex());

}

}

Ignoring Models

� Most components provide API to the modeldirectly

� E.g. JSlider’s method– public int getValue() {

return getModel().getValue();

}

� Program can simply do the following– JSlider slider = new JSlider();

int value = slider.getValue();

� So, where’s the “model,” anyway!

71

Setting Look & Feel

� To set a particular L&F (here CDE/Motif), write– UIManager.setLookAndFeel(

"com.sun.java.swing.plaf.motif.MotifLookAndFeel”);

� To set the appropriate L&F, whatever the current environment, write– UIManager.setLookAndFeel(

UIManager.getSystemLookAndFeelClassName()

);

� Do the above preferably at the end of the program (before instantiating any components)

The Swing Packages

� The Accessibility package (javax.accessibility)– provides support for supporting the screen access

products for people with disabilities

– Swing has full support for accessibility

� javax.swing– contains nearly all of the Swing components– notable exception is JTextComponent (in

javax.swing.text)

� javax.swing.border– in need for customized borders, take a look

� javax.swing.event– includes the additional event classes (not found in

java.awt.event)

72

� javax.swing.plaf– classes for providing the L&F capabilities– also javax.swing.plaf.basic including the default L&F classes– the current specialized L&F:s

• javax.swing.plaf.metal

• javax.swing.plaf.motif (or com.sun.java.swing.plaf.motif)

• javax.swing.plaf.windows (or com.sun.java.swing.plaf.windows)

– also javax.swing.plaf.multi for mixing multiple L&F:s

� javax.swing.table

– including support classes for managing tables

� javax.swing.tree

– support classes for managing trees

The Swing Packages

� javax.swing.text– support classes for text editing– Document classes– JTextComponent (superclass for all text

components)– see also separate format packages

• javax.swing.text.html

• javax.swing.text.rtf

� javax.swing.undo– classes for supporting undo/redo operations

The Swing Packages

73

Ferramentas Visuais

Exercício

� Criar uma Interface Gráfica para a classe Banco, gerando um Applet.

� Implementar a geração e o tratamento de eventos para esta interface.