¿Cómo animar un rostro en java?

Tengo el siguiente código que dibuja una cara... Lo que pretendo es que al hacer click en el rostro este cambie de expresión.. Por ejemplo de triste a feliz.. Que cuando esta triste salga un letrero que diga que esta triste y cuando esta feliz también.. Y por ultimo que los ojos sigan al cursor del mouse... Todo esto se hace con eventos del mouse pero no se manejarlos... Si puedes ayudarme te lo agradecería mucho. El codig es el siguiente:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
// Clase de control del ejemplo
public class Cara extends JFrame{
public static void main( String[] args ) {
JFrame f = new JFrame( "Trabajo Final" );
JTextField tf=new JTextField(15);
//Container cp=getContentPane();
// Clase anidada para controlar el cierre de la ventana y
// concluir la aplicación
f.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent evt ) {
System.exit( 0 );
}
});
// Creamos una instancia de la carita y la incorporamos al Frame
f.add( new CaraS( Color.yellow),BorderLayout.CENTER );
f.pack();
f.setBackground(Color.lightGray);
// Lo hacemos todo visible en pantalla
f.setVisible(true);
}
}
class CaraS extends Canvas {
// Constructor, que solamente fija el color de la carita
public CaraS( Color _colorCara ) {
setForeground( _colorCara );
}
public Dimension getPreferredSize() {
return new Dimension( 250,250 );
}
// Este el el método de verdad que pinta, y lo hace cada vez que
// el AWT le indica que lo haga
public void paint( Graphics g ) {
// Calculamos dinámicamente todos los tamaños, de forma que
// el canvas se puede cambiar externamente
// La circunferencia que forma la carita, siempre utiliza
// como dimensión para el diámetro la dimensión más pequeña
// de la ventana en que se encuentra
Dimension tamano = getSize();
// Calculamos el diámetro total de la carita
int diam = Math.min( tamano.width,tamano.height );
// Fijamos el diámetro de los ojos a un décimo del de la cara
int diamOjo = diam/10;
// Calculamos el centro
int x = (tamano.width-diam) / 2;
int y = (tamano.height-diam) / 2;
// Pintamos la cara, a la cual ya le ha fijado el color el
// constructor de la clase
g.fillOval( x,y,diam,diam );
g.setColor( Color.black);
g.drawOval( x,y,diam,diam );
// Pintamos los dos ojos de la carita
g.fillOval( x+diam/3-(diamOjo/2),y+diam/3-(diamOjo/2),
diamOjo,diamOjo );
g.fillOval( x+(2*(diam/3))-(diamOjo/2),y+diam/3-(diamOjo/2),
diamOjo,diamOjo );
// Pintamos la boca de la carita
//g.drawArc( x+diam/4,y+2*(diam/5),diam/2,diam/3,0,-180 );
g.drawArc( x+diam/4,y+2*(diam/4),diam/2,diam/2,0,+180 );
}
}

1 respuesta

Respuesta
1
El único evento del mouse que manejo es el action listener te puedo dar la dirección de un manual que te ayude con el código faltante www.programacion.com
Zona java busca el manual de swing
Hola novasoft... muchas gracias por su ayuda... pero ahora tengo otra duda...
Tengo que hacer este código en applet... y cuando lo compilo en mi computadora y lo corro hace lo que debería... pero en otra computadora no abre la aplicación... ¿a qué se debe?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
public class Cara extends java.applet.Applet {
public void init() {
JFrame f = new JFrame( "Trabajo Final" );
// Creamos una instancia de la carita y la incorporamos al Frame
f.add( new CaraS( Color.yellow),BorderLayout.CENTER );
f.pack();
f.setBackground(Color.lightGray);
f.setVisible(true);
}
}
class CaraS extends Canvas {
static final int BLANCO=0,TRISTE=1,FELIZ=2;
int estado = BLANCO;
int Kra=TRISTE;
int r;
int posX;
int posY;
Point p;
public CaraS( Color _colorCara ) {
setForeground( _colorCara );
addMouseListener(new ML());
addMouseMotionListener(new MML());
}
public Dimension getPreferredSize() {
return new Dimension( 600,600 );
}
public void paint( Graphics g ) {
Dimension tamano = getSize();
int diam = Math.min( tamano.width,tamano.height );
int diamOjo = diam/10;
int diamOjo2 = diam/(int)(18.5);
int x = (tamano.width-diam) / 2;
int y = (tamano.height-diam) / 2;
g.fillOval( x,y,diam,diam );
g.setColor( Color.black);
g.drawOval( x,y,diam,diam );
g.fillOval( x+diam/3-(diamOjo/2),y+diam/3-(diamOjo/2),
diamOjo,diamOjo );
g.fillOval( x+(2*(diam/3))-(diamOjo/2),y+diam/3-(diamOjo/2),
diamOjo,diamOjo );
//g.fillOval( x+diam/3-(diamOjo2/2),y+diam/3-(diamOjo2/2),
//diamOjo2,diamOjo2 );
//g.fillOval( x+(2*(diam/3))-(diamOjo2/2),y+diam/3-(diamOjo2/2),
//diamOjo2,diamOjo2 );
g.setColor(Color.black);
if(estado==TRISTE)
{
g.setColor(Color.black);
g.drawArc( x+diam/4,y+2*(diam/5),diam/2,diam/3,0,-180 );
if(p.x<250&&p.y<250)
{ g.setColor(Color.red);
// g.drawString("O",x+diam/3-(diamOjo2/2),y+diam/3-(diamOjo2/2));
// g.drawString("O",x+(2*(diam/3))-(diamOjo2/2),y+diam/3-(diamOjo2/2));
g.fillOval(x+diam/3-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.drawOval(x+diam/3-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2 );
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2 );
}
if(p.x>250&&p.y<250)
{ g.setColor(Color.red);
// g.drawString(" O",x+diam/3-(diamOjo2/2),y+diam/3-(diamOjo2/2));
// g.drawString(" O",x+(2*(diam/3))-(diamOjo2/2),y+diam/3-(diamOjo2/2));
g.fillOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.drawOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
}
if(p.x<250&&p.y>250)
{ g.setColor(Color.red);
//g.drawString("O",x+diam/3-(diamOjo2/2),y+(int)(diam*2.4)/(int)(6.97)-(diamOjo2/2));//ojo DER
//g.drawString("O",x+(2*(diam/3))-(diamOjo2/2),y+(int)(diam*2.4)/(int)(6.97)-(diamOjo2/2));
g.fillOval(x+diam/3-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.drawOval(x+diam/3-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-(diamOjo2)*(int)(3.6),diamOjo2,diamOjo2);
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
}
if(p.x>250&&p.y>250)
{ g.setColor(Color.red);
g.fillOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.drawOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
//g.drawString(" O",x+diam/(int)(3.8)-(diamOjo2/1),y+(int)(diam*2.4)/(int)(6.97)-(diamOjo2/2));
//g.drawString(" O",x+((int)(2.8)*(diam/(int)(3.4)))-(diamOjo2/1),y+(int)(diam*2.4)/(int)(6.97)-(diamOjo2/2));
}
g.setColor(Color.black);
switch(r)
{
case 0:g.drawString("SOY UN APPLET",posX,posY);
break;
case 1:g.drawString("COME FRUTAS Y VERDURAS",posX,posY);
break;
case 2:g.drawString("A VECES ESTOY FELIZ",posX,posY);
break;
case 3:g.drawString("A VECES ESTOY TRISTE",posX,posY);
break;
case 4:g.drawString("OBEDECERE AL PROFESOR!!!",posX,posY);
break;
}
}
if(estado==FELIZ)
{
g.setColor(Color.black);
g.drawArc( x+diam/4,y+2*(diam/3),diam/2,diam/3,0,+180 );
if(p.x<250&&p.y<250)
{ g.setColor(Color.red);
//g.drawString("O",x+diam/3-(diamOjo2/2),y+diam/3-(diamOjo2/2));
//g.drawString("O",x+(2*(diam/3))-(diamOjo2/2),y+diam/3-(diamOjo2/2));
g.fillOval(x+diam/3-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.drawOval(x+diam/3-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
}
if(p.x>250&&p.y<250)
{ g.setColor(Color.red);
// g.drawString(" O",x+diam/3-(diamOjo2/2),y+diam/3-(diamOjo2/2));
// g.drawString(" O",x+(2*(diam/3))-(diamOjo2/2),y+diam/3-(diamOjo2/2));
g.fillOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.drawOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2 );
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2 );
}
if(p.x<250&&p.y>250)
{ g.setColor(Color.red);
g.fillOval(x+diam/3-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-(diamOjo2)*(int)(3.6),diamOjo2,diamOjo2);
g.drawOval(x+diam/3-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-(diamOjo2)*(int)(3.6),diamOjo2,diamOjo2);
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
}
if(p.x>250&&p.y>250)
{ g.setColor(Color.red);
g.fillOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.drawOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
}
g.setColor(Color.black);
switch(r)
{
case 0:g.drawString("COME FRUTAS Y VERDURAS",posX,posY);
break;
case 1:g.drawString("HOLA",posX,posY);
break;
case 2:g.drawString("JUAN ME HIZO",posX,posY);
break;
case 3:g.drawString("NADA CON EXCESO",posX,posY);
break;
case 4:g.drawString("A VECES ESTOY FELIZ",posX,posY);
break;
}
}
if(estado==BLANCO)
{
g.setColor(Color.black);
g.drawArc( x+diam/4,y+2*(diam/5),diam/2,diam/3,0,-180 );
if(p.x<250&&p.y<250)
{ g.setColor(Color.black);
//g.drawString("O",x+diam/3-(diamOjo2/2),y+diam/3-(diamOjo2/2));
//g.drawString("O",x+(2*(diam/3))-(diamOjo2/2),y+diam/3-(diamOjo2/2));
{ g.setColor(Color.red);
//g.drawString("O",x+diam/3-(diamOjo2/2),y+diam/3-(diamOjo2/2));
//g.drawString("O",x+(2*(diam/3))-(diamOjo2/2),y+diam/3-(diamOjo2/2));
g.fillOval(x+diam/3-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.drawOval(x+diam/3-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2 );
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(1.5)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2 );
}
}
if(p.x>250&&p.y<250)
{ g.setColor(Color.red);
// g.drawString(" O",x+diam/3-(diamOjo2/2),y+diam/3-(diamOjo2/2));
// g.drawString(" O",x+(2*(diam/3))-(diamOjo2/2),y+diam/3-(diamOjo2/2));
g.fillOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.drawOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2);
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2 );
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/3-(diamOjo2/2),diamOjo2,diamOjo2 );
}
if(p.x<250&&p.y>250)
{ g.setColor(Color.red);
g.fillOval(x+diam/3-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-(diamOjo2)*(int)(3.6),diamOjo2,diamOjo2);
g.drawOval(x+diam/3-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-(diamOjo2)*(int)(3.6),diamOjo2,diamOjo2);
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(1.7)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
}
if(p.x>250&&p.y>250)
{ g.setColor(Color.red);
g.fillOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.drawOval(x+diam/3-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.fillOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
g.drawOval( x+(2*(diam/3))-(diamOjo2/(int)(3.8)),y+diam/(int)(2.3)-diamOjo2*(int)(3.6),diamOjo2,diamOjo2 );
}
g.setColor(Color.black);
switch(r)
{
case 0:g.drawString("HOLA",posX,posY);
break;
case 1:g.drawString("A VECES ESTOY FELIZ",posX,posY);
break;
case 2:g.drawString("COME FRUTAS Y VERDURAS",posX,posY);
break;
case 3:g.drawString("NADA CON EXCESO",posX,posY);
break;
case 4:g.drawString("OBEDECERE AL PROFESOR!!",posX,posY);
break;
}
}
}
class ML extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
r=(int)(Math.random()*5);
((CaraS)e.getComponent()).posX=e.getX();
((CaraS)e.getComponent()).posY=e.getY();
repaint();
if(estado==BLANCO)
{
estado=Kra;
Kra=(Kra==TRISTE?FELIZ:TRISTE);
//repaint();
}
else
estado=(estado==TRISTE?FELIZ:TRISTE);
//repaint();
}
}
class MML extends MouseMotionAdapter
{
public void mouseMoved(MouseEvent e)
{
p=e.getPoint();
repaint();
}
}
class Conclusion extends WindowAdapter{
public void windowClosing(WindowEvent evt){
System.exit(0);
}
}
}
Me alegra que te hayas esforzado por terminar tu problema lo otro es más fácil si no me equivoco es por que en esa maquina no ha de tener la maquina virtual de java instalada instálala y me habisas que pasa
En cuanto ala version de java que uso para programar es la 1.5.0 y según leí los objetos swing cambian de las otras versiones, por eso algunas computadoras no lo pueden cargar.
Muchísimas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas