En la vida se presentan innumerables ejemplos de procesos que se realizan de manera parela, simultneos o concurrentes. Por tales razones, la concurrencia es un fenmeno importante de tratar, ya que permite el desarrollo de sistemas capaces de adelantar, mltiples procesos simultneamente. A su vez cada proceso se puede componer de mltiples Programacin de Hilos: tareas, ejecutndose segn ciertas reglas, de manera simultnea. Debe entenderse que, se hace referencia a procesos en el sentido de programas, y dentro de cualquier programa, la posibilidad de manejar, concurrentemente, mltiples tareas. Hasta el momento se han desarrollado programas que realizan una sola tarea, entendiendose por tarea, un hilo de ejecucin o un (thread), tambin denominados de flujo nico, en contraste con los programas que realizan ms de una tarea, o de multitareas o multithreads, denominados de flujo mltiple. Especificamente una tarea se encarga de controlar un nico aspecto, dentro de la ejecucin de un programa, por ejemplo el manejo de grficos, las entradas/salidas de archivos en disco, u otros. Las tareas se diferencian de los procesos, en que las primeras comparten los mismos recursos del programa que las contiene, en tanto los procesos tienen en forma separada su cdigo, as como sus datos. Flujo nico: un programa de flujo nico (single-Thread) utiliza un solo hilo para controlar su ejecucin. Por defecto, cualquier programa applet o aplicacin Java, tiene un hilo denominado principal (Thread). En estos programas este hilo no necesita explicitarse, pues por defecto son de flujo nico. Realizan las operaciones indicadas en un solo hilo o nica tarea y terminan. En otros terminos, un programa en ejecucin en Java es un hilo. Flujo mltiple: un programa de flujo mltiple o multitarea, utiliza varios contextos de ejecucin para realizar su trabajo. Cada tarea se inicia y termina tan pronto como sea posible, lo cual es una facilidad para la entrada de datos en sistemas en tiempo real, especialmente si estos son de diferentes fuentes. En este caso, se dice que ademas del hilo principal del programa en ejeccin, este tiene otros hilos, o tareas parelas en ejecucin. Se puede definir hilo como una secuencia nica de control de flujo dentro de un programa. Entendiendo que puede haber ms de una secuencia de control o hilos. Java permite realizar programacinmultihilo, el cual consiste en programas que contienen dos o ms partes que se ejecutan de manera concurrente. Una parte que se ejecuta independientemente de las dems se denomina un hilo (thread). En un entorno de multitarea basada en hilos, el hilo es la unidad de cdigo ms pequea que se puede seleccionar para ejecucin. La programacin basada en multihilos, permite escribir programas ms eficientes ya que optimizan los recursos de la Unidad Central de Proceso (CPU), al reducir al mnimo los tiempos de inactividad. Este es un factor muy importante manejo de entornos interactivos, como es el caso del trabajo en la red, en dondeProgramacin de Hilos: Introduccin las velocidades de transmisin son mucho ms lentas que los requeridos por laCPU en el procesamiento de esos datos, as como tambien durante el manejo del sistema de archivos, lectura y grabacin, que son ms lentos que las velocidades de la CPU en su proceso. Las animaciones y los juegos por ejemplo, requieren de una mayor optimizacin de los recursos de CPU. Al mostrarse un archivo o una imgen dentro de un navegador y acceder en seguida a una direccin electronica o URL para una bsqueda, es un ejemplo de aplicacin multihilo. Sin esta caracterstica, sera necesario esperar a que el archivo se bajara de la red o se cargara la imagen para poder acceder a una direccion URL para un proceso de bsqueda. Con la programacin multihilo, se aprovecha el tiempo del procesador realizando otra tarea en la red son multihilo. La programacin multihilo permite acceder a los recursos de tiempo libre de la CPU, mientras se realizan otras tareas. Es otra de las razones de importanciapara el estudio de sistemas basados en multihilos.El modelo multihilo est inmerso en el interpretede Java, ya que las bibliotecasde clases estan diseadas teniendo en mente este modelo. Los hilos formanparte de todos los programas en Java. Un hilo dentro de un programa Java es un procedimiento que se puede ejecutar independiente del resto de una aplicacin.La siguiente figura ilustra esquemticamente un programa de un hilo y un programa de dos hilos.
Cuando se ejecuta una aplicacin en Java, se ejecuta el mtodo main() en un hilo dedicado, as como tambin los applets se ejecutan en hilos dedicados, lo cual hace explcito que el concepto de hilo es esencial del trabajo en Java. Un hilo puede detenerse sin afectar las otras partes del programa. Por ejemplo en un hilo de animacin, se hace que los bucles de la animacin se detengan durante un tiempo, un segundo, sin hacer que se pare el resto del programa. Cuando un hilo se detiene o se bloquea, slo el se detiene y los dems continan con su ejecucin. La creacin de un hilo, como la necesidad de un procedimiento que se har de manera concurrente con otros procedimientos, pasa por la definicin del procedimiento que se llamar repetidamente, por ejemplo el procedimiento en un applet que muestra una animacin, mientras se reproduce un clip de audio y se capturan los clicks del ratn. Aqu la animacin consiste en exhibir a intervalos de tempo una secuencia de imagenes de tal manera que se de la sensacin de movimiento.
Resumen
Un hilo es un nico flujo de ejecucin dentro de un proceso. El cual es un programa ejecutndose dentro de su propio espacio de direcciones. Java es un sistema multiproceso, esto significa que soporta varios procesos corriendo a la vez dentro de sus propios espacios de direcciones. Mientras escribimos se est ejecutando. De esta forma, se puede pensar que los procesos son anlogos a las aplicaciones o a programas aislados, pero cada proceso tiene asignado espacio propio de ejecucin dentro del sistema.Un hilo es una secuencia de cdigo en ejecucin dentro del contexto de un proceso. Los hilos no pueden ejecutarse ellos solos; requieren la supervisin de un proceso padre para correr. Dentro de cada proceso hay varios hilos ejecutndose. Los hilos a menudo son conocidos o llamados procesos ligeros. Un hilo, en efecto, es muy similar a un proceso pero con la diferencia de que un hilo siempre corre dentro del contexto de otro programa. Por el contrario, los procesos mantienen su propio espacio de direcciones y entorno de operaciones. Los hilos dependen de un programa padre en lo que se refiere a recursos de ejecucin. La siguiente figura muestra le relacin entre hilos y procesos.
summary
A thread is a single stream of execution within a process. Which is a program running in its own address space. Java is a multithreaded system, this means that supports many processes running at once within its own address space. As we write it is running. Thus, we may assume that the processes are analogous to applications or isolated programs, but each process is assigned its own space within the sistema.Un execution thread is a sequence of code execution within the context of a process. The threads can not run themselves; require the supervision of a parent process to run. Within each process there are multiple threads executing. The yarns are known or often called lightweight processes. A thread in fact is very similar to a process but with the difference that one thread always runs in the context of another program. By contrast, the processes maintain its own address space and operating environment. The yarns are dependent on a parent program in respect to execution resources. The following figure shows you relationship between threads and processes.
.2. Definicin del algoritmo. Resultado deseado: Mostrar una boleta de pago en Pdf. Datos necesarios:tipo de producto cdigo del producto tipo del producto Marca del producto Total Precio Procesamiento:el usuario ingresa el cdigo, tipo del producto, marca del producto, total de venta ,precio del producto y es almacenado en las variable TipoDeProducto, codigo, marca,numeroDeVenta y precioDeVenta . Luego, se realizar el clculo del total a pagar.El resultado se almacenar en una variable ( ganancias)para luego ser mostradas por pantalla. 2. Definicin del paquete Aplicacin En el paqueteTienda definiremos tres clases.La funcin de la primera clase ser de procesamiento y almacenamiento de datos.Como buena prctica de programacin, en los mtodos de esta clase, no serealizar ingreso de datos, ni se mostrarn mensajes de ningn tipo. Pero, si seutilizarn los mismos nombres para referirnos a variables locales y a los atributos
Creamos un nueva aplicacin en java con nombre Tienda_De_Electo Creamos los siguientes paquetes:
Biblioteca: Importamos la Clase LE aportada de Ing. Juan Flores Cueto docente encargado del curso de lenguaje programacin II. En la cual nos ayudara con los cuadros de mensajes de entrada y salida (JOptionPane). Tienda: Enese paquete colocaremos los Jdialog y las clases de contendrn los arreglos. Y la clase del hilo musical. Icon: En este paquete estarn la imgenes importadas para el uso en Button y lo Label. Javapdf: En este paquete creamos una clase archivos donde controlara el uso de archivos donde podremos direccionar el archivo creado con un JFileChooser.
Paquete Biblioteca/Clase LE
package Biblioteca; import java.awt.*; import javax.swing.*; publicclassLE { public static double leerDouble(String mensaje) { String cadena = leerString(mensaje); try { return Double.parseDouble(cadena); } catch (NumberFormatException e) { mostrarError("Error... debe ingresar un nmero "); return leerDouble(mensaje); } } Public static long leerLong(String mensaje) { String cadena = leerString(mensaje); try { return Long.parseLong(cadena); } catch (NumberFormatException e) { mostrarError("Error... debe ingresar un nmero "); return leerLong(mensaje); } } Public static void mostrarError(String mensaje) { JOptionPane.showMessageDialog(null, mensaje, "Error", JOptionPane.ERROR_MESSAGE); } publicstaticvoidmostrarInformacion(String mensaje) { JOptionPane.showMessageDialog(null, mensaje, "Informacin", JOptionPane.INFORMATION_MESSAGE); } publicstaticintmostrarPreguntaOpcion2(String mensaje) { return JOptionPane.showOptionDialog(null, mensaje, "Pregunta", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); }
PaqueteJavapdf/Archivos
packageJavapdf; importcom.itextpdf.text.*; import java.io.*; import Biblioteca.LE; importcom.itextpdf.text.pdf.PdfWriter; importjava.util.logging.Level; importjava.util.logging.Logger; importjavax.swing.*; importjavax.swing.filechooser.FileNameExtensionFilter; import mp3seth.Main; publicclassArchivos { private File destino = null; publicArchivos() { } publicvoidcrear_PDF(String k, String c) { Colocar_Destino(); if (this.destino != null) { try { // se crea instancia del documento Document mipdf = newDocument(); PdfWriter.getInstance(mipdf, newFileOutputStream(this.destino + ".pdf")); mipdf.open(); mipdf.add(new Paragraph(c)); mipdf.close(); LE.mostrarInformacion("Archivo guardado"); } catch (DocumentException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (FileNotFoundException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } } publicvoidColocar_Destino() { FileNameExtensionFilter filter = newFileNameExtensionFilter("Archivo PDF", "pdf", "PDF"); JFileChooserfileChooser = newJFileChooser(); fileChooser.setFileFilter(filter); int result = fileChooser.showSaveDialog(null); if (result == JFileChooser.APPROVE_OPTION) { this.destino = fileChooser.getSelectedFile().getAbsoluteFile(); } } }
Paquete Principal/Inicio
10
11
Paquete Tienda/TiendaElectroSA
Creamos la clase TiendaElectroSA en la cual crearemos los arreglos con los siguientes datos String tipoDeProducct, longcdigo, String marca,doubleprecioDeCompra,doubleprecioDeVenta, intnumeroDeProducto 1 package Tienda; 2 3 public class TiendaElectroSA { 4 String tipoDeProduccto[]; 5 longcodigo[]; 6 String marca[]; 7 doubleprecioDeCompra[]; 8 doubleprecioDeVenta[]; 9 intnumeroDeProducto[]; 10 intnumeroDecompras; 11 intnumeroDeVentas; 12 publicTiendaElectroSA() { 13 tipoDeProduccto = newString[99]; 14 codigo = newlong[99]; 15 marca = newString[99]; 16 precioDeCompra = newdouble[99]; 17 precioDeVenta = newdouble[99]; 18 numeroDeProducto=newint[99]; 19 numeroDeVentas=0; 20 numeroDecompras=0; 21 } 22 public void aumentar() { 23 longcodigoProducto[] = newlong[codigo.length + 3]; 24 String tipoP[]=new String[tipoDeProduccto.length+3]; 25 String marc[]=new String[marca.length+3]; 26 doubleprCompra[]=newdouble[precioDeCompra.length+3]; 27 doubleprVenta[]=newdouble[precioDeVenta.length+3]; 28 for(int i=0;i<numeroDeVentas;i++){ 29 codigoProducto[i]=codigo[i]; 30 tipoP[i]=tipoDeProduccto[i]; 31 marc[i]=marca[i]; 32 prCompra[i]=precioDeCompra[i]; 33 prVenta[i]=precioDeVenta[i]; 34 } 35 codigo=codigoProducto; 36 tipoDeProduccto=tipoP; 37 marca=marc; 38 precioDeCompra=prCompra; 39 precioDeVenta=prVenta; 40 } 41 42 publicString[] getTipoDeProduccto() { 43 returntipoDeProduccto; 44 } 45 publicvoidsetTipoDeProduccto(String[] tipoDeProduccto) { 46 this.tipoDeProduccto = tipoDeProduccto; 47 } 48 publiclong[] getCodigo() {
12
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
returncodigo; } publicvoidsetCodigo(long[] codigo) { this.codigo = codigo; } publicString[] getMarca() { returnmarca; } publicvoidsetMarca(String[] marca) { this.marca = marca; } publicdouble[] getPrecioDeCompra() { returnprecioDeCompra; } publicvoidsetPrecioDeCompra(double[] precioDeCompra) { this.precioDeCompra = precioDeCompra; } publicdouble[] getPrecioDeVenta() { returnprecioDeVenta; } publicvoidsetPrecioDeVenta(double[] precioDeVenta) { this.precioDeVenta = precioDeVenta; } publicdoubleGanancias(intnum,doubleprecio) { double ganancias=0; ganancias=num*precio; returnganancias; } publicintgetNumeroDeVentas() { returnnumeroDeVentas; } publicvoidsetNumeroDeVentas(intnumeroDeVentas) { this.numeroDeVentas = numeroDeVentas; } publicint[] getNumeroDeProducto() { returnnumeroDeProducto; } publicvoidsetNumeroDeProducto(int[] numeroDeProducto) { this.numeroDeProducto = numeroDeProducto; } }
13
Paquete Tienda/Tienda1
Creamos en esta clase las variables con los mismos datos de la clase anterior. 1 package Tienda; 2 publicclassTienda1 { 3 String tipoDeProduccto; 4 longcodigo; 5 String marca; 6 doubleprecioDeCompra; 7 doubleprecioDeVenta; 8 doubleganancias; 9 intnumeroDeProducto; 10 intnumeroDeVentas; 11 intnumeroDecompras; 12 publicTienda1() { 13 tipoDeProduccto = ""; 14 codigo = 0; 15 marca = ""; 16 precioDeCompra =0; 17 precioDeVenta = 0; 18 ganancias = 0; 19 numeroDeVentas = 0; 20 numeroDecompras=0; 21 numeroDeProducto=0; 22 } 23 24 publicStringgetTipoDeProduccto() { 25 returntipoDeProduccto; 26 } 27 publicvoidsetTipoDeProduccto(String tipoDeProduccto) { 28 this.tipoDeProduccto = tipoDeProduccto; 29 } 30 publiclonggetCodigo() { 31 returncodigo; 32 } 33 publicvoidsetCodigo(longcodigo) { 34 this.codigo = codigo; 35 } 36 public String getMarca() { 37 returnmarca; 38 } 39 publicvoidsetMarca(String marca) { 40 this.marca = marca; 41 } 42 publicdoublegetPrecioDeCompra() { 43 returnprecioDeCompra; 44 } 45 publicvoidsetPrecioDeCompra(doubleprecioDeCompra) { 46 this.precioDeCompra = precioDeCompra; 47 } 48 publicdoublegetPrecioDeVenta() { 49 returnprecioDeVenta; 50 }
14
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
publicvoidsetPrecioDeVenta(doubleprecioDeVenta) { this.precioDeVenta = precioDeVenta; } publicdoublegetGanancias() { returnganancias; } publicvoidsetGanancias(double ganancias) { this.ganancias = ganancias; } publicintgetNumeroDeVentas() { returnnumeroDeVentas; } publicvoidsetNumeroDeVentas(intnumeroDeVentas) { this.numeroDeVentas = numeroDeVentas; } publicintgetNumeroDecompras() { returnnumeroDecompras; } publicvoidsetNumeroDecompras(intnumeroDecompras) { this.numeroDecompras = numeroDecompras; } publicintgetNumeroDeProducto() { returnnumeroDeProducto; } publicvoidsetNumeroDeProducto(intnumeroDeProducto) { this.numeroDeProducto = numeroDeProducto; } }
Paquetetienda/HiloMusica
En esta clase usamos la clase del hilo Runnable que la implementaremos con el JDialogVentas que har reproducir una msica que esta direccionada desde otra clase Reproductor mientras hagamos los registros de ventas. 1 package Tienda; 2 import java.util.logging.Level; 3 import java.util.logging.Logger; 4 publicclassHiloMusicaimplements Runnable { Clase de un hilo 5 publicvoidrun() { 6 try { 7 Reproductor o = newReproductor(); 8 o.reproducemp3(); 9 System.out.println("Sonandomusica"); 10 } catch (Exception ex) { 11 Logger.getLogger(HiloMusica.class.getName()).log(Level.SEVERE, null, ex); 12 } 13 } 14 }
15
Paquete tienda/Reproducto
En esta clase direccionaremos el lugar de origen en la cual la msica se reproducir utilizando javazoom 1 package Tienda; 2 import java.io.File; Importamos javazoom 3 import javazoom.jlgui.basicplayer.BasicPlayer; 4 publicclassReproductor { 5 public BasicPlayer player; 6 publicReproductor() { 7 player = newBasicPlayer(); 8 } 9 10 publicvoidPlay() throws Exception { 11 player.play(); 12 } 13 publicvoidAbrirFichero(String ruta) throws Exception { 14 player.open(new File(ruta)); 15 } 16 publicvoidStop() throws Exception { 17 player.stop(); 18 } 19 publicvoidreproducemp3 ()throws Exception{ Direccion en la 20 try { cual se 21 Reproductormi_reproductor = newReproductor(); reproducir la 22 mi_reproductor.AbrirFichero("G:/usb/zMusic/mana.mp3"); musica 23 mi_reproductor.Play(); 24 } catch (Exception ex) { 25 System.out.println("Error: " + ex.getMessage()); 26 } 27 } 28 }
JFrameTienda
Interfaz principal donde podemos controlar el manejo de compras y ventas de la tienda de electros Electro House.
16
privatejavax.swing.JDesktopPanejDesktopPane1; privatejavax.swing.JLabeljLabel1; privatejavax.swing.JLabeljLabel2; privatejavax.swing.JLabeljLabel3; privatejavax.swing.JLabeljLabel4; privatejavax.swing.JLabeljLabel5; privatejavax.swing.JLabeljLabel6; privatejavax.swing.JMenuBarjMenuBarPrincipal; privatejavax.swing.JMenuItemjMenuComprasDElectros; privatejavax.swing.JMenuItemjMenuItemSalirDelSistema; privatejavax.swing.JMenujMenuSalir; privatejavax.swing.JMenuItemjMenuVentas; privatejavax.swing.JMenujMenurepor; // End of variables declaration private javax.swing.JDialog dialogo;
privatevoidjMenuVentasActionPerformed(java.awt.event.ActionEventevt){ dialogo=newJDialogVentas(this, true); dialogo.setLocationRelativeTo(this); dialogo.setTitle("Proyecto Final Tienda De Electros S.A (Ventas)"); dialogo.setVisible(true); }
17
privatevoidjMenuItemSalirDelSistemaActionPerformed(java.awt.event.ActionEvente vt){ int respuesta = JOptionPane.showConfirmDialog(this, "Est seguro...?", "Dilogo de Confirmacin", JOptionPane.YES_NO_OPTION); if (respuesta == JOptionPane.YES_OPTION) { System.exit(WIDTH); } }
18
JDialogCompras
Interfaz que nos permite manipular los datos de tipo de producto y marca y la cantidad privatejavax.swing.JTextAreaareaDecompras; privatejavax.swing.JButtonbtnAceptar; privatejavax.swing.ButtonGroupbuttonGroup1; privatejavax.swing.JButtonjButton1; privatejavax.swing.JComboBoxjComboBox3; privatejavax.swing.JComboBoxjComboBoxmarca; privatejavax.swing.JComboBoxjComboBoxtipo; privatejavax.swing.JDesktopPanejDesktopPane1; privatejavax.swing.JLabeljLabel1; privatejavax.swing.JLabeljLabel2; privatejavax.swing.JScrollPanejScrollPane1; privatejavax.swing.JLabellblCompu; privatejavax.swing.JLabellblCompu1; privatejavax.swing.JTextFieldtxtMarca; privatejavax.swing.JTextFieldtxtTipo;
privatevoidjComboBoxtipoActionPerformed(java.awt.event.ActionEventevt){ txtTipo.setText(jComboBoxtipo.getSelectedItem().toString());
19
BotonAceptar
privatevoidbtnAceptarActionPerformed(java.awt.event.ActionEventevt){ Tienda1 obTienda1 = newTienda1(); obTienda1.setTipoDeProduccto(txtTipo.getText()); obTienda1.setMarca(txtMarca.getText()); obTienda1.setNumeroDeProducto(Integer.parseInt(txtTotal.getText())); obTiendaElectroSA.marca[obTiendaElectroSA.numeroDecompras] = obTienda1.getMarca(); obTiendaElectroSA.tipoDeProduccto[obTiendaElectroSA.numeroDecompras] = obTienda1.getTipoDeProduccto(); obTiendaElectroSA.numeroDeProducto[obTiendaElectroSA.numeroDecompras]=obTie nda1.getNumeroDeProducto(); obTiendaElectroSA.numeroDecompras++; txtMarca.setText(""); txtTipo.setText(""); txtTotal.setText(""); LE.mostrarInformacion("se agrego el dato "); }
Botn Mostrar
Permite mostrar en el JtextArea las compras registradas
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){ String listas = ""; for (int i = 0; i <obTiendaElectroSA.numeroDecompras; i++) { listas += obTiendaElectroSA.tipoDeProduccto[i] + "" + obTiendaElectroSA.marca[i]+ ""+ obTiendaElectroSA.numeroDeProducto[i] + "\n"; } areaDecompras.setText("tipos de produto }
marca de producto
total\n" + listas);
20
JDialogVentas
Formulario JDilog que permitir desarrollar los mtodos agregar, mostrar, eliminar, buscar por cdigo del arreglo y tambin los botones de clculo, limpieza es sern visible en un Text Area y guardar en pdf y si el cdigo ya existe y/o inversa que se muestre en mensaje.
// Variables declaration - do not modify privatejavax.swing.JDesktopPanejDesktopPane1; privatejavax.swing.JLabeljLabel1; privatejavax.swing.JLabeljLabel2; privatejavax.swing.JLabeljLabel3; privatejavax.swing.JLabeljLabel4; privatejavax.swing.JLabeljLabel5; privatejavax.swing.JLabeljLabel6; privatejavax.swing.JMenuBarjMenuBarPrincipal; privatejavax.swing.JMenuItemjMenuComprasDElectros; privatejavax.swing.JMenuItemjMenuItemSalirDelSistema; privatejavax.swing.JMenujMenuSalir; privatejavax.swing.JMenuItemjMenuVentas; // End of variables declaration private javax.swing.JDialog dialogo
21
Desarrollo del hilo musical: mientras que agregamos los datos el hilo har un reproduccin automtica. package Tienda; importBiblioteca.LE; importJavapdf.Archivos; publicclassJDialogVentasextendsjavax.swing.JDialog { HiloMusicamiHilo; Thread musicalThread; TiendaElectroSA objTiendaElectroSA = newTiendaElectroSA(); Tienda1 oTienda = newTienda1(); publicJDialogVentas(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); setSize(713, 873); setLocationRelativeTo(this); miHilo=newHiloMusica(); musicalThread=new Thread(miHilo); musicalThread.start(); }
22
23
Mostrar:
Muestra los datos ingresados ingresados por el usuario en un Text Area privatevoidbtnImprimirActionPerformed (java.awt.event.ActionEventevt){ String Lista = ""; for (int i = 0; i <objTiendaElectroSA.numeroDeVentas; i++) { Lista += objTiendaElectroSA.codigo[i] + "" + objTiendaElectroSA.tipoDeProduccto[i]+ "" + objTiendaElectroSA.marca[i] + "" + objTiendaElectroSA.precioDeVenta[i] + "" + "\n"; } AreaMostrar.setText("codigo tipo marca Precio\n" + Lista); }
24
Eliminar
privatevoidjButton1ActionPerformed(java.awt.event.ActionEventevt){ long cod = LE.leerLong("ingrese codigo para eleminar"); int pos = buscaCodigo(cod); if (pos != -1) { objTiendaElectroSA.marca[pos]); if (rpt == 0) { for (int i = pos; i <objTiendaElectroSA.numeroDeVentas - 1; i++) { objTiendaElectroSA.codigo[i] = objTiendaElectroSA.codigo[i + 1]; objTiendaElectroSA.marca[i] = objTiendaElectroSA.marca[i + 1]; objTiendaElectroSA.tipoDeProduccto[i] = objTiendaElectroSA.tipoDeProduccto[i + 1]; objTiendaElectroSA.precioDeVenta[i] = objTiendaElectroSA.precioDeVenta[i + 1]; } objTiendaElectroSA.numeroDeVentas--; } else { LE.mostrarError("el codigo no existe"); } } }
25
26
Aceptar
private void btnAceptarActionPerformed(java.awt.event.ActionEvent evt) { calcular(); } privatevoidcalcular() { try { double precio = Double.parseDouble(txtPrecio.getText()); int numVentas = Integer.parseInt(txtTotal.getText()); txtTotalAPagar.setText(String.valueOf(objTiendaElectroSA.Ganancias(numVentas, precio))); } catch (Exception e) { LE.mostrarError("se produjo errores"); } }
27
Limpiar
Limpia todos las cajas de textos incluyendo el Text Area sin perder informacin de las ventas
Uso de Archivos
Guardar con este botn podemos guardar la informacin de venta a un cliente e imprimirla como un recibo de venta. privatevoidjButton2ActionPerformed(java.awt.event.ActionEventevt){ Archivos boleta = newArchivos(); String lis1 = ""; String lis2 = ""; for (int i = 0; i <objTiendaElectroSA.numeroDeVentas; i++) { lis1 = "codigo tipo de producto marca cantidades \n" + "___________________________________________________\n"; lis2 += objTiendaElectroSA.codigo[i] + "" + objTiendaElectroSA.tipoDeProduccto[i] + "" + objTiendaElectroSA.marca[i] + "" + objTiendaElectroSA.numeroDeProducto[i] + "\n"; } boleta.crear_PDF(lis1 + lis2, lis1 + lis2); }
28
Al darle un clic el botn Guardar con saldr el JFileChooser que nos permitir direccionar donde guardaremos la informacin de venta y si el archivopdf fue guardado correctamente nos mostrara un mensaje Llamada desde la clase LE.
Al salirnos ese mensaje iremos a la direccin donde lo guardamos en este caso la unidad (D:) Factura
Esto quiere decir que los datos fueron guardados en un pdf correctamente.
29
30