• Nenhum resultado encontrado

Programação com Acesso a BD. Programação com Acesso a BD

N/A
N/A
Protected

Academic year: 2021

Share "Programação com Acesso a BD. Programação com Acesso a BD"

Copied!
73
0
0

Texto

(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

clayton.maciel@ifrn.edu.br

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

(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

(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

Applet Java.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

(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:

(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()) {

(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);

(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");

(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:

(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:

(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("");

(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 do

próprio ScrollPane. Neste caso, barras de

rolagem (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.

(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()

(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");

(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");

(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.

(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

Objeto

actionPerformed() Registrar Listeners

(29)

Modelo de Tratamento de Eventos

 Modelo de Delegação de Evento

Uso de uma escuta de evento no tratamento do evento

Processa o evento delegado para o objeto particular

 Quando um evento ocorrre

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

Interfaces do Pacote AWT.event

MouseListener

(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();

(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); ...

(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.

(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

(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.

(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

(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 JList JScrollbar JTree Component Window Frame Container JComponent JFileChooser JMenuBar JOptionPane JTable JFrame JCheckBox JTextField JTextArea 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

(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

(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();

(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 bar

Button Label Text

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 relacionados

Quando 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 teclado

Teclas de atalho

 Tratamento de evento comum

Se os componentes realizam as mesmas ações

 Dicas da ferramenta

Descrição do componente que aparece quando o mouse fica sobre ele.

Principais Componentes Swing

Mostra Informações não Editáveis

Label Progress Bar

(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

List Combo Box

(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

(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

(49)

Principais Componentes Swing

Container de Propósito Especial

Internal Frame Root Pane Layered Pane

Link

JCheckBox e JRadioButton

 Botões de Estado

JToggleButton

Subclasses JCheckBox, JRadioButton Tem valores on/off (true/false)

 Class JCheckBox

Texto aparece a direita do checkbox Construtor

(50)

JCheckBox

 Quando JCheckBox muda de estado

Gera ItemEvent

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

O handlers é registrado com o método addItemListener

 Class ItemEvent

getStateChange() Returns ItemEvent.SELECTED or ItemEvent.DESELECTED

JCheckBox Utilização

 JTextField

Method setText( fontObject )

new Font( name, style_CONSTANT, size ) style_CONSTANT - FONT.PLAIN, BOLD,

ITALIC Can add to get combinations

 Exemplo

(51)

Exemplo

JRadioButton

 Radio buttons

Tem 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 JRadioButton

Construtor

JRadioButton( "Label", selected )

(52)

JRadioButton

 Classe JRadioButton

Gera ItemEvents (como JCheckBox)

 Classe ButtonGroup

ButtonGroup myGroup = new ButtonGroup();

Interliga radio buttons em relacionamentos lógicos

Método add

Associa um radio button com um grupo

myGroup.add( myRadioButton )

(53)

JComboBox

 Combo box (drop down list)

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

Gera ItemEvents

 JComboBox

Construtor

JComboBox ( arrayOfNames )

Índice numérico recupera os elementos Primeiro elemento é adicionado no índice 0 Primeiro í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

(54)

JList

 List

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

 Classe JList

Construtor

JList( arrayOfNames )

array de Objetos (Strings) é mostrado na lista setVisibleRowCount( n )

Mostra n itens de cada vez

Não insere automaticamente scrolling

JList

 Objeto JScrollPane usado para scrolling

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

 Métodos JList

setSelectionMode( selection_CONSTANT ) SINGLE_SELECTION

Um item selecionado de cada vez SINGLE_INTERVAL_SELECTION

Lista de seleção múltipla, permite itens contínuos serem 40 c.add( new JScrollPane( colorList ) );

(55)

JList

 Métodos JList

getSelectedIndex()

Retorna o índice do ítem selecionado

 Event handlers

Implementa interface ListSelectionListener (javax.swing.event) Define método valueChanged()

Registre handler com addListSelectionListener

 Exemplo

Use uma JList para selecionar a cor de background

(56)

Listas com Múltiplas Seleções

 Listas com Mútiplas seleções

SINGLE_INTERVAL_SELECTION

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

MULTIPLE_INTERVAL_SELECTION

Seleciona qualquer quantidade de ítens

Pressione a tecla Ctrl e click cada item selecionado

 Métodos de JList

getSelectedValues()

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

(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)

(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.

FlowLayout

Padrão para java.awt.Applet, java.awt.Panel e

javax.swing.JPanel. Coloca os componentes (da direita para esquerda) na ordem que foram adicionados.

BorderLayout

Padrã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.

(61)

Exemplos

FlowLayout

GridLayout

BorderLayout

Painéis

 GUIs Complexas

É necessário que cada componente seja colocado numa localização exata

Podemos usar vários painéis

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

 Painéis

Classe JPanel herda de JComponent, que herda de java.awt.Container

Cada JPanel é um Container

JPanels pode ter componentes (e outros JPanels) adicionados a ele

JPanel define o tamanho para os componentes nele contido

Cresce para acomodar componentes quando eles são adicionados

(62)



Como usar

Crie 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.

(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

(65)

Menus

JMenuBar

Outros Componentes

JApplet Border Interface JColorChooser ImageIcon JDialog JFileChooser JInternalFrame

(66)

JList JOptionPane JScrollBar JScrollPane JSlider JSplitPane JTabbedPane JLabel

Outros Componentes

JTable JTextArea JTextField JToolBar

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 =

(69)

Change Notification

 Models implement methods for adding

and

removing 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

model

directly

 E.g. JSlider’s method

– public int getValue() {

return getModel().getValue(); }

 Program can simply do the following

– JSlider slider = new JSlider();

(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

(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

(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.

Referências

Documentos relacionados

Revendo com minúcia e finu- ra o perfil raro deste poeta mulato que se destacou pelo cruzar de fronteiras – da poesia culta para a popular, da literatura para a música e para as

Estas foram reconhecidas por reproduzirem o sistema faxinal, que se constitui em uma organização social singular, existente na região centro-sul do Paraná. Esse caminho

Nessa sequência, percebemos, pelo tom avaliativo, certa necessidade de fixação de lugares identitários, de territórios de si, entre três grupos: o gaúcho dito nato, o cuiabano

Nesta etapa são identificados os processadores que podem ser alocados exclusivamente a apenas uma tarefa (produto). O problema proposto é inspirado em um

Using the 2CEC and 2ECEC HP values of the inorganic fraction (2.33 and 0.78 cmol c kg -1 , Figure 3), considering an average 16 % of clay size fraction content and the CEC and

Embora as evidências indiquem na cadeia das plantas bioativas uma possível alternativa concreta de geração de emprego e renda para os agricultores familiares do

Se necessitar de uma análise ao sangue, informe o seu médico ou o pessoal do laboratório de que está a tomar Visanne, porque este pode afectar os resultados de algumas

Os lab-on-a-chip ficam cada vez mais viáveis economicamente e abrangem um hori- zonte ainda maior de aplicações quando uma nova ferramenta microfluídica é desenvolvida.