package ejemcplocombo;
import java.util.ArrayList;
public class Controlador {
private Ventana ventana;
//En el Controlador, siempre se debe tener un atributo
//que guarde la referencia a la Ventana
public void iniciar(){
ventana = new Ventana(this);
// El Controlador, al crear la ventana, se pasa a sí mismo
//para que la Ventana almacene al controlador en su atributo
//y pueda haber una comunicación en ese sentido.
ventana.setVisible(true);
Producto prod1 = new Producto("Notebook", 18000);
Producto prod2 = new Producto("TV", 28000);
Producto prod3 = new Producto("Celular", 11000);
ArrayList<Producto> productos = new ArrayList();
productos.add(prod1);
productos.add(prod2);
productos.add(prod3);
ventana.cargarComboBox(productos);
}
public void buscarPrecio(Producto producto){
double precio = producto.getPrecio();
ventana.mostrarPrecio(precio);
}
}
----------------------------------------------------------------------------------------------------
package ejemcplocombo;
import java.util.ArrayList;
import javax.swing.DefaultComboBoxModel;
//Todos los programas que involucran una interfaz gráfica (ventana), siempre tienen un controlador que está estrechamente relacionado con la ventana. El objetivo es lograr una comunicación bidireccional entre en controlador y la ventana. De esta manera la ventana notifica al controlador cuando se produce algún evento del usuario (click en botón por ejemplo), pasándole datos si es necesario. En la otra dirección, el controlador ejecuta métodos de la ventana para actualizar la interfaz (mostrar un mensaje de error, o un resultado, por ejemplo). Esto se logra de la siguiente manera:
En la Ventana, es necesario guardar una referencia a la instancia Controlador que la creó. Esto se logra también a través de un atributo (línea verde). Por ejemplo, dentro del código de una Ventana (super incompleta por supuesto), hay que tener lo siguiente:
public class Ventana extends javax.swing.JFrame {
/**
* Creates new form Ventana
*/
private Controlador controlador;
public Ventana(Controlador controlador){
this.controlador = controlador;
//La Ventana recibe en su constructor a un objeto Controlador,
//al cual almacena en su atributo
initComponents();
}
public Ventana() {
initComponents();
}
//cargar opciones en el combo
public void cargarComboBox(ArrayList productos){
cmbProducto.setModel(new DefaultComboBoxModel(productos.toArray()));
}
public void mostrarPrecio(double precio){
lblPrecio.setText(Double.toString(precio));
}
@SuppressWarnings("unchecked")
private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {
//obtengo la opcion seleccionada
Producto producto = (Producto) cmbProducto.getSelectedItem();
controlador.buscarPrecio(producto);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
}
public void run() {
new Ventana().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton btnBuscar;
private javax.swing.JComboBox<String> cmbProducto;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel lblPrecio;
// End of variables declaration
}
------------------------------------------------------------------------------------------------------------------
package ejemcplocombo;
public class Producto {
private String nombre;
private double precio;
public Producto(String nombre, double precio){
this.nombre = nombre;
this.precio = precio;
}
public String getNombre(){
return nombre;
}
public double getPrecio(){
return precio;
}
// Definir el texto que se muestra en el combo
@Override
public String toString() {
return nombre;
}
---------------------------------------------------------------------------------------------------------------
package ejemcplocombo;
public class EjemcploCombo {
public static void main(String[] args) {
Controlador controlador = new Controlador();
controlador.iniciar();
}
}