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
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
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
Exemplo - Adicionando um Botão
Frame Panel Botão Applet BotãoExemplo
import java.awt.*;
import java.applet.Applet;
public class Exemplo1 extends Applet {
Button hiButton;
public void init() {
hiButton = new Button(“Click Me!”);
add(hiButton);
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 PanelComponentes
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.
Á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
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
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:
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()) {
Checkbox & Radio Button
Checkbox
–
Selecionar mais de um elemento de cada vez
–
Não necessita de
CheckboxGroupRadio Button
–
Selecionar apenas um elemento de cada vez
–
Necessita de
CheckboxGroupCheckbox & Radio Button
Exemplo:
Checkbox cbPoupanca = new Checkbox(“Poupanca”); Checkbox cbConta = new Checkbox(“Conta Corrente”); CheckboxGroup chTipoConta = new CheckboxGroup(); cbPoupanca.setCheckboxGroup(chTipoConta);
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");
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:
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 MultiselectScrolling 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.
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:
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("");
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.
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.
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();
Exemplo
200 400 PanelClasse Dialog
Construtores:
–
Dialog(Frame, String, boolean)
–
Dialog(Dialog, String, boolean)
Subclasse:
–
FileDialog
Exemplo:
Dialog d = new Dialog(f,"Atenção", true);
ModalExemplo 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(); }
Exemplo Dialog
Classe FileDialog
Janela completa para seleção de arquivo
e diretório.
Construtor:
–
FileDialog(Frame, String, int)
Métodos:
–
String getFile()
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(); }
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");
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");
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(); }
Exemplo - MenuBar
Eventos
O que são Eventos.
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
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
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 FocusListenerInterfaces do Pacote AWT.event
MouseListener
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”); } }
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();
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); ...
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.
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.
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
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
A interface Swing apresenta vantagens:
– Apresenta um conjunto mais rico e conveniente deelementos 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
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 JScrollPaneComponentes Swing
Componentes Swing
Os componentes básicos possuem
comportamento análogo aos equivalentes AWT:
Swing AWT
JPanel Panel
JTextField TextField JTextArea TextArea
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
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();
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
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#ListDemoClasses 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
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
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
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
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
Principais Componentes Swing
Container de Propósito Especial
Internal Frame Root Pane Layered Pane
Link
JCheckBox e JRadioButton
Botões de Estado
JToggleButtonSubclasses JCheckBox, JRadioButton Tem valores on/off (true/false)
Class JCheckBox
Texto aparece a direita do checkbox Construtor
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.DESELECTEDJCheckBox Utilização
JTextField
Method setText( fontObject )
new Font( name, style_CONSTANT, size ) style_CONSTANT - FONT.PLAIN, BOLD,
ITALIC Can add to get combinations
Exemplo
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 )
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 )
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
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 ) );
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
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
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
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)
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());
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.
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
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.
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.
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
Menus
JMenuBarOutros Componentes
JApplet Border Interface JColorChooser ImageIcon JDialog JFileChooser JInternalFrameJList JOptionPane JScrollBar JScrollPane JSlider JSplitPane JTabbedPane JLabel
Outros Componentes
JTable JTextArea JTextField JToolBarOutros Componentes
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
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 =
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());
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();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
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