64
Desenvolvimento de Interfaces Desenvolvimento de Interfaces Gráficas Gráficas Ms. Christien L. Rachid Ms. Christien L. Rachid FUPAC FUPAC E-Mail: [email protected] E-Mail: [email protected]

Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: [email protected]

Embed Size (px)

Citation preview

Page 1: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

Desenvolvimento de Interfaces Desenvolvimento de Interfaces Gráficas Gráficas

Ms. Christien L. RachidMs. Christien L. RachidFUPACFUPAC

E-Mail: [email protected]: [email protected]

Page 2: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

ObjetivosObjetivos

• Introduzir o conceito de interfaces gráficasIntroduzir o conceito de interfaces gráficas• Apresentar Swing e AWTApresentar Swing e AWT• Definir o conceito para containers gráficosDefinir o conceito para containers gráficos• Apresentar os principais componentes Apresentar os principais componentes

existentes para a construção de uma existentes para a construção de uma interface gráfica interface gráfica

Page 3: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

3

SwingSwing

• Swing – Conjunto de componentes Swing – Conjunto de componentes direcionados para aplicações direcionados para aplicações baseadas em formuláriosbaseadas em formulários

• Swing é parte da JFC (Java Foundation Swing é parte da JFC (Java Foundation Classes)Classes)

Page 4: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

4

Swing – CaracterísticasSwing – Características

• Componentes levesComponentes leves– Light-weight

• Arquitetura dos componentesArquitetura dos componentes– MVC

Page 5: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

5

ContainersContainers

• Janela, Diálogo ou AppletJanela, Diálogo ou Applet– Jframe, JDialog ou JApplet

• JFrame: janelas primáriasJFrame: janelas primárias• JDialog: janelas secundáriasJDialog: janelas secundárias• JApplet: painel em um área do browserJApplet: painel em um área do browser

Page 6: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

6

Top Level ContainerTop Level Containerpublic class SwingApplication { public class SwingApplication {

... ... public static void main(String[] args) { public static void main(String[] args) {

... ... JFrame frame = new JFrame("SwingApplication"); JFrame frame = new JFrame("SwingApplication");

// cria componentes em uma variável contents// cria componentes em uma variável contentsframe.getContentPane().add(contents, frame.getContentPane().add(contents,

BorderLayout.CENTER); BorderLayout.CENTER); //Finish setting up the frame, and show it. //Finish setting up the frame, and show it.

frame.addWindowListener(...); frame.addWindowListener(...); frame.pack(); frame.pack(); frame.setVisible(true); frame.setVisible(true);

} } } }

Page 7: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

7

JFrameJFrame

Page 8: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

8

JFrameJFrame

public class FrameTester {public class FrameTester { public static void main (String args[]) {public static void main (String args[]) { JFrame f = new JFrame ("JFrame JFrame f = new JFrame ("JFrame Example");Example");

Container c = f.getContentPane();Container c = f.getContentPane(); c.setLayout (new FlowLayout());c.setLayout (new FlowLayout()); for (int i = 0; i < 5; i++) {for (int i = 0; i < 5; i++) { c.add (new JButton ("No"));c.add (new JButton ("No")); c.add (new Button ("Batter"));c.add (new Button ("Batter")); }} c.add (new JLabel ("Swing"));c.add (new JLabel ("Swing")); f.setSize (300, 200);f.setSize (300, 200); f.setVisible(true);f.setVisible(true); }}}}

Page 9: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

9

JTabbedPaneJTabbedPane

Page 10: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

10

JTabbedPaneJTabbedPane

public class TabbedPanel extends JPanel {public class TabbedPanel extends JPanel { String tabs[] = {"One", "Two", "Three", String tabs[] = {"One", "Two", "Three", "Four"};"Four"};

public JTabbedPane tabbedPane = new public JTabbedPane tabbedPane = new JTabbedPane();JTabbedPane();

public TabbedPanel() {public TabbedPanel() { setLayout (new BorderLayout());setLayout (new BorderLayout()); for (int i=0;i<tabs.length;i++)for (int i=0;i<tabs.length;i++) tabbedPane.addTab (tabs[i], null, tabbedPane.addTab (tabs[i], null, createPane (tabs[i]));createPane (tabs[i]));

tabbedPane.setSelectedIndex(0);tabbedPane.setSelectedIndex(0); add (tabbedPane, add (tabbedPane, BorderLayout.CENTER);BorderLayout.CENTER);

}}

Page 11: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

11

JTabbedPaneJTabbedPane

JPanel createPane(String s) {JPanel createPane(String s) { JPanel p = new JPanel();JPanel p = new JPanel(); p.add(new JLabel(s));p.add(new JLabel(s)); return p;return p; }}}}

Page 12: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

12

JSplitPaneJSplitPane

Page 13: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

13

JScrollPaneJScrollPane

Page 14: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

14

public class ScrollPanel extends JPanel {public class ScrollPanel extends JPanel {

public ScrollPanel() {public ScrollPanel() { setLayout(new BorderLayout());setLayout(new BorderLayout()); Icon bigTiger = new Icon bigTiger = new ImageIcon("BigTiger.gif");ImageIcon("BigTiger.gif");

JLabel tigerLabel = new JLabel tigerLabel = new JLabel(bigTiger);JLabel(bigTiger);

JScrollPane scrollPane = JScrollPane scrollPane = new JScrollPane(tigerLabel);new JScrollPane(tigerLabel); add(scrollPane, BorderLayout.CENTER);add(scrollPane, BorderLayout.CENTER); }}}}

JScrollPaneJScrollPane

Page 15: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

15

Gerenciadores de LayoutGerenciadores de Layout

• Em inglês (Layout Manager)Em inglês (Layout Manager)• Definem como os componentes gráficos são Definem como os componentes gráficos são

dispostos em um container AWT/SWING.dispostos em um container AWT/SWING.• Os gerenciadores de layout garantem a Os gerenciadores de layout garantem a

consistência visual em diferentes resoluções de tela consistência visual em diferentes resoluções de tela e diferentes plataformas.e diferentes plataformas.

Page 16: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

16

• Layout Managers calculam coordenadas automaticamente, baseados em regras

• Eles controlam a posição, características e o comportamento dos componentes nos contêineres

Gerenciadores de Layout

Page 17: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

17

Tipos de Gerenciadores de Layout Tipos de Gerenciadores de Layout

• Nulo (Posicionamento absoluto)Nulo (Posicionamento absoluto)• FlowLayoutFlowLayout• BorderLayoutBorderLayout• CardLayoutCardLayout• GridLayoutGridLayout• GridBagLayoutGridBagLayout• Outros (personalizados)Outros (personalizados)

Page 18: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

18

Gerenciadores de LayoutGerenciadores de Layout

• Todo container possui um gerenciador de Todo container possui um gerenciador de layout a ele associadolayout a ele associado..

• Um programador pode também criar Um programador pode também criar novos gerenciadores de layout (para novos gerenciadores de layout (para aplicações com necessidades especiais).aplicações com necessidades especiais).

Page 19: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

19

Flow LayoutFlow Layout

• À medida que os componentes são À medida que os componentes são acrescentados no container, eles são acrescentados no container, eles são posicionados em uma linha da esquerda posicionados em uma linha da esquerda para a direita.para a direita.

• O tamanho de cada componente do O tamanho de cada componente do container é calculado através do seu container é calculado através do seu tamanho preferido (getPreferedSize).tamanho preferido (getPreferedSize).

• Uma nova linha é automaticamente criada Uma nova linha é automaticamente criada quando falta espaço na linha corrente.quando falta espaço na linha corrente.

Page 20: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

20

Grid LayoutGrid Layout

• Componentes são colocados em uma Componentes são colocados em uma matriz com um numero específico de matriz com um numero específico de colunas ou linhas.colunas ou linhas.

• Cada componente ocupa exatamente Cada componente ocupa exatamente uma célula da matriz.uma célula da matriz.

• As células são preenchidas da esquerda As células são preenchidas da esquerda para direita e do topo para a base.para direita e do topo para a base.

Page 21: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

21

Border LayoutBorder Layout

• Define 5 áreas pré-definidas onde um Define 5 áreas pré-definidas onde um componente ou um grupo de componente ou um grupo de componentes podem ser colocados: componentes podem ser colocados: North, South, East, West, e Center.North, South, East, West, e Center.

• O programador especifica a área na O programador especifica a área na qual um componente deve aparecer.qual um componente deve aparecer.

Page 22: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

22

Swing WidgetsSwing Widgets

• São as classes de componentes São as classes de componentes Swing.Swing.

• Possuem como base a classe Possuem como base a classe JComponentJComponent

• A partir delas foram criadas A partir delas foram criadas inúmeras classes descendentes para inúmeras classes descendentes para construção de interfaces gráficas.construção de interfaces gráficas.

Page 23: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

23

TooltipsTooltips

Page 24: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

24

TooltipsTooltips

public class TooltipPanel extends public class TooltipPanel extends JPanel {JPanel {

public TooltipPanel() {public TooltipPanel() { JButton myButton = new JButton myButton = new JButton("Hello");JButton("Hello");

myButton.setToolTipText myButton.setToolTipText ("World");("World");

add(myButton);add(myButton); }}}}

Page 25: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

25

Icon e ImageIconIcon e ImageIcon

• ImageIcon é usado pela Swing, ao invés de ImageIcon é usado pela Swing, ao invés de Image (AWT), para desenho de imagens Image (AWT), para desenho de imagens em componentesem componentes

• Motivos:Motivos:– Image carrega assincronamente– Image não é serializável

Page 26: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

26

Icon e ImageIconIcon e ImageIcon

• ImageIconImageIcon– Implementação da interface Icon que cria um

ícone a partir de uma imagem– Icon tinyPicture = new

ImageIcon(“Imagem.gif");

Page 27: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

27

JLabelJLabel

Page 28: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

28

JButtonJButton

Page 29: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

29

JButtonJButton

public class ButtonPanel extends JPanel {public class ButtonPanel extends JPanel { public ButtonPanel() {public ButtonPanel() { Icon tigerIcon = new Icon tigerIcon = new ImageIcon("SmallTiger.gif");ImageIcon("SmallTiger.gif");

JButton myButton = new JButton("Tiger", JButton myButton = new JButton("Tiger", tigerIcon);tigerIcon);

add(myButton);add(myButton); }}}}

Page 30: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

30

JCheckBox, JRadioButton, JCheckBox, JRadioButton, JToggleButtonJToggleButton

Page 31: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

31

JCheckBox, JRadioButton, JCheckBox, JRadioButton, JToggleButtonJToggleButton

public class ToggleButtonPanel extends public class ToggleButtonPanel extends JPanel {JPanel {

public ToggleButtonPanel() {public ToggleButtonPanel() { // Set the layout to a GridLayout// Set the layout to a GridLayout setLayout(new GridLayout(4,1, 10, 10));setLayout(new GridLayout(4,1, 10, 10)); add (new JToggleButton ("Fe"));add (new JToggleButton ("Fe")); add (new JToggleButton ("Fi"));add (new JToggleButton ("Fi")); add (new JToggleButton ("Fo"));add (new JToggleButton ("Fo")); add (new JToggleButton ("Fum"));add (new JToggleButton ("Fum")); }}}}

Page 32: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

32

ButtonGroupButtonGroup

• Possibilita o agrupamento de botõesPossibilita o agrupamento de botões• Qualquer descendente de AbstractButton Qualquer descendente de AbstractButton

pode ser agrupadopode ser agrupado• Muito utilizado em conjunto com objetos Muito utilizado em conjunto com objetos

do tipo JToggleButton e JRadioButtondo tipo JToggleButton e JRadioButton

Page 33: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

33

ButtonGroupButtonGroup

ButtonGroup group = new ButtonGroup();group.add(new JRadioButton(“Teste 1”));group.add(new JRadioButton(“Teste 2”);

Page 34: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

34

Componentes JText*Componentes JText*

• Fornecem funcionalidades de um editor de Fornecem funcionalidades de um editor de textos simplestextos simples– copy(), cut(), paste() – getSelectedText()– setSelectionStart(), setSelectionEnd()– selectAll(), replaceSelection() – getText(), setText() – setEditable() – setCaretPosition()

Page 35: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

35

JTextField and JTextAreaJTextField and JTextArea

// Instantiate a new TextField // Instantiate a new TextField JTextField tf = new JTextField(); JTextField tf = new JTextField(); // Instantiate a new TextArea // Instantiate a new TextArea JTextArea ta = new JTextArea(); JTextArea ta = new JTextArea(); // Initialize the text of each// Initialize the text of eachtf.setText("TextField"); tf.setText("TextField"); ta.setText("JTextArea\n Allows Multiple ta.setText("JTextArea\n Allows Multiple Lines");Lines");

add(tf); add(tf); add(new JScrollPane(ta)); add(new JScrollPane(ta));

Page 36: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

36

JTextPaneJTextPane

• Editor de textos mais Editor de textos mais completo com completo com formatação de formatação de textos, quebra de textos, quebra de palavras (word wrap) palavras (word wrap) e exibição de e exibição de imagensimagens

Page 37: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

37

JTextPaneJTextPaneStyleConstants.setFontFamily(attr, StyleConstants.setFontFamily(attr, "Serif");"Serif");

StyleConstants.setFontSize(attr, 18);StyleConstants.setFontSize(attr, 18); StyleConstants.setBold(attr, true);StyleConstants.setBold(attr, true); textPane.setCharacterAttributes(attr, textPane.setCharacterAttributes(attr, false);false);

add(textField, BorderLayout.NORTH);add(textField, BorderLayout.NORTH); add(new JScrollPane(textArea), add(new JScrollPane(textArea), BorderLayout.CENTER);BorderLayout.CENTER);

add(new JScrollPane(textPane), add(new JScrollPane(textPane), BorderLayout.SOUTH);BorderLayout.SOUTH);

}}}}

Page 38: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

38

JPasswordFieldJPasswordField

Page 39: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

39

JPasswordFieldJPasswordField

class PasswordPanel extends JPanel {class PasswordPanel extends JPanel { PasswordPanel() {PasswordPanel() { JPasswordField pass1 = new JPasswordField pass1 = new JPasswordField(20);JPasswordField(20);

JPasswordField pass2 = new JPasswordField pass2 = new JPasswordField(20);JPasswordField(20);

pass2.setEchoChar ('?');pass2.setEchoChar ('?'); add(pass1);add(pass1); add(pass2);add(pass2); }}}}

Page 40: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

40

JFormattedTextFieldJFormattedTextField

Page 41: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

41

JFormattedTextFieldJFormattedTextField

this.add(new JLabel("Máscara de Data:"));this.add(new JLabel("Máscara de Data:"));DateFormat dateFormat = DateFormat dateFormat =

DateFormat.getDateInstance(DateFormat.getDateInstance(DateFormat.SHORT);DateFormat.SHORT);

JFormattedTextField data = new JFormattedTextField data = new JFormattedTextField(dateFormat);JFormattedTextField(dateFormat);

data.setValue(new Date());data.setValue(new Date());

Page 42: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

42

JSliderJSlider

Page 43: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

43

JComboBoxJComboBox

Page 44: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

44

JComboBoxJComboBoxpublic class ComboPanel extends JPanel {public class ComboPanel extends JPanel { String choices[] = { "Mercury", "Venus", "Earth", String choices[] = { "Mercury", "Venus", "Earth",

"Mars", "Jupiter", "Saturn", "Mars", "Jupiter", "Saturn", "Uranus","Neptune", "Pluto"};"Uranus","Neptune", "Pluto"};

public ComboPanel() {public ComboPanel() { JComboBox combo1 = new JComboBox();JComboBox combo1 = new JComboBox(); JComboBox combo2 = new JComboBox();JComboBox combo2 = new JComboBox(); for (int i=0;i<choices.length;i++) {for (int i=0;i<choices.length;i++) { combo1.addItem (choices[i]);combo1.addItem (choices[i]); combo2.addItem (choices[i]);combo2.addItem (choices[i]); }} combo2.setEditable(true);combo2.setEditable(true); combo2.setSelectedItem("X");combo2.setSelectedItem("X"); combo2.setMaximumRowCount(4);combo2.setMaximumRowCount(4); add(combo1);add(combo1); add(combo2);add(combo2); }}}}

Page 45: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

45

JMenuJMenu

Page 46: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

46

JPopupMenuJPopupMenu

Page 47: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

47

JPopupMenuJPopupMenu

public class PopupPanel extends JPanel {public class PopupPanel extends JPanel { JPopupMenu popup = new JPopupMenu ();JPopupMenu popup = new JPopupMenu (); public PopupPanel() {public PopupPanel() { JMenuItem item;JMenuItem item; popup.add (item = new JMenuItem popup.add (item = new JMenuItem ("Cut"));("Cut"));

popup.add (item = new JMenuItem popup.add (item = new JMenuItem ("Copy"));("Copy"));

popup.add (item = new JMenuItem popup.add (item = new JMenuItem ("Paste"));("Paste"));

popup.addSeparator();popup.addSeparator(); popup.add (item = new JMenuItem popup.add (item = new JMenuItem ("Select All"));("Select All"));

Page 48: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

48

JListJList

Page 49: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

49

JListJList

public class ListPanel extends JPanel {public class ListPanel extends JPanel { String label [] = {"Cranberry", "Orange", String label [] = {"Cranberry", "Orange", "Banana", "Kiwi", "Blueberry", "Banana", "Kiwi", "Blueberry", "Pomegranate", "Apple", "Pear", "Pomegranate", "Apple", "Pear", "Watermelon", "Raspberry", "Snozberry""Watermelon", "Raspberry", "Snozberry" };}; public ListPanel() {public ListPanel() { setLayout (new BorderLayout());setLayout (new BorderLayout()); JList list = new JList(label);JList list = new JList(label); JScrollPane pane = new JScrollPane pane = new JScrollPane(list);JScrollPane(list);

add(pane, BorderLayout.CENTER);add(pane, BorderLayout.CENTER); }}}}

Page 50: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

50

JTableJTable

Page 51: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

51

Componentes Avançados SwingComponentes Avançados Swing

• JTree e JTable são exemplos de JTree e JTable são exemplos de componentes mais avançados SWING.componentes mais avançados SWING.

• Tabelas e Árvores:Tabelas e Árvores:– http://www.oracle.com/technetwork/java

/javase/documentation/index.html

Page 52: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

52

Manipulação de EventosManipulação de EventosEventos: O que são?Eventos: O que são?

• São ações dos usuários na interface São ações dos usuários na interface gráfica.gráfica.– Quando uma ação é executada,

eventos são gerados. • Eventos são objetos que descrevem o Eventos são objetos que descrevem o

que ocorreu. que ocorreu. – Existem diversos tipos de classes de

eventos para descrever diferentes categorias gerais de ações do usuário.

Page 53: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

53

Como os eventos são Como os eventos são processados?processados?

• Através de um modelo de delegação Através de um modelo de delegação de eventos.de eventos.– Os componentes implementam

rotinas de manipulação de eventos (listener) com o objetivo de receber eventos.

– Suporte a eventos está no pacote: java.awt.event.

Page 54: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

54

Esquema do modelo de Esquema do modelo de delegaçãodelegação

Action handlerBUTTON

PANEL

FRAMEPanel e Frameevent handlers

Action event

actionPerformed (ActionEvent e){…….}

Page 55: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

55

Exemplo: delegaçãoExemplo: delegação

import java.awt.*;import java.awt.*;import java.awt.event.*;import java.awt.event.*;class ButtonHandler implements ActionListener {class ButtonHandler implements ActionListener { public void actionPerformed (ActionEvent e){public void actionPerformed (ActionEvent e){ System.out.println ("Acao executada");System.out.println ("Acao executada"); }}}}public class TesteButton {public class TesteButton { public static void main (String args[])public static void main (String args[]) {{ Frame f = new Frame("Teste de evento");Frame f = new Frame("Teste de evento"); Button b = new Button ("Pressione me!");Button b = new Button ("Pressione me!"); b.addActionListener (new ButtonHandler());b.addActionListener (new ButtonHandler()); f.add ("Center",b);f.add ("Center",b); f.pack();f.pack(); f.setVisible(true);f.setVisible(true); }}}}

Page 56: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

56

Eventos gerados pelos Eventos gerados pelos componentescomponentes• Cada componente possui um conjunto Cada componente possui um conjunto

de tipos de eventos a ele associado.de tipos de eventos a ele associado.• Os componentes que podem gerar Os componentes que podem gerar

eventos de ações possuem métodos eventos de ações possuem métodos para adicionar ou remover “listeners”.para adicionar ou remover “listeners”.– addActionListener– removeActionListener

Page 57: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

57

Interface de eventos listener da Interface de eventos listener da AWTAWT

Interface Listener Classe Adapter MétodosActionListener ---------- actionPerformed(ActionEvent)AdjustmentListener --------- adjustmentValueChanged(adjustmentEvent)ComponentListener ComponentAdapter componentHidden(ComponentEvent)

componentMoved(ComponentEvent)componentRezised(ComponentEvent)componentShown(ComponentEvent)

ContainerListener ContainerAdapter componentAdded(ContainerEvent)componentRemoved(ContainerEvent)

FocusListener FocusAdapter focusGained(FocusEvent)focusLost(FocusEvent)

ItemListener -------- itemStateChanged(ItemEvent)KeyListener KeyAdapter keyPressed(KeyEvent)

keyReleased(KeyEvent)keyTyped(KeyEvent)

MouseListener MouseAdapter mouseClicked(MouseEvent)mouseEntered(MouseEvent)mouseExited(MouseEvent)mousePressed(MouseEvent)mouseRealesed(MouseEvent)

Page 58: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

58

Interface de eventos listener da Interface de eventos listener da AWT AWT

Interface Listener Classe Adapter MétodosMouseMotionListener MouseMotionAdapter mouseDragged (MouseEvent)

mouseMoved(MouseEvent)TextListener ------ textValueChange(TextEvent)WindowListener WindowAdapter windowActived(WindowEvent)

windowClosed(WindowEvent)windowClosing(WindowEvent)windowDeactivated(WindowEvent)windowDeiconified(WindowEvent)windowIconified(WindowEvent)windowOpened(WindowEvent)

Page 59: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

59

• A classe AWTEventA classe AWTEvent– Cada método de cada interface “listener” dos Cada método de cada interface “listener” dos

eventos, possui um único argumento: uma eventos, possui um único argumento: uma instância de uma classe que descende da instância de uma classe que descende da classe java.awt.AWTEvent.classe java.awt.AWTEvent.

– Esta classe não define nenhum método ou API Esta classe não define nenhum método ou API que o usuário, usualmente, necessite. que o usuário, usualmente, necessite. Contudo, herda um método útil da classe Contudo, herda um método útil da classe java.util.EventObject;java.util.EventObject;• Object getSourceObject getSource: retorna o objeto que : retorna o objeto que

gerou o eventogerou o evento

A hierarquia de classes de eventos

Page 60: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

60

A hierarquia de classes de eventos

ActionEvent AdjustmentEvent

ContainerEvent FocusEvent

KeyEvent MouseEvent

InputEvent WindowEvent

ComponentEvent ItemEvent TextEvent

AWTEvent

java.util.EventObject

java.lang.Objet

Page 61: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

61

Utilizando JOption PaneUtilizando JOption Pane

• É utilizado para mostrar mensagens de É utilizado para mostrar mensagens de diálogo para o usuáriodiálogo para o usuário

• Fica no pacote javax.swingFica no pacote javax.swing• Permite:Permite:

– Mensagens solicitando entrada de dados– Mensagens solicitando resposta à um

questionamento– Mensagens de informação

Page 62: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

62

Tipos de MensagensTipos de Mensagens

• São pré definidas em constantes da classe São pré definidas em constantes da classe JOptionPaneJOptionPane

• Descrição:Descrição:– PLAIN_MESSAGE– INFORMATION_MESSAGE– ERROR_MESSAGE– WARNING_MESSAGE– QUESTION_MESSAGE

Page 63: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

63

Métodos de JOptionPaneMétodos de JOptionPane

• showMessageDialog()showMessageDialog()• showInputDialog()showInputDialog()• showConfirmDialog()showConfirmDialog()

Page 64: Desenvolvimento de Interfaces Gráficas Ms. Christien L. Rachid FUPAC E-Mail: christienrachid@gmail.com

64

ConclusõesConclusões

• AWT e SWING permitem a construção de AWT e SWING permitem a construção de interfaces gráficas portáveis entre interfaces gráficas portáveis entre resoluções gráficas e plataformasresoluções gráficas e plataformas

• Modelo de eventos Java é avançado e Modelo de eventos Java é avançado e permite separação clara entre código de permite separação clara entre código de negócios e implementaçãonegócios e implementação

• API SWING é realmente OO e permite a API SWING é realmente OO e permite a construção de aplicações MVCconstrução de aplicações MVC