Вы находитесь на странице: 1из 38

PRCTICA 1.

DISEO DE UNA CALCULADORA

Objetivo
Desarrollar de un programa que habilite una calculadora en el que se incluye la
programacin de eventos.
Objetivos especficos:

Desarrollar la aplicacin generando toda la interfaz grfica con cdigo en


lugar de solo arrastrar y colocar.
Disear de la interfaz grfica en un formulario de Java empleando los
componentes: Formulario, Cajas de Texto y Botones.
Validar los caracteres introducidos en una caja de texto.
Detectar y programar eventos: de teclado y de ratn.

Introduccin
La primera unidad de la materia, aborda el tema de programacin de eventos,
en donde el objetivo es que estudiante logre que la estructura y ejecucin del
programa dependan de los sucesos (eventos) que ocurran en el sistema o que
ellos mismos provoquen. El estudiante debe desarrollar la habilidad de definir
los eventos a los cuales el programa reaccionar y las acciones que seguir al
presentarse cada uno.
Cuando sobre algn componente ocurre un evento, se espera que suceda algo.
Para ello, el componente delega la tarea de manipular cada tipo particular de
evento a un objeto (instancia de una clase) especfico, denominado manejador o
escuchador de eventos (Listener).
Cada escuchador es capaz de detectar, cuando un evento que le corresponde, ha
ocurrido. Lo controla y responde ejecutando el mtodo adecuado que el
programador le ha asociado.
En el desarrollo de esta prctica se har uso de varios componentes comunes
como son las cajas de texto y los botones. Se les definirn Listeners o
escuchadores para aquellos eventos que son de inters controlar. Esta definicin
se har en este programa con cdigo, para ilustrar el mecanismo en el que
subyacen muchas de las facilidades que otorga la Interfaz de Desarrollo Grfico
(IDE). Esto tiene la intencin de permitir al alumno experimentar la construccin de
una aplicacin que involucra formularios, componentes tales como botones, cajas
Dr. Hernn de la Garza

Prctica 1 - 1

de texto, todo a partir de cdigo escrito por l mismo. Las ambientes de desarrollo
actuales, tales como el NetBeans, ocultan por as decirlo, buscando facilitar el
desarrollo de aplicaciones, mucho del cdigo necesario para que los componentes
y en general el programa realice las tareas que nos interesan.
Para apoyar al entendimiento del cdigo aqu presentado para el diseo de la
calculadora, se ha incluido una prctica preparatoria sobre diferentes formas de
declarar y habilitar los Listeners para los eventos que sean de inters controlar.
El alumno conocer diferentes maneras de programar Listeners desde cero, ya
que normalmente los programadores al usar la interfaz grfica de desarrollo no se
percatan de lo que se incorpor de cdigo y lo que es ms sorprendente, aunque
lo vean, no lo entienden.

Correlacin con los temas y subtemas del programa de estudio vigente


La primera unidad de la materia toca el tema de eventos, especficamente el
subtema 1.3 que habla de los mtodos para el control de eventos. En la prctica
propuesta Diseo de una Calculadora, se controlan bsicamente dos de los tipos
principales de eventos que se pueden tener: eventos de teclado y de ratn.
Adems se definen las acciones a realizar dependiendo del evento ocurrido y del
momento particular en que se realiz.
La prctica preparatoria se enfoca a los Listeners que son los responsables
directos de controlar y responder a eventos que ocurran durante la ejecucin de
un programa.
La prctica tambin aporta a la Unidad II ya que se requiere trabajar con
elementos que forman parte de la interfaz grfica y con los componentes
necesarios para crear la calculadora virtual.
Material y equipo necesario

Computadora.
Software recomendado: Netbeans 7.2.1 en adelante

Metodologa
Tal como se mencion anteriormente, se presenta primero una prctica
preparatoria sobre la programacin de Liteners o escuchadores. Se propone ver
diferentes maneras de activar un escuchador (Listener) usando solamente cdigo
y la cuarta forma apoyndose en las facilidades que brinda la interfaz de
desarrollo.
Dr. Hernn de la Garza

Prctica 1 - 2

Parte Uno. Prctica sobre Listeners


Esta prctica complementaria a la prctica principal, presenta cuatro formas
diferentes de activar un escuchador (manejador) de eventos en el lenguaje Java y
en la plataforma Netbeans, de manera que el discente tenga oportunidad de
contrastarlas. Las tres primeras requieren que el programador conozca las
instrucciones y utilice parte de su tiempo en teclearlas, mientras que en la cuarta
forma presentada, todo se realiza utilizando el ratn o el trackpad, con excepcin
del cdigo que deber ejecutarse cuando ocurra el evento a controlar, el cual debe
ser tecleado.
Para mostrar las formas de activar un escuchador, se ha construido una ventana
(formulario) con dos etiquetas (jLabel) y cuatro botones (jButton), un botn por
cada una de las maneras de activacin.
Paso 1. Crear un proyecto nuevo de Java Application con el de nombre
PracticaPrep1_P1, cuidando de desmarcar la casilla de verificacin del Create
Main Class.
File -> New Project ->Java application ->next
Asignar Nombre PracticaPrep1_P1 ->
Desmarcar el cuadro del mtodo main ->next

Paso 2. En la ventana de proyectos (lado izquierdo del IDE) aparece el nombre


del proyecto creado. Con el cursor sobre el nombre del proyecto, hacer clic con el
botn derecho para abrir el men contextual, seleccionar new y se abre un
submen, escoger JFrame Form.
Ventana Proyectos -> Botn derecho ->new -> JFrame Form -> enter (click)
Asignar nombre Ventana ->next

Hasta este momento hemos creado nuestro proyecto y tenemos un formulario


vaco.
Arrastrar los componentes que necesitamos sobre la forma Ventana: dos
etiquetas (jLabel) y cuatro botones (jButton), tal como se muestra en la imagen
siguiente.
Dr. Hernn de la Garza

Prctica 1 - 3

La primera etiqueta es el ttulo de la prctica Cuatro formas de activar un


manejador de eventos.
La segunda etiqueta indica cual manera de activar el escuchador se utiliz y
precisamente cambiar su texto cuando ocurra el evento.
Cada uno de los cuatro botones utiliza una de las formas de activacin de
escuchadores que ya se han mencionado.
Renombramos los componentes en el formulario de acuerdo a lo siguiente:
Etiqueta1. jlbTitulo
Etiqueta 2 jlbResultado
Botn 1 jbtMetodoUno
Botn 2 jbtMetodoDos
Botn 3 jbtMetodoTres
Botn 4 jbtMetodoCuatro

Primera forma de crear un escuchador: crear una clase


Paso 1. Crear una clase que implemente la interface (evidentemente requiere
conocimiento previo sobre lo que es una interface y su manejo) que aporta los
mtodos que responden al tipo de eventos que se trata de controlar. El ejemplo
muestra la implementacin de un evento de accin, el cual se activa al hacer
Dr. Hernn de la Garza

Prctica 1 - 4

enter con el teclado o bien haciendo clic con el mouse sobre el componente. El
nico mtodo de esta interface que hay que implementar es el de
actionPerformed. Teclear este cdigo arriba del mtodo main del formulario,
dentro de la clase principal. Esto crea una clase definida como inner class o clase
interna.
class Escuchador1 implements ActionListener {
public void actionPerformed(ActionEvent evt) {
jlbResultado.setText("Resultado: Seleccionado Mtodo UNO");
}
}

Paso 2. Despus de creada la clase, ya se puede usar. Construir una instancia


(objeto) de esa clase que es el manejador de eventos. Esta instruccin debe
escribirla dentro del constructor del formulario, abajo del initComponents().
ActionListener al = new Escuchador1();

Paso 3. Ya se tiene un escuchador pero no se ha relacionado con ningn


componente hasta este momento. Ahora se vincula el componente
correspondiente con el manejador de eventos creado, con el mtodo
addActionListener. Esta instruccin tambin se ubic dentro del constructor,
despus del initComponentes(). En este caso se asoci al clic del botn
jbtMetodoUno.
jbtMetodoUno.addActionListener(al);

Paso 4. Dentro de la funcin actionPerformed() en el escuchador, se puede


especificar el cdigo que se quiere se realice cuando se haga clic en el botn o
bien se hace la llamada a un mtodo o funcin que se detalla en otra parte del
cdigo. En este caso se opt por la primera opcin ya que puede ver dentro de la
funcin mencionada la sentencia siguiente:
jlbResultado.setText("Resultado: Seleccionado Mtodo UNO");

Despus de teclear el cdigo arriba mencionado, se ejecuta el programa. Al hacer


clic en el primer botn aparece la pantalla que se muestra a continuacin.

Dr. Hernn de la Garza


Prctica 1 - 5

El cdigo para esta parte es el siguiente:


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Ventana extends javax.swing.JFrame {
// Clase para mostrar la Forma UNO de activar un escuchador
class Escuchador1 implements ActionListener{
public void actionPerformed(ActionEvent evt){
jlbResultado.setText("Resultado: Seleccionado Mtodo UNO");
}
}

public Ventana() { // este es el constructor
initComponents();
setSize(500, 350); // fija el tamao de la forma (ventana)
setLocationRelativeTo(null); // para que la ventana aparezca en el centro del
// monitor
ActionListener al = new Escuchador1(); // indispensable crear un objeto de la clase
// Escuchador1, en este caso con nombre al
Dr. Hernn de la Garza

Prctica 1 - 6

jbtMetodoUno.addActionListener(al); // Se conecta al componente con el


escuchador.
jlbResultado.setBounds(50, 70, 300, 24); // Se redimensiona la etiqueta2
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Ventana().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jbtMetodoUno;
private javax.swing.JButton jbtMetodoDos;
private javax.swing.JButton jbtMetodoTres;
private javax.swing.JButton jbtMetodoCuatro;
private javax.swing.JLabel jlbTitulo;
private javax.swing.JLabel jlbResultado;
// End of variables declaration
}

Segunda forma de activar un escuchador: crearlo en un solo paso


Paso 1. Construir el manejador de eventos en un solo paso sin necesidad de crear
una clase primero y luego una instancia de esa clase. El cdigo que se muestra se
escribe dentro del constructor del formulario.
// Cdigo para mostrar la Segunda Manera de activar un escuchador
ActionListener al2 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
jlbResultado.setText("Resultado: Seleccionado Mtodo DOS");
}
};

Dr. Hernn de la Garza


Prctica 1 - 7

Es importante resaltar que en este proceso, no se declara una clase que


implementa una interface, sino que directamente se construye una instancia de la
interface de inters.
Paso 2. Se vinculan el componente y el manejador de eventos creado. De igual
manera este paso se coloca en el constructor. Se asocia al segundo botn
jbtMetodoDos.
jbtMetodoDos.addActionListener(al2);

3.- Especificar el cdigo o bien el mtodo que se ejecutar cuando el evento


ocurra. Instrucciones dentro del mtodo actionPerformed(). Este paso ya fue
realizado al momento de crear al ActionListener en el punto uno de esta seccin.
jlbResultado.setText("Resultado: Seleccionado Mtodo DOS");

La pantalla resultante se muestra en la imagen siguiente:

El cdigo completo considerando el mtodo dos es:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

Dr. Hernn de la Garza


Prctica 1 - 8

public class Ventana extends javax.swing.JFrame {



class Escuchador1 implements ActionListener{
public void actionPerformed(ActionEvent evt){
jlbResultado.setText("Resultado: Seleccionado Mtodo UNO");
}
}

public Ventana() {

initComponents();

setSize(500, 350);
setLocationRelativeTo(null);
ActionListener al = new Escuchador1();
jbtMetodoUno.addActionListener(al);
jlbResultado.setBounds(50, 70, 300, 24);
// Cdigo para mostrar la Segunda Manera de activar un escuchador
ActionListener al2 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
jlbResultado.setText("Resultado: Seleccionado Mtodo DOS");
}
};
jbtMetodoDos.addActionListener(al2);

}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Ventana().setVisible(true);
}
});
}
// Variables declaration - do not modify

Dr. Hernn de la Garza


Prctica 1 - 9

private javax.swing.JButton btnMetodoUno;


private javax.swing.JButton btnMetodoDos;
private javax.swing.JButton btnMetodoTres;
private javax.swing.JButton btnMetodoCuatro;
private javax.swing.JLabel lblTitulo;
private javax.swing.JLabel lblResultado;
// End of variables declaration
}

Tercera forma de activar un escuchador: instancia annima


Paso 1. Hacer la vinculacin e implementacin de la interfaz en un solo paso.
Para ello se crea una instancia annima de la interfaz correspondiente al tipo de
eventos que nos interesa manejar, y dentro del parntesis de parmetros de la
nueva instancia, se implementan los mtodos correspondientes a la interfaz.
Observe como al no tener un action listener definido PREVIAMENTE, dentro del
parntesis se crea uno con el new. Y luego an dentro del parntesis debemos
implementar el mtodo actionPerformed e indicar CUAL accin se debe hacer.
Este cdigo se teclea dentro del constructor del formulario.
// Cdigo para mostrar la Tercera Manera de activar un escuchador
jbtMetodoTres.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
jlbResultado.setText("Resultado: Seleccionado Mtodo TRES");
}
});

Paso 2. Especificar el cdigo o bien el mtodo que se ejecutar cuando el evento


ocurra dentro del mtodo actionPerformed(). Esta parte ya est escrita dentro del
actionPerformed.
jlbResultado.setText("Resultado: Seleccionado Mtodo TRES");

Esta es la pantalla que resulta al hacer clic en el tercer botn jbtMetodoTres.

Dr. Hernn de la Garza


Prctica 1 - 10

As queda el constructor de la clase Ventana despus de insertar las instrucciones


para activar el manejador de eventos conforme a la tercera manera presentada.
public Ventana() {
initComponents();
setSize(500, 350);
setLocationRelativeTo(null);
ActionListener al = new Escuchador1();
jbtMetodoUno.addActionListener(al);
jlbResultado.setBounds(50, 70, 300, 24);
jlbResultado.addActionListener(al2);

// Cdigo para mostrar la Tercera Manera de activar un escuchador
jbtMetodoTres.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
jlbResultado.setText("Resultado: Seleccionado Mtodo TRES");
}
});
}
Dr. Hernn de la Garza

Prctica 1 - 11

Cuarta forma de activar el manejador de eventos: seleccionar el evento


Paso 1. Directamente en la interfaz grfica, llevar el cursor sobre el componente
que nos interesa controlar y hacer clic con el botn derecho (despliega el men
contextual) y seleccionar el rubro de eventos. Al hacer lo anterior se muestra un
submen, mostrando los eventos que se pueden controlar. Escoger el de nuestro
inters que en este caso es el de action. Luego se escoge actionPerformed. Al
hacer la seleccin anterior se aade automticamente el cdigo que vincula al
componente con un objeto, tal como se mostr en la tercera forma de vinculacin
descrita arriba, por lo que se aadi el cdigo necesario para controlar el evento
de accin. En el actionPerformed() que ahora el software lo incorpor dentro del
initComponents(), se le llama al mtodo jbtMetodoCuatroActionPerformed(), y es
dentro de este mtodo que se especifica el cdigo a ejecutar.

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


// usted debe teclear esta instruccin
jlbResultado.setText("Resultado: Seleccionado Mtodo CUATRO");
// TODO add your handling code here:
}

El cdigo aadido automticamente dentro del mtodo initComponents() es el


siguiente:
jbtMetodoCuatro.setText("Forma CUATRO");
jbtMetodoCuatro.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jbtMetodoCuatroActionPerformed(evt);
}
});
getContentPane().add(jbtMetodoCuatro);
jbtMetodoCuatro.setBounds(50, 230, 110, 23);

Pantalla resultante despus de utilizar el cuarto y ltimo botn jbtMetodoCuatro.

Dr. Hernn de la Garza


Prctica 1 - 12

Parte Dos. Diseo de una Calculadora


Realizamos el diseo de nuestra calculadora (en papel).
Nuestra calculadora tendr la imagen siguiente:

De esta imagen podemos identificar los componentes que se necesitan para la


calculadora y que son:

Un formulario para la interfaz.


Una caja de texto de solo lectura.
Diez botones para los dgitos (0-9).
Seis botones para operaciones +, -, *, /, =, %

Dr. Hernn de la Garza


Prctica 1 - 13

Un botn para el punto decimal.


Dos botones de borrado: borrar todo (C) y borrar ltima entrada (CE).

Paso 1. Identificar los Eventos


Cada botn de dgito pulsado mostrar el smbolo correspondiente en la caja
de texto o pantalla y adems, cuando el nmero de la operacin a realizar,
consista de varios dgitos, cada dgito deber agregarse al final a los ya
existentes.
De hecho hay varios eventos ms que deben controlarse y que iremos
describiendo y construyendo a lo largo de la prctica.
Paso 2. Crear un proyecto nuevo de Java application con nombre
Practica1_Calculadora.
File -> New Project ->Java ->Java application ->next
En la ventana categoras seleccionar Java
En la ventana Proyectos seleccionar Java Application
Dar click en el botn Next
En la ventana siguiente asignar nombre de proyecto: Practica1_Calculadora
Dar click en botn: Finish

Despus de hacer esto aparece el cdigo siguiente:


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package practica1_calculadora;
/**
* @author hernan de la garza
*/
public class Practica1_Calculadora {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Dr. Hernn de la Garza

Prctica 1 - 14

}
}

Hasta este momento se cuenta con una clase


Practica1_Calculadora y un mtodo main vaco, sin cdigo.

pblica

llamada

Paso 3. Enseguida hacer que la clase Practica1_Calculadora herede de la


clase JFrame que se encuentra en la librera swing y sta a su vez, en la
librera javax. Aada a la declaracin de la clase la palabra reservada extends
y el nombre de la clase superior deseada JFrame.

public class Calculadora extends javax.swing.JFrame {
Paso 4. Declarar cada uno de los componentes de la interfaz como atributos
privados de la clase. Se especifica el nombre que le daremos al componente y
de qu tipo es.
public class Practica1_Calculadora extends javax.swing.JFrame {
private javax.swing.JTextField jtfPantalla;
private javax.swing.JButton jbtDigito0;
private javax.swing.JButton jbtDigito1;
private javax.swing.JButton jbtDigito2;
private javax.swing.JButton jbtDigito3;
private javax.swing.JButton jbtDigito4;
private javax.swing.JButton jbtDigito5;
private javax.swing.JButton jbtDigito6;
private javax.swing.JButton jbtDigito7;
private javax.swing.JButton jbtDigito8;
private javax.swing.JButton jbtDigito9;
private javax.swing.JButton jbtMas;
private javax.swing.JButton jbtMenos;
private javax.swing.JButton jbtPor;
private javax.swing.JButton jbtDividir;
private javax.swing.JButton jbtIgual;
private javax.swing.JButton jbtPuntoDec;
private javax.swing.JButton jbtTantoPorciento;
Dr. Hernn de la Garza

Prctica 1 - 15

private javax.swing.JButton jbtIniciar;


private javax.swing.JButton jbtBorrarEntrada;
private boolean puntoDecimal;
private char operador;
private enum Entrada{NINGUNA,DIGITO,OPERADOR,CE};
private Entrada ultimaEntrada;
private byte numOperandos;
private double operador1;
private double operador2;

Las ltimas siete declaraciones se explicarn con detalle ms adelante.


Paso 5. Habilitar un constructor para esta clase dentro del cual pondremos el
mtodo InitComponents() que es donde se construirn especficamente cada
uno de los componentes de la interfaz grfica y se establecern los valores de
cada una de sus propiedades de inters hasta este momento.
Nota: Al estar el mtodo InitComponents() en el constructor, implica QUE
TODO lo que tiene este mtodo, es parte del constructor !!
public Practica1_Calculadora(){ // constructor
setSize(222, 232); // definimos tamao
setTitle("Calculadora"); // ttulo en la ventana
initComponents();
}

Paso 6. El cdigo del mtodo InitComponents() es un poco extenso dado que


hay que crear cada uno de los componentes, especificar sus propiedades y
adems asociar a cada componente el escuchador (Listener) de eventos, que
se har responsable de activar el mtodo de respuesta cuando el evento a
controlar, ocurra. Todo lo anterior lo haremos en pasos para intercalar
comentarios que permitan identificar y entender las tareas realizadas dentro del
mtodo.

Se procede a crear los componentes usando New

Dr. Hernn de la Garza


Prctica 1 - 16

private void initComponents(){


jtfPantalla = new javax.swing.JTextField();
jbtDigito0 = new javax.swing.JButton();
jbtDigito1 = new javax.swing.JButton();
jbtDigito2 = new javax.swing.JButton();
jbtDigito3 = new javax.swing.JButton();
jbtDigito4 = new javax.swing.JButton();
jbtDigito5 = new javax.swing.JButton();
jbtDigito6 = new javax.swing.JButton();
jbtDigito7 = new javax.swing.JButton();
jbtDigito8 = new javax.swing.JButton();
jbtDigito9 = new javax.swing.JButton();
jbtMas = new javax.swing.JButton();
jbtMenos = new javax.swing.JButton();
jbtPor = new javax.swing.JButton();
jbtDividir = new javax.swing.JButton();
jbtIgual = new javax.swing.JButton();
jbtPuntoDec = new javax.swing.JButton();
jbtTantoPorciento = new javax.swing.JButton();
jbtIniciar = new javax.swing.JButton();
jbtBorrarEntrada = new javax.swing.JButton();

Nota: Se ha escrito la ruta completa en donde se encuentra la especificacin de


cada clase (JTextField, JButton) indicando que es el directorio javax, el
subdirectorio swing y la clase correspondiente. Un punto en la ruta equivale a la /
que se usa en los sistemas operativos para identificar trayectoria. Se puede
eliminar esto al escribir import javax.swing.*; al principio del programa.

Vamos a inicializar las variables que sern utilizadas por los mtodos de los
eventos en actionPerformed. Las siguientes instrucciones pueden ir despus de
las lneas de cdigo escritas arriba.
puntoDecimal = false;
ultimaEntrada = Entrada.NINGUNA;
operador = 0;
numOperandos = 0;
Dr. Hernn de la Garza

Prctica 1 - 17

operador1 = 0;
operador2 = 0;


Paso 7. Se especifican las caractersticas del formulario: su diseo interior (null),
no modificable de tamao y se activa el evento de cerrado de la ventana
(windowClosing) con su escuchador (WindowListener). El mtodo que se le llama
cuando la ventana se cierra exitForm(evt), lo vamos a definir ms adelante, fuera
de este mtodo.

// capturar este cdigo dentro del InitComponents() al final de la creacin de los componentes
getContentPane().setLayout(null);
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt)
{
exitForm(evt); // se definir ms adelante
}
});

Paso 8. Se procede ahora a especificar las propiedades bsicas para cada


componente como son: tamao, posicin, texto, as como aadirlo al
contenedor principal (formulario).
// propiedades de la pantalla (caja de texto con nombre jtfPantalla)

jtfPantalla.setEditable(false); // no permita cambios


jtfPantalla.setFont(new java.awt.Font("SansSerif",1, 14)); // tipo de letra
jtfPantalla.setText("0.");
jtfPantalla.setBackground(new java.awt.Color(55, 155, 107)); //color de fondo (R,G,B)
jtfPantalla.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
getContentPane().add(jtfPantalla); // se aade como parte del contenedor principal
jtfPantalla.setBounds(8, 8, 200, 24);

Dr. Hernn de la Garza

Prctica 1 - 18

// propiedades del botn 0


jbtDigito0.setText("0");
jbtDigito0.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito0);
jbtDigito0.setBounds(8, 164, 68, 28);

jbtDigito1.setText("1");
jbtDigito1.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito1);
jbtDigito1.setBounds(8, 125, 28, 28);

jbtDigito2.setText("2");
jbtDigito2.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito2);
jbtDigito2.setBounds(48, 125, 28, 28);

jbtDigito3.setText("3");
jbtDigito3.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito3);
jbtDigito3.setBounds(88, 125, 28, 28);

jbtDigito4.setText("4");
jbtDigito4.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito4);
jbtDigito4.setBounds(8, 85, 28, 28);

jbtDigito5.setText("5");
jbtDigito5.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito5);
jbtDigito5.setBounds(48, 85, 28, 28);

jbtDigito6.setText("6");
jbtDigito6.setMargin(new java.awt.Insets(2, 2, 2, 2));

Dr. Hernn de la Garza


Prctica 1 - 19

getContentPane().add(jbtDigito6);
jbtDigito6.setBounds(88, 85, 28, 28);

jbtDigito7.setText("7");
jbtDigito7.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito7);
jbtDigito7.setBounds(8, 44, 28, 28);

jbtDigito8.setText("8");
jbtDigito8.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito8);
jbtDigito8.setBounds(48, 44, 28, 28);

jbtDigito9.setText("9");
jbtDigito9.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito9);
jbtDigito9.setBounds(88, 44, 28, 28);

jbtPuntoDec.setText(".");
jbtPuntoDec.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtPuntoDec);
jbtPuntoDec.setBounds (88, 164, 28, 28);

jbtMas.setText("+");
jbtMas.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtMas);
jbtMas.setBounds (180, 125, 28, 28);

jbtMenos.setText("-");
jbtMenos.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtMenos);
jbtMenos.setBounds (180, 85, 28, 28);

Dr. Hernn de la Garza


Prctica 1 - 20

jbtPor.setText("x");
jbtPor.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtPor);
jbtPor.setBounds (145, 125, 28, 28);

jbtDividir.setText("/");
jbtDividir.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDividir);
jbtDividir.setBounds (145, 85, 28, 28);

jbtIgual.setText("=");
jbtIgual.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtIgual);
jbtIgual.setBounds (145, 164, 28, 28);

jbtTantoPorciento.setText("%");
jbtTantoPorciento.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtTantoPorciento);
jbtTantoPorciento.setBounds (180, 164, 28, 28);

jbtIniciar.setText("C");
jbtIniciar.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtIniciar);
jbtIniciar.setBounds (145, 44, 28, 28);

jbtBorrarEntrada.setText("CE");
jbtBorrarEntrada.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtBorrarEntrada);
jbtBorrarEntrada.setBounds (180, 44, 28, 28);

Nota: Tanto para especificar el tipo de letra como para establecer un color de fondo, fue
necesario crear una nueva instancia de cada una de las clases Font y Color. Esto sucede
con la instruccin en el parntesis (new java.awt.Font(..)) y (new java.awt.Color(.)).

Dr. Hernn de la Garza


Prctica 1 - 21

Paso 9. La parte siguiente debe hacerse con cuidado y tratar de entender que se
hace en cada instruccin. Se definirn los Listeners (Escuchadores) para los
eventos que nos interesa controlar, que de hecho actan cada vez que se pulsa
(clic) alguna de las teclas (botones) de la calculadora. Deber detectar cundo la
operacin o evento solicitado es vlido y cundo no lo es.

Se tienen diez botones para los dgitos, que responden de manera semejante, es
decir escribir su valor en la pantalla. Por ello se definir un ActionListener con
nombre aldigi que controle el evento actionPerformed. Y a cada botn se le
asociar con ese ActionListener.

java.awt.event.ActionListener aldigi= new java.awt.event.ActionListener() {


public void actionPerformed(java.awt.event.ActionEvent evt) {
jbtDigitoActionPerformed(evt); // mtodo que se definir mas adelante
}
};
// todos los dgitos se asocian al mismo escuchador por lo que tendrn respuesta parecida
jbtDigito0.addActionListener (aldigi);
jbtDigito1.addActionListener (aldigi);
jbtDigito2.addActionListener (aldigi);
jbtDigito3.addActionListener (aldigi);
jbtDigito4.addActionListener (aldigi);
jbtDigito5.addActionListener (aldigi);
jbtDigito6.addActionListener (aldigi);
jbtDigito7.addActionListener (aldigi);
jbtDigito8.addActionListener (aldigi);
jbtDigito9.addActionListener (aldigi);

Nota: En el mtodo jbtDigitoActionPerformed(evt) dentro del actionPerformed, definir la


accin de acuerdo al nombre del dgito (botn) pulsado y as responder adecuadamente.

Paso 10. Se procede a definir un solo Listener para los operadores ya que tienen
comportamiento parecido.

java.awt.event.ActionListener alop= new java.awt.event.ActionListener() {
Dr. Hernn de la Garza

Prctica 1 - 22

public void actionPerformed(java.awt.event.ActionEvent evt) {


jbtOperacionActionPerformed(evt);
}
};
// cada operador se asocia con el mismo ActionListener de nombre alop.
jbtMas.addActionListener(alop);
jbtMenos.addActionListener(alop);
jbtPor.addActionListener(alop);
jbtDividir.addActionListener(alop);
jbtIgual.addActionListener(alop);

Paso 11. El resto de los botones como son el punto decimal, tanto por ciento, el
botn de inicio (C), el botn de borrar entrada (CE), se manejan de manera
independiente y se define un escuchador especfico para cada uno. Observe esta
manera de activar un Listener sin tener que definir o asignar un nombre primero
como en el caso de los dgitos y de los operadores (igual al usado en el
windowClosing de arriba).

jbtPuntoDec.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jbtPuntoDecActionPerformed(evt); //pendiente definirlo
}
});

jbtTantoPorciento.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jbtTantoPorcientoActionPerformed(evt); //pendiente definirlo
}
});

jbtIniciar.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jbtIniciarActionPerformed(evt); //pendiente definirlo
}
});
Dr. Hernn de la Garza

Prctica 1 - 23

jbtBorrarEntrada.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jbtBorrarEntradaActionPerformed(evt); //pendiente definirlo
}
});
} // fin del InitComponents()


Paso 12. Es el momento de especificar el cdigo que llevarn cada uno de los
mtodos que usan los Listeners cuando son activados por un evento.

Cuando se hace clic en cualquier botn del 0 al 9 hace que ese botn genere un
mensaje de accin (actionPerformed). Como respuesta al mensaje se ejecutar el
mtodo jbtDigitoActionPerformed. Este mtodo tiene que asignar el ttulo de la
tecla pulsada (0,1,2) a la caja de texto que representa la pantalla.

private void jbtDigitoActionPerformed(java.awt.event.ActionEvent evt) {
// se obtiene el id del botn que gener el evento y se guarda en un JButton
javax.swing.JButton objJBT = (javax.swing.JButton)evt.getSource();
String textoBoton = objJBT.getText(); // se guarda su texto para ser usado
if(ultimaEntrada != Entrada.DIGITO) // determinar qu fue lo ltimo que se tecle
{
if(textoBoton.compareTo("0")==0)return; // ignorar ceros al principio
jtfPantalla.setText(""); // poner pantalla en blanco
ultimaEntrada= Entrada.DIGITO; // especificar que se tecle un dgito
}
jtfPantalla.setText(jtfPantalla.getText() + textoBoton); // aadir texto al final

}

Paso 13. Continuamos con los mtodos para cuando se pulsa un operador, el botn
del tanto por ciento, el botn de iniciar y el botn de borrar entrada.

private void jbtOperacionActionPerformed(java.awt.event.ActionEvent evt){
javax.swing.JButton objJBT =(javax.swing.JButton)evt.getSource();
String textoBoton = objJBT.getText();
Dr. Hernn de la Garza

Prctica 1 - 24

if ( ( numOperandos == 0) && (textoBoton == "-"))


ultimaEntrada = Entrada.DIGITO;
if(ultimaEntrada==Entrada.DIGITO)
numOperandos++;
if(numOperandos ==1)
operador1= Double.parseDouble(jtfPantalla.getText());
else if (numOperandos == 2){
operador2=Double.parseDouble(jtfPantalla.getText());
switch(operador){
case'+':operador1 += operador2;
break;
case'-':operador1 -= operador2;
break;
case'x':operador1 *= operador2;
break;
case'/':operador1 /= operador2;
break;
case'=':operador1 = operador2;
break;
}
jtfPantalla.setText(Double.toString(operador1));
numOperandos =1;
}
operador = textoBoton.charAt(0);
ultimaEntrada = Entrada.OPERADOR;
}
private void jbtTantoPorcientoActionPerformed(java.awt.event.ActionEvent evt){
double resultado;
if(ultimaEntrada == Entrada.DIGITO){
resultado=operador1*Double.parseDouble(jtfPantalla.getText())/100;
jtfPantalla.setText(Double.toString(resultado));
jbtIgual.doClick();
jbtTantoPorciento.requestFocus();

Dr. Hernn de la Garza


Prctica 1 - 25

}
}
private void jbtIniciarActionPerformed(java.awt.event.ActionEvent evt){
jtfPantalla.setText("0.");
ultimaEntrada=Entrada.NINGUNA;
puntoDecimal=false;
operador=0;
numOperandos=0;
operador1=0;
operador2=0;
}
private void jbtBorrarEntradaActionPerformed(java.awt.event.ActionEvent evt){
jtfPantalla.setText("0.");
ultimaEntrada = Entrada.CE;
puntoDecimal = false;
}

private void jbtPuntoDecActionPerformed(java.awt.event.ActionEvent evt){
if(ultimaEntrada != Entrada.DIGITO){
jtfPantalla.setText("0.");
ultimaEntrada = Entrada.DIGITO;
}
else if (puntoDecimal==false)
jtfPantalla.setText(jtfPantalla.getText()+ ".");
puntoDecimal = true;
}


Paso 14. Tenemos pendiente definir el mtodo exitForm.

private void exitForm(java.awt.event.WindowEvent evt){
System.exit(0);
}


Dr. Hernn de la Garza

Prctica 1 - 26

Paso 15. El mtodo main queda de la siguiente manera.



public static void main(String[] args) {
try{

javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getCrossPlatformLoo
kAndFeelClassName());
}
catch (Exception e){
System.out.println("No se puedo hacer el aspecto deseado:"+ e);
}
new Calculadora().setVisible(true);
}
}

A continuacin se presenta todo el cdigo en forma corrida para que se pueda


ubicar en qu posicin va cada instruccin.

package Calculadora;

import java.awt.*;
import java.awt.event.ActionEvent;
/**
*
* @author
*/
public class Practica1_Calculadora extends javax.swing.JFrame {
private javax.swing.JTextField jtfPantalla;
private javax.swing.JButton jbtDigito0;
private javax.swing.JButton jbtDigito1;
private javax.swing.JButton jbtDigito2;
private javax.swing.JButton jbtDigito3;
private javax.swing.JButton jbtDigito4;
Dr. Hernn de la Garza

Prctica 1 - 27

private javax.swing.JButton jbtDigito5;


private javax.swing.JButton jbtDigito6;
private javax.swing.JButton jbtDigito7;
private javax.swing.JButton jbtDigito8;
private javax.swing.JButton jbtDigito9;
private javax.swing.JButton jbtMas;
private javax.swing.JButton jbtMenos;
private javax.swing.JButton jbtPor;
private javax.swing.JButton jbtDividir;
private javax.swing.JButton jbtIgual;
private javax.swing.JButton jbtPuntoDec;
private javax.swing.JButton jbtTantoPorciento;
private javax.swing.JButton jbtIniciar;
private javax.swing.JButton jbtBorrarEntrada;
private boolean puntoDecimal;
private char operador;
private enum Entrada{NINGUNA,DIGITO,OPERADOR,CE};
private Entrada ultimaEntrada;
private byte numOperandos;
private double operador1;
private double operador2;
public Practica1_Calculadora(){
setSize(222, 232);
setTitle("Calculadora");
initComponents();
}
private void initComponents(){
jtfPantalla = new javax.swing.JTextField();
jbtDigito0 = new javax.swing.JButton();
jbtDigito1 = new javax.swing.JButton();
jbtDigito2 = new javax.swing.JButton();
jbtDigito3 = new javax.swing.JButton();
jbtDigito4 = new javax.swing.JButton();

Dr. Hernn de la Garza


Prctica 1 - 28

jbtDigito5 = new javax.swing.JButton();


jbtDigito6 = new javax.swing.JButton();
jbtDigito7 = new javax.swing.JButton();
jbtDigito8 = new javax.swing.JButton();
jbtDigito9 = new javax.swing.JButton();
jbtMas = new javax.swing.JButton();
jbtMenos = new javax.swing.JButton();
jbtPor = new javax.swing.JButton();
jbtDividir = new javax.swing.JButton();
jbtIgual = new javax.swing.JButton();
jbtPuntoDec = new javax.swing.JButton();
jbtTantoPorciento = new javax.swing.JButton();
jbtIniciar = new javax.swing.JButton();
jbtBorrarEntrada = new javax.swing.JButton();
puntoDecimal = false;
ultimaEntrada = Entrada.NINGUNA;
puntoDecimal = false;
operador = 0;
numOperandos = 0;
operador1 = 0;
operador2 = 0;
getContentPane().setLayout(null);
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt)
{
exitForm(evt);
}
});

jtfPantalla.setEditable(false);
jtfPantalla.setFont(new java.awt.Font("SansSerif",1, 14));
jtfPantalla.setText("0.");

Dr. Hernn de la Garza


Prctica 1 - 29

jtfPantalla.setBackground(new java.awt.Color(55, 155, 107));


jtfPantalla.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
getContentPane().add(jtfPantalla);
jtfPantalla.setBounds(8, 8,200,24);

jbtDigito0.setText("0");
jbtDigito0.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito0);
jbtDigito0.setBounds(8, 164, 68, 28);

jbtDigito1.setText("1");
jbtDigito1.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito1);
jbtDigito1.setBounds(8, 125, 28, 28);

jbtDigito2.setText("2");
jbtDigito2.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito2);
jbtDigito2.setBounds(48, 125, 28, 28);

jbtDigito3.setText("3");
jbtDigito3.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito3);
jbtDigito3.setBounds(88, 125, 28, 28);

jbtDigito4.setText("4");
jbtDigito4.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito4);
jbtDigito4.setBounds(8, 85, 28, 28);

jbtDigito5.setText("5");
jbtDigito5.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito5);

Dr. Hernn de la Garza


Prctica 1 - 30

jbtDigito5.setBounds(48, 85, 28, 28);



jbtDigito6.setText("6");
jbtDigito6.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito6);
jbtDigito6.setBounds(88, 85, 28, 28);

jbtDigito7.setText("7");
jbtDigito7.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito7);
jbtDigito7.setBounds(8, 44, 28, 28);

jbtDigito8.setText("8");
jbtDigito8.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito8);
jbtDigito8.setBounds(48, 44, 28, 28);

jbtDigito9.setText("9");
jbtDigito9.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDigito9);
jbtDigito9.setBounds(88, 44, 28, 28);

jbtPuntoDec.setText(".");
jbtPuntoDec.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtPuntoDec);
jbtPuntoDec.setBounds (88, 164, 28, 28);

jbtMas.setText("+");
jbtMas.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtMas);
jbtMas.setBounds (180, 125, 28, 28);

jbtMenos.setText("-");

Dr. Hernn de la Garza


Prctica 1 - 31

jbtMenos.setMargin(new java.awt.Insets(2, 2, 2, 2));


getContentPane().add(jbtMenos);
jbtMenos.setBounds (180, 85, 28, 28);

jbtPor.setText("x");
jbtPor.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtPor);
jbtPor.setBounds (145, 125, 28, 28);

jbtDividir.setText("/");
jbtDividir.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtDividir);
jbtDividir.setBounds (145, 85, 28, 28);
jbtIgual.setText("=");
jbtIgual.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtIgual);
jbtIgual.setBounds (145, 164, 28, 28);

jbtTantoPorciento.setText("%");
jbtTantoPorciento.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtTantoPorciento);
jbtTantoPorciento.setBounds (180, 164, 28, 28);

jbtIniciar.setText("C");
jbtIniciar.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtIniciar);
jbtIniciar.setBounds (145, 44, 28, 28);

jbtBorrarEntrada.setText("CE");
jbtBorrarEntrada.setMargin(new java.awt.Insets(2, 2, 2, 2));
getContentPane().add(jbtBorrarEntrada);
jbtBorrarEntrada.setBounds (180, 44, 28, 28);

Dr. Hernn de la Garza


Prctica 1 - 32

java.awt.event.ActionListener aldigi= new java.awt.event.ActionListener() {


public void actionPerformed(java.awt.event.ActionEvent evt) {
jbtDigitoActionPerformed(evt);
}
};
jbtDigito0.addActionListener (aldigi);
jbtDigito1.addActionListener (aldigi);
jbtDigito2.addActionListener (aldigi);
jbtDigito3.addActionListener (aldigi);
jbtDigito4.addActionListener (aldigi);
jbtDigito5.addActionListener (aldigi);
jbtDigito6.addActionListener (aldigi);
jbtDigito7.addActionListener (aldigi);
jbtDigito8.addActionListener (aldigi);
jbtDigito9.addActionListener (aldigi);
java.awt.event.ActionListener alop= new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jbtOperacionActionPerformed(evt);
}
};

jbtMas.addActionListener(alop);
jbtMenos.addActionListener(alop);
jbtPor.addActionListener(alop);
jbtDividir.addActionListener(alop);
jbtIgual.addActionListener(alop);
jbtPuntoDec.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jbtPuntoDecActionPerformed(evt);
}
});
jbtTantoPorciento.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){

Dr. Hernn de la Garza


Prctica 1 - 33

jbtTantoPorcientoActionPerformed(evt);
}
});
jbtIniciar.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jbtIniciarActionPerformed(evt);
}
});
jbtBorrarEntrada.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jbtBorrarEntradaActionPerformed(evt);
}
});

}
private void jbtOperacionActionPerformed(java.awt.event.ActionEvent evt){
javax.swing.JButton objJBT =(javax.swing.JButton)evt.getSource();
String textoBoton = objJBT.getText();
if ( ( numOperandos == 0) && (textoBoton == "-"))
ultimaEntrada = Entrada.DIGITO;
if(ultimaEntrada==Entrada.DIGITO)
numOperandos++;
if(numOperandos ==1)
operador1= Double.parseDouble(jtfPantalla.getText());
else if (numOperandos == 2){
operador2=Double.parseDouble(jtfPantalla.getText());
switch(operador){
case'+':operador1 += operador2;
break;
case'-':operador1 -= operador2;
break;
case'x':operador1 *= operador2;
break;

Dr. Hernn de la Garza


Prctica 1 - 34

case'/':operador1 /= operador2;
break;
case'=':operador1 = operador2;
break;
}
jtfPantalla.setText(Double.toString(operador1));
numOperandos =1;
}
operador = textoBoton.charAt(0);
ultimaEntrada = Entrada.OPERADOR;
}
private void jbtTantoPorcientoActionPerformed(java.awt.event.ActionEvent evt){
double resultado;
if(ultimaEntrada == Entrada.DIGITO){
resultado=operador1*Double.parseDouble(jtfPantalla.getText())/100;
jtfPantalla.setText(Double.toString(resultado));
jbtIgual.doClick();
jbtTantoPorciento.requestFocus();
}
}
private void jbtIniciarActionPerformed(java.awt.event.ActionEvent evt){
jtfPantalla.setText("0.");
ultimaEntrada=Entrada.NINGUNA;
puntoDecimal=false;
operador=0;
numOperandos=0;
operador1=0;
operador2=0;
}
private void jbtBorrarEntradaActionPerformed(java.awt.event.ActionEvent evt){
jtfPantalla.setText("0.");
ultimaEntrada = Entrada.CE;
puntoDecimal = false;

Dr. Hernn de la Garza


Prctica 1 - 35

}

private void jbtPuntoDecActionPerformed(java.awt.event.ActionEvent evt){
if(ultimaEntrada != Entrada.DIGITO){
jtfPantalla.setText("0.");
ultimaEntrada = Entrada.DIGITO;
}
else if (puntoDecimal==false)
jtfPantalla.setText(jtfPantalla.getText()+ ".");
puntoDecimal = true;
}
private void jbtDigitoActionPerformed(java.awt.event.ActionEvent evt){
javax.swing.JButton objJBT = (javax.swing.JButton)evt.getSource();
String textoBoton = objJBT.getText();
if(ultimaEntrada != Entrada.DIGITO){
if(textoBoton.compareTo("0")==0)return;
jtfPantalla.setText("");
ultimaEntrada= Entrada.DIGITO;
puntoDecimal = false;
}
jtfPantalla.setText(jtfPantalla.getText() + textoBoton);
}

private void exitForm(java.awt.event.WindowEvent evt){
System.exit(0);
}
public static void main(String[] args) {
try{
javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getCrossPlatfo
rmLookAndFeelClassName());
}
catch (Exception e){
System.out.println("No se puedo hacer el aspecto deseado:"+ e);

Dr. Hernn de la Garza


Prctica 1 - 36

}
new Calculadora().setVisible(true);
}
}

Sugerencias Didcticas
Esta prctica contiene instrucciones que no son fciles de entender a la primera,
as como tambin el hecho de que hace uso de conceptos que deben de revisarse
primero.
Se sugiere hacer un repaso de cmo activar un escuchador tanto por medio de
cdigo como haciendo uso de la interfaz grfica.
Se recomienda revisar el tipo de datos ENUM que aparece en el cdigo para
identificar el tipo de entrada que hubo, o sea la tecla que se puls.
Hay validacin de los datos en la entrada ya que no permite el poner dos puntos
decimales, dos operadores seguidos, solo el ltimo se conserva. Se recomienda
practicar validacin de datos en cajas de texto.

Reporte del alumno (resultados)


El alumno deber entregar evidencia de corridas de esta aplicacin.
El alumno aumentar las operaciones que esta calculadora realiza, incorporando
operaciones tales como: seno, coseno, tangente, logaritmo natural, logaritmo
neperiano, exponencial, y potencia n.
Se le pide al alumno que responda las siguientes preguntas:
1.-Cmo se establece una fuente de texto?
2.-Cmo se establece un color determinado?
3.-Porqu a todos los botones del 0 al 9 se les da el mismo ActionListener?
4.- La variable Entrada qu es, para qu se usa y cmo se usa?
5.-Cmo se controla que no aparezcan varios puntos decimales?
6.-Como reconoce que se ha pulsado el botn correspondiente a un operador
aritmtico?
Dr. Hernn de la Garza

Prctica 1 - 37

7.- Realice un listado de los diferentes eventos que se controlan y describa la


accin que cada uno tiene asociada.
8.- Diga cul es la funcin o razn de estar de las variables siguientes:
numOperandos, operando1, operando2, ultimaEntrada.

Bibliografa preliminar
1. Java The Complete Reference Eighth Edition
Herbert Schildt
Oracle Press 2011
2. Java 2 Interfaces Grficas y Aplicaciones para Internet
Francisco Javier Ceballos
Alfaomega- RAMA 2. Edicin 2007
3. En la pgina oficial de Java:
docs.oracle.com/javase/tutorial/java/

Dr. Hernn de la Garza


Prctica 1 - 38

Вам также может понравиться