Package hojatrabajo4

Source Code of hojatrabajo4.Principal

/*
*      Principal.java
*      Descripcion: Frame con los componentes gráficos del programa
*      Autores:
*              Alexander Bolaños   12114
*              Ricardo Hegel       12232
*/
package hojatrabajo4;

import java.awt.Color;
import java.awt.FileDialog;
import java.io.BufferedReader;
import java.io.FileReader;
import java.text.DecimalFormat;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;

/**
* Inicio de la clase
*/
public class Principal extends javax.swing.JFrame {

    private Stack<Double> miStack = new StackVector<Double>();
    private DecimalFormat formato = new DecimalFormat("0.0");
    static int indice,indiceLista;
    private Calculadora calculadora;
   
    /**
     * Constructor
     */
    public Principal(int indice,int indiceLista) {
        this.indice = indice;
        this.indiceLista = indiceLista;
        calculadora = calculadora.getInstance();
        calculadora.crearStack(indice, indiceLista);
       
        //initComponents posiciona todos los elementos gráficos, labels, botones, etc
        initComponents();
        //caracteristicas determina la personalizacion de ciertos componentes
        caracteristicas();
       
    }

    /**
     * initComponents contiene la declaración y clocaciónn de los elementos gráficos del frame
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextArea2 = new javax.swing.JTextArea();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        jButton1.setFont(new java.awt.Font("Calibri", 1, 14)); // NOI18N
        jButton1.setText("Seleccionar Archivo");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1);
        jButton1.setBounds(400, 330, 160, 40);

        jTextArea1.setColumns(20);
        jTextArea1.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N
        jTextArea1.setForeground(new java.awt.Color(0, 0, 102));
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        getContentPane().add(jScrollPane1);
        jScrollPane1.setBounds(30, 70, 430, 250);

        jTextArea2.setColumns(20);
        jTextArea2.setFont(new java.awt.Font("Times New Roman", 0, 12)); // NOI18N
        jTextArea2.setForeground(new java.awt.Color(51, 102, 0));
        jTextArea2.setRows(5);
        jScrollPane2.setViewportView(jTextArea2);

        getContentPane().add(jScrollPane2);
        jScrollPane2.setBounds(480, 70, 430, 250);

        jLabel1.setFont(new java.awt.Font("Calibri", 1, 36)); // NOI18N
        jLabel1.setText("Calculadora:");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(390, 10, 200, 30);

        jLabel2.setFont(new java.awt.Font("Calibri", 0, 11)); // NOI18N
        jLabel2.setText("Documento de Texto:");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(30, 50, 120, 14);

        jLabel3.setFont(new java.awt.Font("Calibri", 0, 11)); // NOI18N
        jLabel3.setText("Operaciones:");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(480, 50, 80, 14);

        jLabel4.setFont(new java.awt.Font("Calibri", 0, 11)); // NOI18N
        jLabel4.setText("Valores en el Stack:");
        getContentPane().add(jLabel4);
        jLabel4.setBounds(670, 350, 110, 14);

        jTextField1.setFont(new java.awt.Font("Times New Roman", 0, 11)); // NOI18N
        jTextField1.setForeground(new java.awt.Color(255, 0, 0));
        jTextField1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField1ActionPerformed(evt);
            }
        });
        getContentPane().add(jTextField1);
        jTextField1.setBounds(780, 350, 80, 19);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField1ActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_jTextField1ActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        /*
         * Obtengo el archivo, lo evalúo y si es un archivo de texto lo leo y analizo para poder operarlo
         */
        String obtenido = obtenerArchivo();
        if(!obtenido.equals("ERROR")){
            boolean realizado = calcular(obtenido);
            if(realizado)
                JOptionPane.showMessageDialog(this,"Proceso finalizado satisfactoriamente.");
            else
                JOptionPane.showMessageDialog(this,"Se presentaron errores en el cálculo.");
        }
    }//GEN-LAST:event_jButton1ActionPerformed

    /**
     * main de la interfaz
     */
    public static void main(String args[]) {
      
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Principal(indice,indiceLista).setVisible(true);
            }
        });
    }
   
    /*
     *  Este método obtiene el archivo que contiene los operadores.
     */
    public String obtenerArchivo(){
        jTextArea1.setText("");
        jTextArea2.setText("");
        String todo = "";
        FileDialog fd= new FileDialog(this,"Abrrir archivo",FileDialog.LOAD);
        fd.setVisible(true);
        String nombreArchivo=fd.getFile();
        String Directorio=fd.getDirectory();
        int contador=1;
        try{
            BufferedReader arch= new BufferedReader(new FileReader(Directorio+nombreArchivo));
            String lin;
            do{
                lin=arch.readLine();
                if(lin!=null){
                    todo += lin+"\n";
                    jTextArea1.setText(jTextArea1.getText()+"LINEA "+contador+"||| "+lin+"\n");
                    contador++;
                }
            }while(lin!=null);
            return todo;
        }catch(Exception e){
            JOptionPane.showMessageDialog(this,"Error al abrir el archivo, archivo no compatible");
            return("ERROR");
        }
       
    }
   
    /*
     * Este metodo desarrolla la personalizacion de ciertos aspectos del JFrame
     */
    public void caracteristicas(){
        jTextArea1.setEditable(false);
        jTextArea2.setEditable(false);
        jTextField1.setEditable(false);
        jButton1.setSize(150,40);
    }
   
   
    /*
     * Este método divide la cadena en líneas, luego en columnas
     */
    public boolean calcular(String todo){
        int contador = 1;
        boolean correcto=true;
        StringTokenizer st = new StringTokenizer(todo,"\n");
        while(st.hasMoreTokens()) {
            jTextField1.setText("");
            jTextArea2.setText(jTextArea2.getText()+"LINEA "+contador+"||| ");
            contador++;
            String linea = st.nextToken();
            String operacion = calculadora.analizar(linea);
            jTextArea2.setText(jTextArea2.getText()+operacion.substring(3));
            if(operacion.substring(0,1).equals("1")){
                Stack<String> miStack = calculadora.getMiStack();
                Double necesario = Double.parseDouble(miStack.pop());
                jTextField1.setText(formato.format(necesario));
                calculadora.setMiStack(miStack);
            }
            else{
                correcto=false;
                if(operacion.substring(1,2).equals("0")){
                    String op;
                    if(operacion.substring(2,3).equals("0"))
                        op = "suma";
                    else if(operacion.substring(2,3).equals("1"))
                        op = "resta";
                    else if(operacion.substring(2,3).equals("2"))
                        op = "multiplicación";
                    else
                        op = "división";
                    JOptionPane.showMessageDialog(this,"Error en Operación: "
                        + "Falta dos operandos para poder realizar una "+op+".");
                    Stack<String> miStack = calculadora.getMiStack();
                    int tam = miStack.size();
                    for(int i=0;i<tam;i++){
                        Double numero = Double.parseDouble(miStack.pop());
                        if(i==0)
                            jTextField1.setText(""+formato.format(numero));
                        else
                            jTextField1.setText(jTextField1.getText()+" , "+formato.format(numero));
                    }
                }
                else if(operacion.substring(1,2).equals("1")){
                    String op;
                    if(operacion.substring(2,3).equals("0"))
                        op = "suma";
                    else if(operacion.substring(2,3).equals("1"))
                        op = "resta";
                    else if(operacion.substring(2,3).equals("2"))
                        op = "multiplicación";
                    else
                        op = "división";
                    JOptionPane.showMessageDialog(this,"Error en Operación: "
                        + "Falta un operando para poder realizar una "+op+".");
                    Stack<String> miStack = calculadora.getMiStack();
                    int tam = miStack.size();
                    for(int i=0;i<tam;i++){
                        Double numero = Double.parseDouble(miStack.pop());
                        if(i==0)
                            jTextField1.setText(""+formato.format(numero));
                        else
                            jTextField1.setText(jTextField1.getText()+" , "+formato.format(numero));
                    }
                }
                else if(operacion.substring(1,2).equals("2")){
                    JOptionPane.showMessageDialog(this,"Error en Operación: "
                        + "Ingresó un símbolo incorrecto.");
                    Stack<String> miStack = calculadora.getMiStack();
                    int tam = miStack.size();
                    for(int i=0;i<tam;i++){
                        Double numero = Double.parseDouble(miStack.pop());
                        if(i==0)
                            jTextField1.setText(""+formato.format(numero));
                        else
                            jTextField1.setText(jTextField1.getText()+" , "+formato.format(numero));
                    }
                }
                else{
                    JOptionPane.showMessageDialog(this,"Error en Operación: "
                        + "No se han operado la totalidad de números en el Stack.");
                    Stack<String> miStack = calculadora.getMiStack();
                    int tam = miStack.size();
                    for(int i=0;i<tam;i++){
                        Double numero = Double.parseDouble(miStack.pop());
                        if(i==0)
                            jTextField1.setText(""+formato.format(numero));
                        else
                            jTextField1.setText(jTextField1.getText()+" , "+formato.format(numero));
                    }
                }
            }
        }
        return correcto;
    }
   
    /*
     * Declaraciónd de los atributos del grame, botones, labels, etc.
     */
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextArea jTextArea2;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration//GEN-END:variables
}
TOP

Related Classes of hojatrabajo4.Principal

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.