<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>{francho(lab)} &#187; ejercicios</title>
	<atom:link href="http://francho.org/lab/tag/ejercicios/feed/" rel="self" type="application/rss+xml" />
	<link>http://francho.org/lab</link>
	<description>forjando ideicas</description>
	<lastBuildDate>Fri, 20 Aug 2010 10:56:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Java: Calculadora sencilla en modo gráfico</title>
		<link>http://francho.org/lab/45/java-calculadora-sencilla-en-modo-grafico/</link>
		<comments>http://francho.org/lab/45/java-calculadora-sencilla-en-modo-grafico/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 22:04:34 +0000</pubDate>
		<dc:creator>francho</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[ejercicios]]></category>

		<guid isPermaLink="false">http://francho.org/lab/?p=45</guid>
		<description><![CDATA[Esta es una calculadora sencilla en modo gráfico escrita en Java.
Implementa las operaciones básicas: sumar, restar, multiplicar y dividir

Main.java

/*
 * Ejercicio: Calculadora sencilla
 *   - Implementar la Interfaz de usuario
 *   - Implementar los métodos siguientes a través de los listeners adecuados:
 *         [...]]]></description>
			<content:encoded><![CDATA[<p>Esta es una calculadora sencilla en modo gráfico escrita en Java.</p>
<p>Implementa las operaciones básicas: sumar, restar, multiplicar y dividir</p>
<p><span id="more-45"></span><br />
<strong>Main.java</strong></p>
<pre class="brush: java;">
/*
 * Ejercicio: Calculadora sencilla
 *   - Implementar la Interfaz de usuario
 *   - Implementar los métodos siguientes a través de los listeners adecuados:
 *          - Sumar
 *          - Restar
 *          - Multiplicar
 *          - Dividir
 */

package calculadora;

/**
 *
 * @author: $Author: franchux $
 * @version: $Rev: 70 $
 * @date: $Date: 2009-04-13 13:06:00 +0200 (lun 13 de abr de 2009) $
 * $Id: Main.java 70 2009-04-13 11:06:00Z franchux $
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        VentanaCalculadora calculadora = new VentanaCalculadora();
        calculadora.setVisible(true);
    }

}
</pre>
<p><strong>VentanaCalculadora.java</strong></p>
<pre class="brush: java;">
/*
 * Interfaz para nuestra calculadora sencilla
 */
package calculadora;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.*;
import javax.swing.border.EmptyBorder;

/**
 *
 * @author: $Author: franchux $
 * @version: $Rev: 75 $
 * @date: $Date: 2009-04-14 00:21:18 +0200 (mar 14 de abr de 2009) $
 * $Id: VentanaCalculadora.java 75 2009-04-13 22:21:18Z franchux $
 */
public class VentanaCalculadora extends JFrame {

    /** numero tecleado */
    JTextField pantalla;

    /** guarda el resultado de la operacion anterior o el número tecleado */
    double resultado;

    /** para guardar la operacion a realizar */
    String operacion;

    /** Los paneles donde colocaremos los botones */
    JPanel panelNumeros, panelOperaciones;

    /**  Indica si estamos iniciando o no una operación */
    boolean nuevaOperacion = true;

    /**
     * Constructor. Crea los botones y componentes de la calculadora
     */
    public VentanaCalculadora() {
        super();
        setSize(250, 300);
        setTitle(&quot;Calculadora Simple&quot;);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);

        // Vamos a dibujar sobre el panel
        JPanel panel = (JPanel) this.getContentPane();
        panel.setLayout(new BorderLayout());

        pantalla = new JTextField(&quot;0&quot;, 20);
        pantalla.setBorder(new EmptyBorder(4, 4, 4, 4));
        pantalla.setFont(new Font(&quot;Arial&quot;, Font.BOLD, 25));
        pantalla.setHorizontalAlignment(JTextField.RIGHT);
        pantalla.setEditable(false);
        pantalla.setBackground(Color.WHITE);
        panel.add(&quot;North&quot;, pantalla);

        panelNumeros = new JPanel();
        panelNumeros.setLayout(new GridLayout(4, 3));
        panelNumeros.setBorder(new EmptyBorder(4, 4, 4, 4));

        for (int n = 9; n &gt;= 0; n--) {
            nuevoBotonNumerico(&quot;&quot; + n);
        }

        nuevoBotonNumerico(&quot;.&quot;);

        panel.add(&quot;Center&quot;, panelNumeros);

        panelOperaciones = new JPanel();
        panelOperaciones.setLayout(new GridLayout(6, 1));
        panelOperaciones.setBorder(new EmptyBorder(4, 4, 4, 4));

        nuevoBotonOperacion(&quot;+&quot;);
        nuevoBotonOperacion(&quot;-&quot;);
        nuevoBotonOperacion(&quot;*&quot;);
        nuevoBotonOperacion(&quot;/&quot;);
        nuevoBotonOperacion(&quot;=&quot;);
        nuevoBotonOperacion(&quot;CE&quot;);

        panel.add(&quot;East&quot;, panelOperaciones);

        validate();
    }

    /**
     * Crea un boton del teclado numérico y enlaza sus eventos con el listener correspondiente
     *
     * @param digito boton a crear
     */
    private void nuevoBotonNumerico(String digito) {
            JButton btn = new JButton();
            btn.setText(digito);
            btn.addMouseListener(
                    new MouseAdapter() {

                        @Override
                        public void mouseReleased(MouseEvent evt) {
                            JButton btn = (JButton) evt.getSource();
                            numeroPulsado(btn.getText());
                        }
                    });

            panelNumeros.add(btn);

    }

    /**
     * Crea un botón de operacion y lo enlaza con sus eventos.
     *
     * @param operacion
     */
    private void nuevoBotonOperacion(String operacion) {
        JButton btn = new JButton(operacion);
        btn.setForeground(Color.RED);

        btn.addMouseListener(
                new MouseAdapter() {

                    @Override
                    public void mouseReleased(MouseEvent evt) {
                        JButton btn = (JButton) evt.getSource();
                        operacionPulsado(btn.getText());
                    }
                });

        panelOperaciones.add(btn);
    }

    /**
     * Gestiona las pulsaciones de teclas numéricas
     *
     * @param digito tecla pulsada
     */
    private void numeroPulsado(String digito) {
        if (pantalla.getText().equals(&quot;0&quot;) || nuevaOperacion) {
            pantalla.setText(digito);
        } else {
            pantalla.setText(pantalla.getText() + digito);
        }
        nuevaOperacion = false;
    }

    /**
     * Gestiona el gestiona las pulsaciones de teclas de operación
     * @param tecla
     */
    private void operacionPulsado(String tecla) {
        if (tecla.equals(&quot;=&quot;)) {
            calcularResultado();
        } else if(tecla.equals(&quot;CE&quot;)) {
            resultado = 0;
            pantalla.setText(&quot;&quot;);
            nuevaOperacion = true;
        } else {
            operacion = tecla;
            if((resultado &gt; 0) &amp;&amp; !nuevaOperacion) {
                calcularResultado();
            } else {
                resultado = new Double(pantalla.getText());
            }
        }

        nuevaOperacion = true;
    }

    /**
     * Calcula el resultado y lo muestra por pantalla
     */
    private void calcularResultado() {
        if (operacion.equals(&quot;+&quot;)) {
            resultado += new Double(pantalla.getText());
        } else if (operacion.equals(&quot;-&quot;)) {
            resultado -= new Double(pantalla.getText());
        } else if (operacion.equals(&quot;/&quot;)) {
            resultado /= new Double(pantalla.getText());
        } else if (operacion.equals(&quot;*&quot;)) {
            resultado *= new Double(pantalla.getText());
        }

        pantalla.setText(&quot;&quot; + resultado);
        operacion = &quot;&quot;;
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://francho.org/lab/45/java-calculadora-sencilla-en-modo-grafico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
