El siguiente ejercicio es una pequeña simulación de una aplicación para venta de productos de un tienda de juegos.
El ejercicio está desarrollado en Netbeans, los pasos para generar el proyecto son los siguientes:
1.- Crear un nuevo proyecto tipo Java Aplication. (Para este caso lo he puesto Venta Productos)
2.- Sobre el paquete Creamos la clase Producto que va permitir almacenar la información de cada juego. El código de la clase es el siguiente:
package ventaproductos; /** * * @author Paulo */ public class Producto { private String nombre; private String tamanio; private String categoria; private int disponibles; private double precio; public Producto(String nombre, String tamanio, String categoria, int disponibles, double precio) { this.nombre = nombre; this.tamanio = tamanio; this.categoria = categoria; this.disponibles = disponibles; this.precio=precio; } /** * @return the nombre */ public String getNombre() { return nombre; } /** * @param nombre the nombre to set */ public void setNombre(String nombre) { this.nombre = nombre; } /** * @return the tamanio */ public String getTamanio() { return tamanio; } /** * @param tamanio the tamanio to set */ public void setTamanio(String tamanio) { this.tamanio = tamanio; } /** * @return the categoria */ public String getCategoria() { return categoria; } /** * @param categoria the categoria to set */ public void setCategoria(String categoria) { this.categoria = categoria; } /** * @return the disponibles */ public int getDisponibles() { return disponibles; } /** * @param disponibles the disponibles to set */ public void setDisponibles(int disponibles) { this.disponibles = disponibles; } /** * @return the precio */ public double getPrecio() { return precio; } /** * @param precio the precio to set */ public void setPrecio(double precio) { this.precio = precio; } }
3.- Sobre el paquete Crear una nueva Clase llamada Ventana. Esta clase debe extender de JFrame e implementar la Interfaz ActionListener. Para organizar la información he decidio usar el Layout en modo GridLayout es decir una matriz de N x M en los cuales todos los elementos tienen el mismo tamaño.
Esto se lo puede ver a continuación.
Uploaded with ImageShack.us
Ahora continuando con la programación en el constructor debemos instanciar los Objetos tipo Producto y agregarlos al Arraylist.
Uploaded with ImageShack.us
En seguida debemos definir el título, dimensiones, layout, etc. es decir la configuración de mi Ventana, además agregamos los componentes al panel.
Uploaded with ImageShack.us
Por último debemos definir el actionListener para los controles de los cuales debemos controlar los eventos e implementar el código del método ActionPerforme.
El Código completo de la Clase ventana es el siguiente:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package ventaproductos; import com.sun.corba.se.impl.naming.cosnaming.InterOperableNamingImpl; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; /** * * @author Paulo */ public class Ventana extends JFrame implements ActionListener { // Componentes que serán agregados a mi Ventana. private JComboBox cboJuegos; private JLabel lblJuego, lblNombre, lblDisponible, lblTamanio, lblCategoria, lblPrecio, lblCantidad; private JTextField txtNombre, txtDisponibles, txtTamanio, txtCategoria, txtPrecio, txtCantidad; private JButton pedir, vender; // Un arreglo dinámico para los productos(Juegos). ArrayListjuegos; // Constructor public Ventana(){ juegos=new ArrayList (); Producto juego; juego =new Producto("Cars","102kb","Deportes", 30,1.30F); juegos.add(juego); juego =new Producto("Cars2","103kb","Deportes", 20,1.50F); juegos.add(juego); juego =new Producto("FIFA 2011","204kb","Deportes", 35,1.80F); juegos.add(juego); juego =new Producto("Matador","312kb","Accion", 20,1.10F); juegos.add(juego); this.setSize(500, 400); this.setLayout(new GridLayout(8,2,5,5)); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("MI ventana de Ventas de Juegos"); // Instanciamos y Agregamos los componente al panel lblJuego=new JLabel("Seleccione el Juego"); this.getContentPane().add(lblJuego); cboJuegos=new JComboBox(); for(Producto x:juegos ){ cboJuegos.addItem(x.getNombre()); } this.getContentPane().add(cboJuegos); // agregando al panel lblNombre=new JLabel("Nombre del Juego"); this.getContentPane().add(lblNombre); txtNombre=new JTextField(40); this.getContentPane().add(txtNombre); lblCategoria=new JLabel("Categoria del Juego"); this.getContentPane().add(lblCategoria); txtCategoria=new JTextField(40); this.getContentPane().add(txtCategoria); lblTamanio=new JLabel("Tamaño del Juego"); this.getContentPane().add(lblTamanio); txtTamanio=new JTextField(40); this.getContentPane().add(txtTamanio); lblPrecio=new JLabel("Precio del Juego"); this.getContentPane().add(lblPrecio); txtPrecio=new JTextField(40); this.getContentPane().add(txtPrecio); lblDisponible=new JLabel("Disponible: "); this.getContentPane().add(lblDisponible); txtDisponibles=new JTextField(40); this.getContentPane().add(txtDisponibles); lblCantidad=new JLabel("Cantidad:"); this.getContentPane().add(lblCantidad); txtCantidad=new JTextField(40); this.getContentPane().add(txtCantidad); pedir=new JButton("Pedir"); vender=new JButton("Vender"); this.getContentPane().add(pedir); this.getContentPane().add(vender); cboJuegos.addActionListener(this); pedir.addActionListener(this); vender.addActionListener(this); } // Implementación del método abstracto public void actionPerformed(ActionEvent e) { int indice=cboJuegos.getSelectedIndex(); if(e.getSource()==cboJuegos){ txtNombre.setText(juegos.get(indice).getNombre()); txtCategoria.setText(juegos.get(indice).getCategoria()); txtTamanio.setText(juegos.get(indice).getTamanio()); txtPrecio.setText(String.valueOf(juegos.get(indice).getPrecio())); txtDisponibles.setText(String.valueOf(juegos.get(indice).getDisponibles())); } if(e.getSource()==pedir){ juegos.get(indice).setDisponibles(juegos.get(indice).getDisponibles()+Integer.parseInt(txtCantidad.getText())); txtDisponibles.setText(String.valueOf(juegos.get(indice).getDisponibles())); } if(e.getSource()==vender ){ if((juegos.get(indice).getDisponibles()-Integer.parseInt(txtCantidad.getText()))>=0){ juegos.get(indice).setDisponibles(juegos.get(indice).getDisponibles()-Integer.parseInt(txtCantidad.getText())); txtDisponibles.setText(String.valueOf(juegos.get(indice).getDisponibles())); }else { JOptionPane.showMessageDialog(null, "NO se dispone de la cantidad !!!"); } } } }
Ahora lo único que nos queda es crear un objeto tipo ventana en el método main y ejecutar.
package ventaproductos; /** * * @author Paulo */ public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Ventana v=new Ventana(); v.setVisible(true); //v.pack(); } }
La ejecución del programa se verá asi:
Uploaded with ImageShack.us