// ====================================================================== // Objetivo: Graficar un conjunto de pares de valores x,y // Autor: J. Rafael R. Ochoa // Fecha: Julio 2004, // Derechos: SID - FIE - UMSNH // ====================================================================== import java.io.*; import java.util.Vector; import javax.swing.*; import java.awt.event.*; import java.lang.Runtime; import java.awt.FileDialog; public class EvalFuncion extends JFrame { JTextField CTVF_DESDE, CTVF_HASTA, CTVF_INCR, CTVF_ARCH, CT_ECUA; // Conjunto de campos de texto JButton B_GENERAR, B_SALIR, B_GRAFICAR; // Conjunto de Botones // AtenciOn a la interrupciOn del sistema // -click en el botOn x de la ventana- //_____________________________________________________________ class WEH extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } // AtenciOn a los eventos de los componentes de tipo JButton //_____________________________________________________________ class EscuchaEvento implements ActionListener { public void actionPerformed(ActionEvent AE) { if (AE.getActionCommand().equals("GENERA DATOS")) EVENTO_GENDAT(); // Pide valores de la funciOn if (AE.getActionCommand().equals("GRAFICAR")) EVENTO_GRAFICAR(); // Abre ventana de selecciOn de archivos if (AE.getActionCommand().equals("SALIR")) EVENTO_SALIR(); // SALIR } } // MAIN //_________________________________________________________ public static void main(String R[]) throws Exception { new EvalFuncion(); } // Muestra la interfaz del sistema //_________________________________________________________ public EvalFuncion() { CTVF_DESDE = new JTextField(); // Campo de Texto de la Ventana Flotante Vdesde CTVF_HASTA = new JTextField(); // Campo de Texto de la Ventana Flotante Vhasta CTVF_INCR = new JTextField(); // Campo de Texto de la Ventana Flotante Vincremento CTVF_ARCH = new JTextField(); // Campo de Texto de la Ventana Flotante Vnombre del archivo CT_ECUA = new JTextField(); // Campo de Texto de la ecuaciOn B_GENERAR = new JButton("GENERA DATOS"); // BotOn OK B_GRAFICAR = new JButton("GRAFICAR"); // BotOn GRAFICAR B_SALIR = new JButton("SALIR"); // BotOn SALIR //---------------------------------------------------------------------------------------------------------- getContentPane().setLayout(null); // Contenedor nulo setTitle("Evaluador de funciones..."); // TItulo de la ventana setResizable(true); // No es redimensionable setLocation(50,50); // PosiciOn centrada setSize(410, 160); // Dimensiones //--------------------------------------------------------------------------------------------------------- addWindowListener(new EvalFuncion.WEH()); JLabel L_DESDE = new JLabel("Valor inicial: "); JLabel L_HASTA = new JLabel("Valor final: "); JLabel L_INCR = new JLabel("Incremento: "); JLabel L_ARCH = new JLabel("Archivo: "); JLabel L_ECUA = new JLabel("ExpresiOn: "); L_ECUA.setBounds(10, 5, 120, 17); CT_ECUA.setBounds(10, 25, 380, 17); L_DESDE.setBounds(10, 55, 120, 17); L_HASTA.setBounds(10, 75, 120, 17); L_INCR.setBounds(10, 95, 120, 17); L_ARCH.setBounds(10, 115, 120, 17); B_GENERAR.setBounds(225, 75, 135, 15); B_GENERAR.addActionListener(new EscuchaEvento()); B_GRAFICAR.setBounds(225, 95, 135, 15); B_GRAFICAR.addActionListener(new EscuchaEvento()); B_SALIR.setBounds(225, 115, 135, 15); B_SALIR.addActionListener(new EscuchaEvento()); CTVF_DESDE.setBounds(100, 55, 120, 17); CTVF_HASTA.setBounds(100, 75, 120, 17); CTVF_INCR.setBounds(100, 95, 120, 17); CTVF_ARCH.setBounds(100, 113, 120, 17); getContentPane().add(L_DESDE, null); getContentPane().add(L_HASTA, null); getContentPane().add(L_INCR, null); getContentPane().add(L_ARCH, null); getContentPane().add(L_ECUA, null); getContentPane().add(B_GENERAR, null); getContentPane().add(B_SALIR, null); getContentPane().add(B_GRAFICAR, null); getContentPane().add(CTVF_DESDE, null); getContentPane().add(CTVF_HASTA, null); getContentPane().add(CTVF_INCR, null); getContentPane().add(CTVF_ARCH, null); getContentPane().add(CT_ECUA, null); show(); // Mostrar la ventana } // Se guarda el contenido de la pila "ARCHIVOS_DE_DATOS" en un archivo // y se termina la ejecucin del sistema. //__________________________________________________________________________ void EVENTO_SALIR() { System.exit(0); } // Atencin al evento "Leer datos" y pasar el control a la clase GRAFICA //_____________________________________________________________________________ void EVENTO_GRAFICAR() { CTVF_DESDE.setText(""); CTVF_HASTA.setText(""); CTVF_INCR.setText(""); CTVF_ARCH.setText(""); SeleccionaArchivo(); } // Interfaz para la seleccin de un archivo de una lista de archivos //__________________________________________________________________ void SeleccionaArchivo() { FileDialog FD = new FileDialog(new JFrame(), "Seleccione un archivo de datos"); FD.show(); // Hacer visible FD String Archivo[] = {FD.getFile()}; try { if (Archivo != null) {xy_plot XYPLOT = new xy_plot(Archivo); } } catch(IOException e){} } // Funciones: // 1.- Verifica que todos los campos tengan datos. Si no hay alguno, no se contina // 2.- Se respalda la informaciOn introducida en variables locales // 3.- Desaparecer la ventana flotante. // 4.- Evaluar la ecuacin guardando los resultados en un archivo. // 5.- Aadir el nombre del archivo nuevo a la pila de archivos "ARCHIVOS_DE_DATOS" // solamente si no existe. //________________________________________________________________________________________ void EVENTO_GENDAT() { double ValIni=0, ValFin=0, Increm=0; String NomArc=""; // Si alguno de estos datos falta, no se hace nada if (CTVF_DESDE.getText().length() != 0 || CTVF_HASTA.getText().length() != 0 || CTVF_INCR.getText().length() != 0 || CTVF_ARCH.getText().length() != 0 || CT_ECUA.getText().length() != 0) { ValIni = Double.parseDouble(CTVF_DESDE.getText()); // Se extraen los valores ValFin = Double.parseDouble(CTVF_HASTA.getText()); Increm = Double.parseDouble(CTVF_INCR.getText()); NomArc = CTVF_ARCH.getText()+".txt"; FileOutputStream FOS = null; // Declaracin del objeto FOS try { FOS = new FileOutputStream(NomArc); } // Creacin del archivo de salida catch (IOException IOE) {} String ExprInfija="", ExprPostfija="",STVALOR=""; ExprInfija = CT_ECUA.getText(); InfijaAPostfija IAP = new InfijaAPostfija(ExprInfija); // Convercin al formato posfijo ExprPostfija = IAP.Convertir(); EvaluaPostfija EP = new EvaluaPostfija(ExprPostfija); // Declaracin de la evaluacin for (double k=ValIni; k<=ValFin; k+=Increm) // Generacin de los valores de la funcin { double Valor = EP.Evalua(k); STVALOR = "" + k + "," + Valor + "\n"; try { FOS.write(STVALOR.getBytes()); } catch (IOException e) { System.out.println("Error: " + e.toString()); } } } } }