Adding User Interaction if62c - Fundamentos de Programação 1/2014 professores Danillo Leal Belmonte (belmonte@utfpr.edu.br) e Robinson Vida Noronha (vida@utfpr.edu.br) 1
Estratégias Adicionar ações isoladas aos componentes. Criar classes específicas de ações e enviar instâncias dessas classes aos componentes. 2
Estratégias Isoladas em Componentes 3
O Listener do Mouse import javax.swing.jpanel; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MeuPainel extends JPanel { public MeuPainel() { super.addmouselistener( new MouseAdapter() { public void mousepressed(mouseevent e) { JOptionPane.showMessageDialog(null, "Clique em (" + e.getx() + ", " + e.gety() + ")" + " com o botao #" + e.getbutton()); ); 4
Métodos da Classe MouseAdapter A classe MouseAdapter disponibiliza ainda os seguinte métodos: void mouseclicked(mouseevent e) - Invoked when the mouse has been clicked on a component. void mouseentered(mouseevent e) - Invoked when the mouse enters a component. void mouseexited(mouseevent e) - Invoked when the mouse exits a component. void mousepressed(mouseevent e) - Invoked when a mouse button has been pressed on a component. void mousereleased(mouseevent e) - Invoked when a mouse button has been released on a component. 5
A Classe Janela, onde tudo ocorre... import java.awt.dimension; import java.awt.toolkit; import javax.swing.*; class Janela extends JFrame { private Dimension dimension; private int width = 640, height=480; public Janela(boolean fullscreen) {... private void centerwindow(){/*coloca a janela no centro*/ private void fullwindow() {/* tela cheia*/ 6
O Construtor da Classe Janela public Janela(boolean fullscreen) { /* Se fechar o formulário, encerra a aplicação*/ super.setdefaultcloseoperation(exit_on_close); /* Le as dimensões do display do equipamento do usuário.*/ dimension = Toolkit.getDefaultToolkit().getScreenSize(); if (fullscreen == true){ setundecorated(true); /* retira a borda*/ fullwindow(); /* método que estica o formulário */ else { centerwindow(); /* posiciona a janela no centro*/ 7
Definição o Local da Janela private void centerwindow() {setsize(width,height); /* width = 640, height = 480*/ int x = (int) ((dimension.getwidth() - this.getwidth()) / 2); int y = (int)((dimension.getheight() - this.getheight()) / 2); setlocation(x, y); private void fullwindow() { setlocation(0,0); setsize((int)dimension.getwidth(), (int)dimension.getheight()); 8
Exemplo de Uso da classe Janela public class Main { public static void main(string[] args) { Janela janela = new Janela(true); MeuPainel meupainel = new MeuPainel(); janela.add(meupainel); janela.setvisible(true); 9
Inserção de Botão e definição das suas ações 10
Eventos em Botão public class Main {! public static void main(string[] args) {!! Janela janela = new Janela(false);!! MeuPainel meupainel = new MeuPainel();!!!! JButton btsair = new JButton("Sair");!! btsair.addactionlistener (!!! new AbstractAction()!!! {public void actionperformed(java.awt.event.actionevent evt)!!! { if (JOptionPane.showConfirmDialog(null, "Deseja sair da aplicação?") == 0)System.exit(0);!!! );!! meupainel.add(btsair);!!!! janela.add(meupainel);!! janela.setvisible(true);! 11
Estratégia de Criação de Classes Específicas de Ações (programação orientada a eventos) 12
Criação e uso de uma classe filha de MouseAdapter 13
Classe Gerente de Mouse class GerenteMouse extends MouseAdapter { int cliquex, cliquey; JPanel j; public GerenteMouse(JPanel janela){j = janela; public void mousepressed(mouseevent evt) { public void mousereleased(mouseevent evt){ public void mouseclicked(mouseevent evt) { public void mouseentered(mouseevent evt) { public void mouseexited(mouseevent evt) { 14
Exemplo de Gerente de Mouse class GerenteMouse extends java.awt.event.mouseadapter { int cliquex, cliquey; JPanel j; public GerenteMouse(JPanel janela){j = janela; public void mousepressed(java.awt.event.mouseevent evt) { int r,g,b; r = (int)(255*math.random()); g = (int)(255*math.random()); b = (int)(255*math.random()); j.setbackground(new java.awt.color(r,g,b)); public void mousereleased(java.awt.event.mouseevent evt){ public void mouseclicked(java.awt.event.mouseevent evt) { public void mouseentered(java.awt.event.mouseevent evt) { public void mouseexited(java.awt.event.mouseevent evt) { 15
Uso do Gerente de Mouse public class Main {! public static void main(string[] args) {!! Janela janela = new Janela(false);!! MeuPainel meupainel = new MeuPainel();!!!! JButton btsair = new JButton("Sair");!! btsair.addactionlistener(!new AbstractAction()!!!! {@Override!!!! public void actionperformed(actionevent evt)!!!! { if (JOptionPane.showConfirmDialog(null!, "Deseja sair da aplicação?") == 0)System.exit(0);! );!!!! meupainel.add(btsair);!!!! JButton mudacor = new JButton("muda a cor");!! mudacor.addmouselistener(new GerenteMouse(meuPainel));!! meupainel.add(mudacor);!!!! janela.add(meupainel);!! janela.setvisible(true);! 16
Classe Acoes class Acoes implements java.awt.event.actionlistener { public void actionperformed(java.awt.event.actionevent evt) { if (evt.getsource() instanceof JButton ) { JButton quem = (JButton)evt.getSource(); if (quem.getactioncommand() == "Sair 2") System.exit(0); 17
Uso de instância da classe Acoes...!! JButton btsair2 = new JButton("Sair 2");!! btsair2.addactionlistener(new Acoes());!! meupainel.add(btsair2);... 18
Listener do Teclado class MonitoraTeclado implements java.awt.event.keylistener {! public void keypressed(keyevent e) {! public void keyreleased(keyevent e) {!!! public void keytyped(keyevent e) { 19
Exemplo de Listener de Teclado class MonitoraTeclado implements java.awt.event.keylistener {! public void keypressed(keyevent e) {!! if (e.getkeycode() == KeyEvent.VK_LEFT)!! { System.out.println("LEFT"); if (e.getkeycode() == KeyEvent.VK_RIGHT) {System.out.println("RIGHT"); if (e.getkeycode() == KeyEvent.VK_DOWN) {System.out.println("DWON"); if (e.getkeycode() == KeyEvent.VK_UP) {System.out.println("UP");!! public void keyreleased(keyevent e) {!!! public void keytyped(keyevent arg0)! {System.out.println("Voce pressionou : " + e); 20
Uso da classe MonitoraTeclado...... meupainel.addkeylistener(new MonitoraTeclado()); meupainel.setfocusable(true);... JTextField texto = new JTextField(20); texto.addkeylistener(new MonitoraTeclado()); meupainel.add(texto);... 21
Tarefa para sedimentar os conceitos Programar uma calculadora com interface gráfica que permita executar as quatro operações básicas (somar, subtrair, multiplicar e dividir). fim 22