GUI - Eventos

18

Click here to load reader

description

Introdução ao uso de Eventos em aplicações gráficas em java utilizando Swing.

Transcript of GUI - Eventos

Page 1: GUI - Eventos

GUIEventos

Mario Jorge [email protected]

Page 2: GUI - Eventos

Eventos

Eventos em Java são objetosSubclasses de java.util.EventObject

Todo evento tem um objeto que é sua fonteObject fonte = evento.getSource();

Métodos de ouvintes (listeners) que desejam tratar eventos, recebem eventos como argumentopublic void eventoOcorreu(EventObject evento) {

Object fonte = evento.getSource();

System.out.println("" +evento+ " em " +fonte);

}

Ouvintes precisam ser registrados nas fontesQuando ocorre um evento, um método de todos os ouvintes

registrados é chamado e evento é passado como argumento

Page 3: GUI - Eventos

Fontes, Eventos, Ouvintes

Page 4: GUI - Eventos

Exemplo (1/3)

... (não esqueça dos imports)public class Janela extends JFrame { private JButton b1 = new JButton("Ligar"); private JButton b2 = new JButton("Desligar"); public Janela(String nome) { super(nome); this.setLayout(new GridLayout(2,1)); this.add(b1); this.add(b2); OuvinteBotao ouvinteBotao = new OuvinteBotao(); OuvinteMouse ouvinteMouse = new OuvinteMouse(); b1.addActionListener(ouvinteBotao); b2.addActionListener(ouvinteBotao); b2.addMouseListener(ouvinteMouse); this.setSize(400,350); this.setVisible(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); }... (crie um main para iniciar a janela)

Page 5: GUI - Eventos

Exemplo (2/3)

public class OuvinteBotao implements ActionListener{

public void actionPerformed(ActionEvent e) { System.out.println("tarefa do botao"); }

}

Page 6: GUI - Eventos

Exemplo (3/3)

...public class OuvinteMouse implements MouseListener { public void mouseClicked(MouseEvent e) { System.out.println("clicou o mouse!"); } public void mousePressed(MouseEvent e) { System.out.println("pressionou o mouse!"); } public void mouseReleased(MouseEvent e) { System.out.println("soltou o mouse!"); } public void mouseEntered(MouseEvent e) { System.out.println("mouse sobre a área!"); } public void mouseExited(MouseEvent e) { System.out.println("mouse saiu da área!"); }}

Page 7: GUI - Eventos

Tipos de Eventos

Herdam da classe java.awt.event.AWTEvent, são divididos em categorias (java.awt.event) e os principais são: ActionEvent (componentes de ação)MouseEvent (componentes afetados pelo mouse)ItemEvent (checkboxes radios e outros)AdjustmentEvent (scrollbars)TextEvent (componentes de texto)WindowEvent (janelas)FocusEvent (componentes em geral)“...Event”

Page 8: GUI - Eventos

Listeners

Cada evento tem uma interface Listener correspondenteActionEvent: ActionListenerMouseEvent: MouseListener e MouseMotionListener

ItemEvent: ItemListenerAdjustmentEvent: AdjustmentListenerTextEvent: TextListenerWindowEvent: WindowListenerFocusEvent: FocusListener“...Event”: “...Listener”

Page 9: GUI - Eventos

Fonte x Listener

Quando ocorre um evento todos os listeners registrados são notificadosPara registrar um listener na fonte:fonte.add<Listener>(referência_para_listener);

Exemplo:JButton button = new JButton("Fonte");

ActionListener ouvinte1 = new OuvinteDoBotao();

MouseListener ouvinte2 = new OuvinteDeCliques();

button.addActionListener(ouvinte1);

button.addMouseListener(ouvinte2);

Um objeto pode ser fonte e listener ao mesmo tempothis.addWindowListener(this);

Page 10: GUI - Eventos

Implementando um Listener

Em uma classe declare implementar os listeners dos eventos que voce vai escutarpublic class MeuListener implements ActionListener, ItemListener { ... }

Implemente os métodos da interfacepublic void actionPerformed(ActionEvent e) {...}

public void itemStateChanged(ItemEvent e) {...}

DICAS: Todos os métodos são public void

Todos recebem o tipo de evento correspondente ao tipo do listener como argumento

Page 11: GUI - Eventos

Listeners e métodos

Cada listener possui métodos que você deve implementar:public void actionPerformed(ActionEvent evt)

Cada evento possui métodos que você pode chamar dentro do listener para obter as informações desejadas:String comando = actionEvent.getActionCommand();

Componente (fonte) possui métodos que você pode chamar para obter informações sobre ele:Object fonte = evento.getSource();

if (fonte instanceof JButton) {

JButton b = (JButton) fonte;

String label = b.getLabel();

}

Page 12: GUI - Eventos

Exemplo (1/3)

... (não esqueça dos imports)public class Janela extends JFrame implements WindowListener{ private JButton b1 = new JButton("Click!"); public Janela(String nome) { super(nome); this.setSize(400,300); this.setLayout(null); this.add(b1); b1.setBounds(10, 100, 150, 50); OuvinteMouse ouvinteMouse = new OuvinteMouse(); b1.addMouseListener(ouvinteMouse); this.addWindowListener(this);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); this.setVisible(true); }

Page 13: GUI - Eventos

Exemplo (2/3)

public void windowOpened(WindowEvent e) { System.out.println("Janela aberta!"); } public void windowClosing(WindowEvent e) { System.out.println("Fechado Janela!"); } public void windowClosed(WindowEvent e) { System.out.println("Janela Fechada!"); } public void windowIconified(WindowEvent e) { System.out.println("Janela minimizada!"); } public void windowDeiconified(WindowEvent e) { System.out.println("Janela Restaurada!"); } public void windowActivated(WindowEvent e) { System.out.println("Janela Ativada!"); } public void windowDeactivated(WindowEvent e) { System.out.println("Janela Desativada!"); }... (crie um main para iniciar a janela)

Page 14: GUI - Eventos

Exemplo (3/3)

...public class OuvinteMouse implements MouseListener { ... public void mouseEntered(MouseEvent e) { System.out.println("mouse sobre o botao!"); Object fonte = e.getSource(); if (fonte instanceof JButton) { JButton b = (JButton) fonte; if (b.getLocation().getX() == 10){ b.setLocation(200, 100); b.setText("Tente novamente!"); }else{ b.setLocation(10, 100); b.setText("Click!"); } } } ...}

Page 15: GUI - Eventos

Eventos, Listeners e Métodos

Page 16: GUI - Eventos

Adapters

Alguns listeners possuem uma classe Adapter Implementa todos os métodos, sem instruções, ou seja,

implementação vazia: {}Existem apenas para listeners que têm mais de um método

Úteis quando um Ouvinte precisa implementar apenas um dentre vários métodos de um ListenerPode sobrepor a implementação desejada do método do

Adapter e não precisa se preocupar com os outrosNão são úteis em ouvintes que já estendem outras classes

ou quando implementam diferentes listenersAlguns Adapters:

MouseListener: MouseAdapter

WindowListener: WindowAdapter

“...Listener”: “...Adapter”

Page 17: GUI - Eventos

Tratamento de eventos com classes internas

É comum utilizar-se classes anônimas no tratamento de eventos de uma GUIUma das grandes vantagens é a possibilidade de enxergar

os componentes que geralmente são atributos privateExemplo:

b1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

tf.setText(e.getActionCommand());

} } );

b2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

tf.setText(e.getActionCommand());

} } ); ( ... )

Page 18: GUI - Eventos

Exercício

1. Implemente os eventos para a aplicaçãoCopiar deve acrescentar o texto do JTextField

noJEditorPane e limpar o JTextFieldLimpar deve limpar o JTextFieldSair deve sair do programa

2. Implemente os botões como itens do menu "Operações"Use JMenuBar, JMenu e JMenuItem

3. Implemente um JToggleButton "desenhar/escrever" que troque o JTextPane por um JCanvas e permita rabiscar com o mouse (use MouseEvent)