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