Pois é! O feijãozinho é poderoso mesmo!!!
Num projeto do período passado (na verdade um antigo projeto de pesquisa) estava implementando um joguinho em java. Um grande problema que enfrentamos era o fato da Java2D ser algo que não parecia dar muito certo em se tratando de OO. Resultado, ficamos com um código extremamente acoplado, com algumas classes que claramente não precisariam existir.
Uma coisa que parecia contribuir diretamente para isso era o fato de não conseguir um tipo de classe que pudesse se “auto-desenhar”. Pois hoje encontrei a solução pra isso, (pena que o período terminou) e de fato entendi, porque a Java2D foi feita com o intuito de dar suporte a código estilo script (aliás,… deve ficar muito legal o uso dela com Jython, mas isso será assunto pra outro post =P). A solução responde pelo nome: JavaBeans!
JavaBeans na verdade são nada menos que um padrão de codificação, que torna classes como “componentes” que facilitam o trabalho com ferramentas RAD. Na verdade a idéia de existirem os beans, foi baseada nessas ferramentas. Os beans precisam respeitar as seguintes características:
- Serem objetos passíveis de Serialização (basta que implementem Serializable)
- Possuirem métodos get e set suficientes para acessar e modificar todas os seus atributos (que nas ferramentas RAD ganham o nome de propriedades)
- Terem suas propriedades encapsuladas.
Então para fazer um exemplo, vamos implementar um bean pra um LED, que fica vermelho quando desligado e verde quando ligado. Este bean poderia ser muito bem utilizado em softwares que fazer tarefas custosas e ficam muito tempo executando alguma tarefa em background. O segue o código:
package gui.led;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.Serializable;
public class Led extends Component implements Serializable {
private static final long serialVersionUID = 7355872533852927256L;
private boolean on = false;
public Led() {
turnOff();
setSize(getPreferredSize());
setBackground(Color.LIGHT_GRAY);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Dimension d = getSize();
g.drawOval(0, 0, d.width -1 , d.height -1);
if (isOn()){
g.setColor(Color.GREEN);
} else {
g.setColor(Color.RED);
}
g.fillOval(2, 2, d.width -4 , d.height -4);
}
public Dimension getMinimumSize(){
return new Dimension(10,10);
}
public Dimension getPreferredSize(){
return new Dimension(15,15);
}
public boolean isOn() {
return on;
}
public void setOn(boolean on) {
this.on = on;
repaint();
}
public void turnOn(){
setOn(true);
}
public void turnOff(){
setOn(false);
}
}
veja que o legal desse bean é que ele sabe como se pintar na tela! Isso é possível porque ele é uma classe filha de Component, o que é outra possibilidade de criação de JavaBeans, tornando-os extremamente ricos em funcionalidade. Para testar o led, use o seguinte código:
package gui.led;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Beans;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class LedTest extends JFrame {
private static final long serialVersionUID = 2433551141174922287L;
private Led led;
private JButton bLiga, bDesliga;
public LedTest() {
super("LedTest");
try {
led = (Led) Beans.instantiate(null, "gui.led.Led");
} catch (Exception e) {
e.printStackTrace();
}
bDesliga = new JButton("Desliga");
bDesliga.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
led.turnOff();
System.out.println("Desligando...");
}
});
bLiga = new JButton("Liga");
bLiga.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
led.turnOn();
System.out.println("Ligando...");
}
});
JPanel p = new JPanel();
p.add(led);
p.add(bLiga);
p.add(bDesliga);
setContentPane(p);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
public static void main(String[] args) {
new LedTest().setVisible(true);
}
}
Resultado, fica como na figura abaixo:
Isso é tudo por hoje….
Feliz Páscoa a todos!
Abraço,


Aew homi!
Agora a gente pode comentar! \o/
Ficou arretado teu blog novo.
Abração e Feliz páscoa
Agora sim, hein? Até pra mim, facilitou bastante!
Abraço,