Ejercicios de programación en Lenguaje Java.  

Ejercicio 1

Ejercicio 2

Descarga


  

Ejercicio 1.

El propósito del applet es el de seleccionar el color y el tamaño de una fuente de texto, para dibujar un texto pulsando el botón izquierdo del ratón sobre la superficie de un canvas. El texto se introduce en un control de edición

Pulsando el botón Borrar se limpia la superficie del canvas.

 

EjercicioApplet01 aparecerá en un explorador compatible con JDK 1.1.

 

Diseño

Se diseña el applet dividiendo las tareas entre la clase que deriva de Applet (el interfaz de usuario) y la clase que deriva de Canvas (la representación gráfica).

En modo diseño (pestaña Design) situar en su parte superior un panel denominado panelControl. Sobre este panel colocar tres paneles (véase la figura)

El primero panelColor contiene un control Label cuyo título es “Colores” y un control Choice (choiceColores) con los nombres de varios colores, por ejemplo, azul, rojo, negro, y verde.

El segundo, panelTamano contiene un Label cuyo título es “Tamaño” y un control Choice (choiceTamano) con los siguientes datos  12, 16, 24, 32.

El tercero panelIntro contiene un control Button (buttonBorrar) cuyo título es “Borrar” y un control TextField (textIntro) con un texto inicial “Escribir aquí”.

 

Respuesta a las acciones del usuario

Crear un único listener y una única función respuesta para los dos controles tipo Choice. En dicha función respuesta, crear un objeto de tipo Font, usando como fuente “TimesRoman”, estilo negrita, y el tamaño seleccionado en el control choiceTamano.

Crear un objeto de la clase Color dependiendo de nombre del color seleccionado en el control choiceColor.

Usar las funciones getSource() y getItem() de la clase ItemEvent, para conocer sobre cuál de los dos controles del tipo Choice se está actuando y cuál es el elemento (item) que ha sido seleccionado en dicho control.

En esta función respuesta, llamar a la función apropiada de la clase derivada de Canvas para pasarle información acerca del color y de la fuente de texto (el objeto de la clase Font y el objeto de la clase Color) al objeto canvas.

 

Crear un annonymous adapter para responder a las acciones del usuario sobre el botón titulado Borrar.

En la función respuesta llamar a la función apropiada de la clase derivada de Canvas para limpiar el canvas de los textos dibujados.

 

Crear un objeto de una clase que se encargue de filtrar los caracteres que se introducen en el control de edición textIntro. De modo, que solamente aparezcan caracteres alfabéticos y no aparezcan los caracteres numéricos

 

 

La clase que derivada de Canvas.

La clase que deriva de Canvas ha de implementar el interface MouseListener para responder a la acción de pulsar el botón izquierdo del ratón.

 

En la función respuesta a la pulsación del botón izquierdo del ratón, mousePressed, se realizan la siguiente tarea: se dibuja el texto con el color y la fuente de texto seleccionada en la posición en la que se ha pulsado el botón izquierdo del ratón.

 

Mejora del programa

La información sobre el texto, el color, la fuente y las coordenadas del punto donde se ha pulsado el botón izquierdo del ratón se guardan en sus respectivos arrays para que se vuelvan a repintar cada vez que se oculta parcialmente o totalmente la superficie del applet.  Cada vez que se pulsa el botón izquierdo del ratón, se guarda en arrays, las coordenadas del punto, la fuente de texto, el color empleado, y el texto dibujado.

 

Redefinir paint para dibujar en el canvas los textos guardados en el array, con los colores, fuentes y tamaños empleados y en la posición original.

 

 

Ejercicio 2.

 El propósito del programa es el de dibujar las trayectorias seguidas por proyectiles disparados con la misma velocidad inicial v0  y con ángulos de tiro de 10º, 20º, 30º, 40º, 50º, 60º, 70º, 80º, respectivamente.

 

EjercicioApplet01 aparecerá en un explorador compatible con JDK 1.1.

 

Diseño

Se diseña el applet dividiendo las tareas entre la clase que deriva de Applet (el interfaz de usuario) y la clase que deriva de Canvas (la representación gráfica).

 

En modo diseño (pestaña Design) situar en su parte inferior un panel denominado panelControl. Sobre este panel colocar dos paneles (véase la figura)

El primero, panelVelocidad contiene un Label cuyo título es “velocidad inicial <100 m/s” y un control TextField (textVelocidad) .

El panelBoton contiene un control Button (buttonTrayectorias) cuyo título es “Trayectorias”.

 

Respuesta a las acciones del usuario

Cada vez que se introduzca un valor menor o igual que cero o mayor que 100 en el control de edición textVelocidad el control recupera el foco y se seleccionan todos los caracteres de dicho control.

 

En la función respuesta a la acción de pulsar el botón buttonTrayectorias, se ha de pasar el dato de la velocidad inicial al canvas llamando a la función miembro apropiada.

 

La clase derivada de Canvas

Datos sobre el tiro parabólico

 

Ecuación de la trayectoria

 

 

El alcance máximo se obtiene para el ángulo de 45º y es

 

La altura máxima se alcanza cuando el ángulo de disparo es de 90º

 

A continuación se da una plantilla que sugiere un posible procedimiento de crear la clase derivada de Canvas.

 

public class MyCanvas extends Canvas {

//anchura y altura del canvas

     int wAncho, wAlto;

//anchura y altura de un carácter

     int cAlto, cAncho;

//orígenes

     int orgX, orgY;

//escalas

     double escalaX, escalaY;

//Velocidad inicial

      double vInicial;

//ángulos de tiro

    final int[] angulos={10, 20, 30, 40, 50, 60, 70, 80};

    final int NPARTICULAS=angulos.length;

//alcances

    double[] alcance=new double[NPARTICULAS];

//para guardar los puntos de la trayectoria

    Polygon[] pol=new Polygon[NPARTICULAS];

     int divisionesX;   //divisiones del eje X

     int divisionesY;   //divisiones del eje Y

     double dx; //paso

     boolean bNuevo=false;

 

  public MyCanvas() {

//crear el array de objetos Polygon

 

//establecer el color de fondo

 

  }

 

  void origenEscalas(Graphics g){

//ancho y alto de applet

       wAncho=

       wAlto=

//dimensiones de los caracteres

       cAncho=

       cAlto=

//orígenes

       orgX=

       orgY=

}

 

  void setNuevo(double velocidad){

//inicializa el miembro dato vInicial

 

//calcula el alcance para cada ángulo de tiro

 

//calcula el alcance máximo a 45º

//divisiones cada 50 m, determinar escala horizontal escalaX,

 

//calcula la altura máxima a 90º

/divisiones cada 25 m, determinar escala vertical escalaY,

 

//el paso dx

 

  }

 

 void dibujaEjes(Graphics g){

     int x1, y1;

//dibuja el eje Y, las divisiones cada 25 m

 

//dibuja el eje X las divisiones cada 50 m

 

  }

 

  double posicion(int angulo, double x){

//ecuación de la trayectoria para cada ángulo de tiro

 

 }

 

  public void trayectorias(Graphics g){

//determina las coordenadas de cada punto (pixel) de la trayectoria en el

//canvas y las guarda en su respectivo elemento del array de la clase Polygon

      int x1, y1;

      for(int i=0; i<NPARTICULAS; i++){

        for(double x=0.0; x<alcance[i]; x+=dx){

             x1=…

             y1=…

             pol[i].addPoint(x1, y1);

        }

    }

//dibuja todas las trayectorias

 

//muestra el ángulo y el valor del alcance en forma de tabla

 

  }

 

 public void paint(Graphics g){

     origenEscalas(g);

     dibujaEjes(g);

     if(bNuevo)

        trayectorias(g);

 }

}

 

 

 Descarga

Descarga del ejercicio