Caminho de Navegação Java / Artigos / 12º aula de java

Java

 

Nenhuma avalição
Indique ao Ueba Indique ao BlogBlogs Indique ao Delicious Indique ao Technorati Indique ao Google Bookmarks Indique ao Newsgator
TAGS

Nenhuma tag foi definida ainda!

Defina as tags para esta página preenchendo o campo abaixo.

  • Máximo de 100 tags
  • Cada tag deve ter até 20 caracteres.
  • Separar as tags com virgula. Ex.: php, sql, html, xml, fireworks
COMENTAR

INDICAR
Nome do amigo: E-mail do amigo: Comentário:
REPORTAR ERRO Descreva o erro:

12º aula de javaPostada em: 19/05/2005

David Ramires
Por: David Ramires Nº de Visualizações: 4219.



Janelas e eventos

Na aula anterior vimos exemplos de programas com interface gráfica na forma de janelas. Esse tipo de interface está intrinsecamente ligado a eventos.

Cada vez que o usuário pressiona alguma tecla, move o mouse, clica o mouse etc, dizemos que na interação do usuário com a interface do programa um evento aconteceu. Um evento pode ser entendido como um acontecimento ao longo do tempo de que não temos garantia de quando, onde, ou mesmo de que sequer aconteça.

Quando um evento acontece o programa Java é avisado pelo sistema operacional e se desejar deve tratar o evento. Como há eventos acontecendo o tempo todo, cada programa deve tratar os eventos que lhe são pertinentes.

Os programas Java incorporam o conceito de “escutadores” (ou “ouvintes”) de evento. Na API há uma série de interfaces que representam esses “escutadores” e que podem ser implementadas nos programas. Cada programa implementa os escutadores que lhe interessam.

Nossas classes janelas, derivadas de JFrame, podem implementar as interfaces de ouvintes, e até mais de uma se for necessário. Uma só classe de janela pode implementar, por exemplo, as interfaces dos ouvintes de eventos de mouse e de eventos de ações do usuário.




Exemplo:

class Janela extends JFrame
implements ActionListener, MouseListener {
. . .
. . .


As interfaces tem métodos que devem ser implementados nas nossas classes, e assim as classes passam a ser esses tais “ouvintes de eventos”. Ao invés de fazer nossas próprias janelas implementarem as interfaces, podemos criar classes para serem os ouvintes e depois usá-las nas janelas.


Outro item importante é o componente de interface que gera o evento, seja um botão, uma barra deslizante etc, ou a própria janela. Cada gerador de eventos deve ser associado a um ouvinte para que este possa então processar os eventos gerados.

Exemplo:

class Janela extends JFrame implements ActionListener
. . .
Button bt = new Button(\"CANCELA\");
bt.addActionListener(this);
. . .

O outro componente a ser considerado no modelo de tratamento de eventos é um objeto que representa o evento, de uma das várias classes de eventos da API e que tem vários métodos que nos são úteis para captar dados sobre os eventos e poder tratá-los. Esses objetos são passados aos métodos de tratamento de eventos das interfaces como parâmetros.

Exemplo:

public void mouseClicked(MouseEvent me) {
System.out.println(\"x=\" + me.getX() + \"y=\"+ me.getY() );


Como nos exemplos da aula passada, veremos um exemplo de programa com uma janela e tratamento de eventos.

//////////////////////////////////////////////
// programa

class JanelaTeste3
{
public static void main(String[] args)
{
Janela3 jan = new Janela3();
jan.show();
}
}


///////////////////////////////////////////////////////
// janela



import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

class Janela3 extends JFrame implements ActionListener
{
JMenuBar mb = new JMenuBar();
JMenu arquivo = new JMenu(\"Arquivo\");
JMenu ajuda = new JMenu (\"Ajuda\");
JMenuItem sair = new JMenuItem(\"Sair\");
JMenuItem sobre = new JMenuItem(\"Sobre\");

public Janela3() {

setTitle(\"Teste com Menu\");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

sair.addActionListener(this);
sobre.addActionListener(this);

arquivo.add(sair);
ajuda.add(sobre);

mb.add(arquivo);
mb.add(ajuda);

setJMenuBar(mb);

setSize(300,300);
setLocation(100,100);

}

public void actionPerformed(ActionEvent e) {

Object origem = e.getSource();

if (origem == sair)
{
System.exit(0);
}
if (origem == sobre)
{
}
}

}


Vamos melhorar o programa criando uma outra classe de janela para mensagens.


///////////////////////////////////////////////////////
// Mensagem


import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

class Mensagem extends JFrame implements ActionListener
{
public Mensagem(String txt) {

getContentPane().setLayout(null);

JLabel lab = new JLabel(txt);
lab.setBounds(50,50,200,30);

JButton bot = new JButton(\"Fechar\");
bot.setBounds(50,100,100,30);
bot.addActionListener(this);

getContentPane().add(lab);
getContentPane().add(bot);

setLocation(200,200);
setSize(300,200);
}

public void actionPerformed(ActionEvent e) {
setVisible(false);
}

}


Agora altere a classe Janela3 para exibir uma janela de mensagem quando o usuário escolher as opções Ajuda e Sobre no menu. Para tanto, coloque o código abaixo no lugar adequado do método ActionPerformed da classe Janela3.

Mensagem me = new Mensagem(\"Teste de eventos...\");
me.show();


Observe que a janela foi feita sem especificar o layout, e determinando o tamanho e localização dos componentes com o método setBounds.

Faça você uma nova janela conforme o desenho abaixo, acrescente uma opção de nome Agenda no menu Arquivo antes da opção Sair na Janela3, e faça com que a nova janela seja mostrada se o usuário escolher essa nova opção.





Vejamos abaixo um outro exemplo, mas com tratamento do click dou mouse.
Veja a documentação da classe Graphics e use outros métodos para testar os desenhos na janela.




//////////////////////////////////////////////
// programa


class JanelaTeste4
{
public static void main(String[] args)
{
Janela4 jan = new Janela4();
jan.show();
}
}


///////////////////////////////////////////////////////
// janela



import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

class Janela4 extends JFrame implements MouseListener
{
int x = 100, y = 100;

public Janela4() {

addMouseListener(this);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setSize(300,300);
setLocation(100,100);

}

public void paint(Graphics g) {
g.drawRect(x,y,50,30);
}

public void mouseClicked(MouseEvent me) {
x = me.getX();
y = me.getY();
repaint();
}
public void mouseReleased(MouseEvent me) { }
public void mousePressed(MouseEvent me) { }
public void mouseEntered(MouseEvent me) { }
public void mouseExited(MouseEvent me) { }

}


Bons estudos!!