miércoles, 28 de agosto de 2013

P.05 Tendalada - 2

Programando los controles.

Asociamos código a cada botón:
- pinchamos btnPerimetro con el botón derecho del mouse; se abre menú
- seleccionamos el 4º elemento, Events - Action - actionPerformed[...]
- esto generará el encabezamiento de una nueva función en el programa:

private void btnPerimetroActionPerformed(java.awt.event.ActionEvent evt) { 

}

- escribimos dentro de esta función la captura de los datos desde los campos de texto:

private void btnPerimetroActionPerformed(java.awt.event.ActionEvent evt) {
    int lado=Integer.parseInt(txtLado.getText()); // obtengo el dato lado
    int base=Integer.parseInt(txtBase.getText()); // obtengo el dato base
// estas instrucciones las copié de la guía 9 que entregó la profe

    double perim=2*lado+base;                         // defino variable perim y calculo el perímetro
    lblPerimetro.setText(String.valueOf(perim));  // cargo en una etiqueta el valor calculado
// también copiado de la guía 9
}

- pinchamos btnArea con el botón derecho del mouse; se abre menú
- seleccionamos el 4º elemento, Events - Action - actionPerformed[...]
- esto generará el encabezamiento de una nueva función en el programa:

private void btnAreaActionPerformed(java.awt.event.ActionEvent evt) { 

}

- escribimos dentro de esta función la captura de los datos desde los campos de texto:

private void btnPerimetroActionPerformed(java.awt.event.ActionEvent evt) {
    int lado=Integer.parseInt(txtLado.getText()); // obtengo el dato lado
    int base=Integer.parseInt(txtBase.getText()); // obtengo el dato base

    double area=(base/2)*Math.sqrt((lado*lado)-((base*base)/4));   // defino variable area y calculo el área
    lblArea.setText(String.valueOf(area));  // cargo en una etiqueta el valor calculado
}

Finalmente:
Lo de habilitar los botones cuando haya valores cargados, lo hice testeando la pérdida de foco. No sé si hay otra manera. Es lo que probé el fin de semana haciendo la guía 9 (sí, fue una indirecta):

- pinchamos txtBase (el segundo campo de texto) con el botón derecho del mouse; se abre menú
- seleccionamos Events - Focus - focusLost[...]
- esto generará una nueva función:

private void txtBaseFocusLost(java.awt.event.FocusEvent evt) {
        


- obtenemos los valores de los campos de texto y testeamos si están cargados o no:

private void txtBaseFocusLost(java.awt.event.FocusEvent evt) { // cuando abandona el segundo campo               
    int lado=Integer.parseInt(txtLado.getText()); // obtengo el dato lado
    int base=Integer.parseInt(txtBase.getText()); // obtengo el dato base
   
    if((lado>0)&&(base>0)){  // si ambos valores son mayores que cero
        btnPerimetro.setEnabled(true); // habilito los botones
        btnArea.setEnabled(true);
    }
}

P.05 Tendalada - 1

Pedida: Un formulario que permita ingresar los datos necesarios para calcular el perímetro y el área de un triángulo isósceles.
Los botones que gatillan los cálculos deben estar deshabilitados, hasta que se ingresen los valores necesarios para el cálculo.

Necesitamos entonces:

2 campos de texto (JTextField) para el lado (L) y la base (B); txtLado y txtBase (o txtNum1 y txtNum2, según preferencia).

2 campos de etiqueta (JLabel) para desplegar los resultados: lblPerimetro y lblArea.

2 botones (JButton) para gatillar los cálculos: btnPerimetro y btnArea.

Les asignamos los valores que sean necesarios en la ventana propiedades (a la derecha, debajo de la ventana controles):
- a los botones, "Perímetro" y "Área"
- a las etiquetas de valores (lblPerimetro y lblArea), "0"
- lo mismo a los campos de texto txtLado y txtBase.

Le ponemos, si queremos, más etiquetas para quitarle aridez: "Cálculo de perímetro y área de un ...", un botón para terminar, etc.

Con esto terminamos la etapa de diseño del formulario. A continuación procedemos a asignarle lógica, es decir, a programar el formulario para que haga lo que queremos que haga.

P.05 Tendalada - 0

Revisaremos en profundidad media el control, con varias entradas.

Partamos por el perímetro y el área de un triángulo isósceles, que como ustedes saben, tiene dos lados iguales.

El perímetro (P) es la suma de los dos lados y la base.
Datos necesarios, un lado (L) y la base (B).
P = 2*L + B.

El área (A) de cualquier triángulo de lados iguales (isósceles o equilátero) es media base por altura.

Datos necesarios, altura (H) y base (B).

Para determinar la altura aplicamos el teorema de Pitágoras, donde un lado L es la hipotenusa.

Altura es raíz cuadrada de: el cuadrado de la hipotenusa menos el cuadrado de la mitad de la base.

H = Math.sqrt( (L * L) - (B * B / 4) )

y A = ( B / 2 ) * H

Lo que puse en el programa:

double area=(base/2)*Math.sqrt((lado*lado)-((base*base)/4));

En la próxima entrada abordaré la estrategia para desarrollar el programa.



viernes, 16 de agosto de 2013