miércoles, 23 de junio de 2010

Tarea 2

Bueno para la tarea 2 tenia pensado agregarle al mismo programa de la elipse con movimiento, un rectangulo para moverlo con otras teclas, pero al intentar poner ambos dentro del paint para obtener sus dimensiones(width,height), no aparecian en la ventana amenos que solo dejara uno de los 2.

Antes:



Despues:














Intentare hacer funcionar esto en el tiempo que me queda sino buscare arreglarlo despues de lo que aprenda la clase del jueves. Por lo pronto el codigo es:

Edit: Ya logre que funcionara eso de tener 2 figuras con movimiento y creo que con este programa podre hacer un pequeño juego despues.

Saludos.


//Programa de Emmanuel
//Con _E se denotan las variables para la elipse, con _R las del rectangulo
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import java.awt.event.KeyListener;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.*;

public class Tarea2 extends JPanel implements KeyListener,ActionListener
{
  
    //Variables elipse
    private double x_E;
    private double y_E;
    private double ancho_E;
    private double altura_E;  
    //Variables rectangulo

    private double x_R;
    private double y_R;
    private double ancho_R;
    private double altura_R;

    //Constantes para el elipse
    private static final double PASO_E = .03;
    private static final double CAMBIO_E = .02;
    private static final double MIN_E = .05;
    private static final double MAX_E = .95;
  
    //Constantes para el rectangulo
    private static final double PASO_R = .03;
    private static final double CAMBIO_R = .02;
    private static final double MIN_R = .05;
    private static final double MAX_R = .95;
  
    private void dibujaElipse(Graphics2D g,int ancho_E,int altura_E)
    {
        g.setColor(Color.RED);
        g.fill(new Ellipse2D.Double(this.x_E*ancho_E,this.y_E*altura_E,this.ancho_E*ancho_E,this.altura_E*altura_E));
    }

    private void dibujaRectangulo(Graphics2D g,int ancho_R,int altura_R)
    {
        g.setColor(Color.RED);
        g.fill(new Rectangle2D.Double(this.x_R*ancho_R,this.y_R*altura_R,this.ancho_R*ancho_R,this.altura_R*altura_R));
        return;
    }

    public void paint(Graphics g)
    {
         super.paint(g);
          this.dibujaElipse((Graphics2D)g, super.getWidth(), super.getHeight());
          this.dibujaRectangulo((Graphics2D)g, super.getWidth(), super.getHeight());
          return;
        }

    public void actionPerformed(ActionEvent e)
    {
        String cmd = e.getActionCommand();
        if (cmd.equals("default")) //Si el comando equivale a default se regresan los valores iniciales
        {
            System.out.print("Se presiono el boton Default\n");
            this.defaul();
            this.repaint();
          
        }
        else if (cmd.equals("sal")) //Si es igual a sal entonces se cierra la ventana y termina
        {
            System.out.print("Se presiono el boton Salir\n");
            System.exit(1); // salir
        }
        return;
        }
    private void defaul()
    {
        //Valores que se tendran por default al inicio
        this.x_E = 0.5;
        this.y_E = 0.5;
        this.ancho_E = 0.1;
        this.altura_E = 0.1;
      
        this.x_R = 0.5;
        this.y_R = 0.1;
        this.ancho_R = 0.1;
        this.altura_R = 0.1;
        return;
        }
    public Tarea2()//Constructor
    {
        super();
        this.defaul();

        System.out.println("Se creo el escuchador");//Debug ¬¬
    }

    public void keyPressed(KeyEvent e)
    {
        int c = e.getKeyCode();

            switch (c)
            {
                //Teclas Elipse
                case KeyEvent.VK_DOWN:
                System.out.println("Abajo Elipse");
                this.y_E+=Tarea2.PASO_E;
                break;
              
                case KeyEvent.VK_UP:
                System.out.println("Arriba Elipse");
                this.y_E-=Tarea2.PASO_E;
                break;
              
                case KeyEvent.VK_LEFT:
                this.x_E-=Tarea2.PASO_E;
                System.out.println("Izquierda Elipse");
                break;

                case KeyEvent.VK_RIGHT:
                this.x_E+=Tarea2.PASO_E;
                System.out.println("Derecha Elipse");
                break;

                case KeyEvent.VK_A:
                this.ancho_E-=Tarea2.CAMBIO_E;
                break;

                case KeyEvent.VK_S:
                this.ancho_E+=Tarea2.CAMBIO_E;
                break;

                case KeyEvent.VK_Z:
                this.altura_E-=Tarea2.CAMBIO_E;
                break;

                case KeyEvent.VK_X:
                this.altura_E+=Tarea2.CAMBIO_E;
                break;

                //Teclas para rectangulo

                case KeyEvent.VK_H:
                System.out.println("Abajo Rectangulo");
                this.y_R+=Tarea2.PASO_R;
                break;
              
                case KeyEvent.VK_Y:
                System.out.println("Arriba Rectangulo");
                this.y_R-=Tarea2.PASO_R;
                break;
              
                case KeyEvent.VK_G:
                this.x_R-=Tarea2.PASO_R;
                System.out.println("Izquierda Rectangulo");
                break;

                case KeyEvent.VK_J:
                this.x_R+=Tarea2.PASO_R;
                System.out.println("Derecha");
                break;

                case KeyEvent.VK_I:
                this.ancho_R-=Tarea2.CAMBIO_R;
                break;

                case KeyEvent.VK_O:
                this.ancho_R+=Tarea2.CAMBIO_R;
                break;

                case KeyEvent.VK_K:
                this.altura_R-=Tarea2.CAMBIO_R;
                break;

                case KeyEvent.VK_L:
                this.altura_R+=Tarea2.CAMBIO_R;
                break;
              

                default:
                break;
            }
            //Limites ELipse
            if(this.x_E<0)
            {
                this.x_E = 0.0;
            }
            else if(this.x_E>1)
            {
                this.x_E = 1.0;
            }
                  
            if(this.y_E<0)
            {
                this.y_E = 0.0;
            }
            else if(this.y_E>1)
            {
                this.x_E = 1.0;
            }
            if(this.ancho_E < Tarea2.MIN_E)
            {
                this.ancho_E =Tarea2.MIN_E;
            }
            else if(this.ancho_E > Tarea2.MAX_E)
            {
                this.ancho_E = Tarea2.MAX_E;
            }

            if(this.altura_E < Tarea2.MIN_E)
            {
                this.altura_E = Tarea2.MIN_E;
            }
            else if(this.altura_E > Tarea2.MAX_E)
            {
                this.altura_E = Tarea2.MAX_E;
            }
          
            //Limites Rectangulo
            if(this.x_R<0)
            {
                this.x_R = 0.0;
            }
            else if(this.x_R>1)
            {
                this.x_R = 1.0;
            }
                  
            if(this.y_R<0)
            {
                this.y_R = 0.0;
            }
            else if(this.y_R>1)
            {
                this.x_R = 1.0;
            }
            if(this.ancho_R < Tarea2.MIN_R)
            {
                this.ancho_R =Tarea2.MIN_R;
            }
            else if(this.ancho_R > Tarea2.MAX_R)
            {
                this.ancho_R = Tarea2.MAX_R;
            }

            if(this.altura_R < Tarea2.MIN_R)
            {
                this.altura_R = Tarea2.MIN_R;
            }
            else if(this.altura_R > Tarea2.MAX_R)
            {
                this.altura_R = Tarea2.MAX_R;
            }
          
            this.repaint();
            return;
    }

    public void keyReleased(KeyEvent e)
    {
        return;//NO HAGO NADA ;)
    }

    public void keyTyped(KeyEvent e)
    {
        return;
    }

    public static void main(String[]args)
    {
        JFrame wind = new JFrame();
        wind.setTitle("Graphics 2D");
        wind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        wind.setLocation(100,150);
        wind.setSize(600,600);
      
        Tarea2 mipanel = new Tarea2();

        JPanel p = new JPanel();
        p.setFocusable(true);
        p.setLayout(new BorderLayout());
      
        JButton b = new JButton("Default");
        b.setActionCommand("default");
      
        b.addKeyListener(mipanel); // poner escuchador
        b.addActionListener(mipanel);
        p.add(b, BorderLayout.WEST);
        b = new JButton("Salir");
        b.setActionCommand("sal");
        p.add(b, BorderLayout.EAST);
        JLabel norte = new JLabel("Configuracion de Teclado Elipse:  Arriba:↑ Abajo:↓  Izquierda:← Derecha: →");
        JLabel sur = new JLabel("Configuracion de Teclado Rectangulo:  Arriba: Y Abajo: H  Izquierda:G Derecha: J");
        p.add(norte, BorderLayout.NORTH);
        p.add(sur,BorderLayout.SOUTH);
        b.addActionListener(mipanel);
        mipanel.setBackground(Color.BLACK);

        p.addKeyListener(mipanel); // poner escuchador
        p.add(mipanel, BorderLayout.CENTER);

        wind.setContentPane(p);
        wind.setVisible(true);
        wind.setContentPane(p);
        wind.setVisible(true);
    }
}

1 comentario: