gui - eventos
Post on 06-May-2015
690 Views
Preview:
DESCRIPTION
TRANSCRIPT
GUIEventos
Mario Jorge Pereiramariojp@gmail.com
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
Fontes, Eventos, Ouvintes
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)
Exemplo (2/3)
public class OuvinteBotao implements ActionListener{
public void actionPerformed(ActionEvent e) { System.out.println("tarefa do botao"); }
}
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!"); }}
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”
Listeners
Cada evento tem uma interface Listener correspondenteActionEvent: ActionListenerMouseEvent: MouseListener e MouseMotionListener
ItemEvent: ItemListenerAdjustmentEvent: AdjustmentListenerTextEvent: TextListenerWindowEvent: WindowListenerFocusEvent: FocusListener“...Event”: “...Listener”
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);
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
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();
}
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); }
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)
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!"); } } } ...}
Eventos, Listeners e Métodos
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”
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());
} } ); ( ... )
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)
top related