Archivo

Posts Tagged ‘swing’

Java Validar Formularios

diciembre 6, 2009 1 comentario

Aca les dejo una clase que hice para validar si los Formularios están vacios

import java.awt.*;
import javax.swing.*;

public class EFValidacion {
	public static final int INTEGER=0;
	public static final int BYTE=1;
	public static final int LONG=2;
	public static final int DOUBLE=3;
	
	public static boolean isVacioForm(Component[] cs) {
		for(Component c : cs) {
			if(c instanceof JTextField) {
				if(((JTextField)c).isEnabled())
					if(((JTextField)c).getText().length()<1) return true;
			} else if(c instanceof JComboBox) {
				if(((JComboBox)c).getSelectedIndex() == 0) return true;
			} else if(c instanceof JPanel) {
				if(isVacioForm(((JPanel)c).getComponents())) return true;
			}
		}
		return false;
	}
	public static boolean is(String v,int w) {
		try {
			switch(w) {
				case 0: Integer.parseInt(v); break;
				case 1: Byte.parseByte(v); break;
				case 2: Long.parseLong(v); break;
				case 3: Double.parseDouble(v); break;
			}
			return true;
		} catch(Exception e) {}
		return false;
	}
}

Forma de Uso:

if(EFValidacion.isVacioForm(getContentPane().getComponents())){
	JOptionPane.showMessageDialog(null,"Existen campos vacios");
	return;
}else {
	//...
}

NOTA: Los JCombobox deben tener en la primera posición la descripción y luego los valores
Ejemplo:

Para usar el metodo is es necesario un String y el tipo de dato que se quiere comprobar,
Ejemplo:

if(!EFValidacion.is("CACA",EFValidacion.INTEGER)) {
	System.out.println("No es Numero");
}

Espero que les sirva,

Saludos!

Categorías:Java Etiquetas: , , , , , ,

Java, Creando JTable con swing

noviembre 12, 2009 6 comentarios

Bueno aqui pondré una forma sencilla de crear nuestra primera tabla con java.
La siguiente imagen nos muestra como esta compuesta una tabla
tabla

Como muestra la imagen la tabla se compone de:

  • Columas (Verticales)
  • Filas (Horizontales)

A la vez, las filas se componen de Celdas dependiendo de la fila y columna.

La tabla de la imagen tiene 3 Columnas

  • Columna A
  • Columna B
  • Columna C

1 Fila con 3 Celdas

  • X
  • Y
  • Z

En Java existe un componente que nos permitirá dibujar éste tipo de tablas y su nombre es JTable

JTable tiene el constructor sobrecargado y uno de ellos me pide dos parametros:
JTable(Vector rowData, Vector columnNames)

Un Vector de Filas y un Vector de Columnas

Tip: Vector es una clase que implementa la interface List, ArrayList tambien implementa la interface List, por lo que la forma de uso de Vector y ArrayList es igual.

Teniendo el conocimiento de lo anterior ahora lo pasaremos a codigo.

/**
 * @(#)Tabla.java
 *
 * Tabla application
 *
 * @author EstebanFuentealba
 * @version 1.00 2009/11/11
 */
 
/* Importo lo necesario para poder dibujar ventanas */
import java.awt.*;
import javax.swing.*;
/* Importo la Clase Vector que se encuentra en el package java.util */
import java.util.Vector;

/* mi clase Tabla hereda de JFrame */
public class Tabla extends JFrame {
    
    public Tabla() {
    	/* Le setearé el titulo a la ventana */
    	super("Mi tabla");
    	/* a la ventana le doy dimensiones de 300 de ancho x 200 de alto */
    	this.setSize(300,200);
    	
    	/* Creo una instancia de la clase Vector llamada 'columnas' */
    	Vector columnas = new Vector();
    	/* 
    	 	A ese vector le agrego datos, estos datos vendrán a ser las
    	 	columnas de la tabla.
    	*/
    	columnas.add("Columna A");
    	columnas.add("Columna B");
    	columnas.add("Columna C");

    	
    	/* 
    	 	Creo una instancia de la clase Vector llamada 'filas' , este vector
    	 	tendrá todas las filas de la tabla.
    	*/
    	Vector filas = new Vector();
    	
    	/*
    	 	Creo otro objeto de la clase Vector llamado 'fila', esto representará a
    	 	una fila en particular y cada elemento que agregue a este vector
    	 	será una celda.
    	 */
    	Vector fila = new Vector();
    	
    	fila.add("X");
    	fila.add("Y");
    	fila.add("Z");
  
		/* Agrego la fila al vector que contiene todas las filas */
    	filas.add(fila);
    	
    	/* 
    	 	Creo una instancia de JTable y le paso como parametro los dos Vectores:
    	 		-filas
    	 		-columnas	
    	 */
    	JTable tbl = new JTable(filas,columnas);
    	/* Creo una instancia de JScrollPane y le paso como parametro la tabla */
    	JScrollPane panel =new JScrollPane(tbl);
		/* Por ultimo agrego ese objeto de JScrollPane al contenedor de la ventana */
    	this.getContentPane().add(panel);
    	
    	this.setVisible(true);
    }
    public static void main(String[] args) {
    	new Tabla();
    }
}

Con eso ya tienen una tabla funcionando =)

Saludos!

Categorías:Java Etiquetas: , , , , , ,

Java Creacion de JMenuBar con Swing

noviembre 5, 2009 2 comentarios

Para que sigan avanzando con sus proyectos dejo a su disposiciòn un pequeño tutorial sobre como crear JMenuBar y como implementar su funcionalidad.

Para empezar debemos conocer los JComponent’s que estan involucrados para poder crear la barra de menu

JMenu

Como muestra la imagen, una barra de menu se compone de:

  • JMenuBar:  Es la barra de menú principal. Una barra horizontal alargada en la que se colocarán las distintas opciones.
  • JMenu: Es una de las cosas que se pueden añadir a un JMenuBar o a otro JMenu. Cuando añadimos uno de estos, tendremos un algo que al pinchar despliega un nuevo menú.
  • JMenuItem: Es una opción del JMenu que cuando lo pinchas hace algo

A continuación mostraremos la jerarquia, cómo está hecho el menú de la calculadora de Windows 7

JMenuBar
	|_______ JMenu (Ver)
	|			|_______ JMenuItem (Estandar)
	|			|_______ JMenuItem (Científica)
	|
	|_______ JMenu (Edición)
	|			|_______ JMenuItem (Copiar)
	|			|_______ JMenuItem (Pegar)
	|			|_______ JMenu (Historial)
	|						|_______ JMenuItem (Copiar Historial)
	|						|_______ JMenuItem (Editar)
	|						|_______ JMenuItem (Cancelar edicion)
	|						|_______ JMenuItem (Borrar)
	|
	|_______ JMenu (Ayuda)
				|_______ JMenuItem (Ver la Ayuda)
				|_______ JMenuItem (Acerca de Calculadora)

Ahora vamos a lo que realmente nos servirá… el codigo :P
Para este ejemplo crearemos el mismo menu de la calculadora de windows

WPrincipal.java

/*
 * Importo todo lo necesario para empezar
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/* Ésta clase "WPrincipal" heredará de JFrame */
public class WPrincipal extends JFrame {
	/* Atributos de la Clase */
	
	/* Declaro mi JMenuBar, éste me dibujara una barra horizontal */
	private JMenuBar barraMenu;
	
	/* Declaro los JMenu */
	private JMenu menuVer,menuEdicion,menuAyuda,menuHistorial;
	
	/* Declaro todos los JMenuItem */
	private JMenuItem itmEstandar,itmCientifica,itmCopiar,itmPegar,itmHistorialCopiar,itmHistorialEditar,itmHistorialCancelar,itmHistorialBorrar,itmAyudaVer,itmAyudaAcerca;
	
	
	/* Constructor Por Defecto */
	public WPrincipal() {
		/* con el super llamo al constructor del Padre y le paso el titulo de la ventana */
		super("Ejemplo JMenuBar");
		/* Inicializo todos los componentes de la ventana */
		this.barraMenu 			= new JMenuBar();
		
		this.menuVer 			= new JMenu("Ver");
		this.menuEdicion 		= new JMenu("Editar");
		this.menuAyuda 			= new JMenu("Ayuda");
		this.menuHistorial 		= new JMenu("Historial");
		
		this.itmEstandar 		= new JMenuItem("Estandar");
		this.itmCientifica 		= new JMenuItem("Cientifica");
		
		this.itmCopiar			= new JMenuItem("Copiar");
		this.itmPegar			= new JMenuItem("Pegar");
		
		this.itmHistorialCopiar	= new JMenuItem("Copiar Historial");
		this.itmHistorialEditar	= new JMenuItem("Editar");
		this.itmHistorialCancelar=new JMenuItem("Cancelar Edición");
		this.itmHistorialBorrar	= new JMenuItem("Borrar");
		this.itmAyudaVer		= new JMenuItem("Ver La Ayuda");
		this.itmAyudaAcerca		= new JMenuItem("Acerca de Calculadora");
		/* llamo al metodo init para ir agregando los componentes a la ventana */
		this.init();
		
	}
	public void init() {
		/* Le doy las dimensiones a mi ventana */
		this.setSize(250,300);
		/* le digo que al presionar el boton "X" el programa se detenga */
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		/* 	Ahora empezaré a agregar los JMenu al JMenuBar y los JMenuItem a los JMenu */
		
		/* Primero agrego el JMenu "Ver" a la Barra de Menu */
		this.barraMenu.add(this.menuVer);
			/* 
			Ahora al JMenu "Ver" Agrego dos JMenuItem 
			Deberia quedar Mas o menos asi:
					[ Ver ► ]
						|__ Estandar
						|__ Científica
			*/
			this.menuVer.add(this.itmEstandar);
			this.menuVer.add(this.itmCientifica);
		/* Ahora es el turno del JMenu "Edicion" agregarse a la barra de menu */
		this.barraMenu.add(this.menuEdicion);
			/* 
				Al JMenu "Edición" le agrego 2 JMenuItem y 1 JMenu
				Deberia quedar Mas o menos asi:
					[ Edicion ► ]
						|__ Copiar
						|__ Pegar
						|__ [ Historial ► ]
			 */
			this.menuEdicion.add(this.itmCopiar);
			this.menuEdicion.add(this.itmPegar);
			this.menuEdicion.add(this.menuHistorial);
				/* 
					Al JMenu Historial (que esta dentro del JMenu Editar) 
					le agrego los Items 
					[ Edicion ► ]
						|__ Copiar
						|__ Pegar
						|__ [ Historial ► ]
									|__ Copiar
									|__ Editar
									|__ Cancelar
									|__ Borrar
				 */
				this.menuHistorial.add(this.itmHistorialCopiar);
				this.menuHistorial.add(this.itmHistorialEditar);
				this.menuHistorial.add(this.itmHistorialCancelar);
				this.menuHistorial.add(this.itmHistorialBorrar);
		/* Por ultimo Agrego el JMenu Ayuda a la barra */
		this.barraMenu.add(this.menuAyuda);
			/* 
				 A ese JMenu le agrego los items que tendrá
			 		[ Ayuda ► ]
			 			|__ Ver
			 			|__ Acerca de Calculadora
			 */
			this.menuAyuda.add(this.itmAyudaVer);
			this.menuAyuda.add(this.itmAyudaAcerca);
			
			
		/* Por último le seteo el JMenuBar a esta ventana */
		this.setJMenuBar(this.barraMenu);
		
		/* Centro la ventana */
		this.setLocationRelativeTo(null);
		
		/* Llamo al metodo "programaEventos()" para asignarle eventos a cada uno de los JMenuItem */
		this.programaEventos();
		
		/* y la muestro */
		this.setVisible(true);

	}
	
	public void programaEventos() {
		/* 
		 	La forma de implementar la funcionalidad de los JMenuItem es identica a como lo hacian con JButton
		 	crean un listener y se lo asignan al JMenuItem
		 	
		 	Solo le asignaremos un listener a "itmAyudaAcerca" y cuando lo presionemos desplegara un mensaje de alerta
		 */
		ActionListener ejemploA = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null,"Presionaste el JMenuItem Acerca de");
			}	
		};
		this.itmAyudaAcerca.addActionListener(ejemploA);
	}
}

Descargar Codigo de Fuente:
http://estebanfuentealba.net/ayudantia/EjemploJMenuBar.rar

Con eso ya tendrian una ventana con un menu , solo implementé un JMenuItem … el Acerca de , si lo presionan debería Mostrar una alerta por pantalla.

Saludos!

Categorías:Java Etiquetas: , , , , ,

Certamen 2 [PEF2501]

Aquí dejo el Certamen 2 de la seccion PEF2501 de Programacion Orientada A Objetos.

Enunciado:
El restaurant PINPON ha decidido ofertar almuerzos a todos los trabajadores
de la empresa que así lo soliciten, para esto ha encargado la confección de
un sistema que permita llevar esos pedidos.

DEFINICIÓN DE CLASES – 20 PUNTOS
· Clase MenuEjecutivo.java

ATRIBUTOS TIPO
Entrada String
conConsome boolean
platoFondo String
Postre String
Liquido String
conCafe boolean

MÉTODOS

  • Constructor con parámetros (que reciba todos los atributos)
  • Accesador para cada atributo
  • Mutador para cada atributo
  • toString

 

REQUERIMIENTOS DE INTERFAZ – 30 PUNTOS
Basado en el anterior modelo de clases crear una aplicación que despliegue la
siguiente ventana:

C2

 

Una vez escogidas las alternativas se debe calcular el precio del menú. Para
lo anterior considere las siguientes reglas:

ENTRADA  VALOR
Palta Reina  1.500
Tomate relleno  1.400
Vegetariano  800

PLATO FONFO  VALOR
Arroz con pollo  2.300
Bistec a lo pobre  2.800
Tortilla española  800

POSTRE  VALOR
Fruta  100
De la casa  250

 

Los valores de los líquidos son los que se indican a continuación:

LÍQUIDO  VALOR
Bebida  300
Cerveza  420

Si  escoge  consomé  y  café  se  debe  aplicar  un  recargo  de  100,  si  escoge  sólo
café o sólo consomé se debe aplicar un recargo de 80.

El precio del menú se calcula de la siguiente manera:

PRECIO_MENU  =  VALOR_ENTRADA  +  VALOR_PLATO_FONDO  +  VALOR_POSTRE  +
VALOR_LIQUIDO + RECARGO

Se pide:

Implementar  las  acciones  en  cada  botón  de  la  ventana  de  acuerdo  a  las
siguientes consideraciones:

·  Botón Ingresar debe desplegar el contenido del menú escogido junto con
el valor de este en el TextArea de la ventana, considerar instanciar un
objeto de la clase MenuEjecutivo.

·  Botón Limpiar debe dejar los componentes limpios o en su estado inicial.
·  Botón Salir debe terminar la ejecución de la aplicación.

(50 PUNTOS)

 

MenuEjecutivo.java


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;


public class MenuEjecutivo {
	
	private String 	entrada;
	private String 	platoFondo;
	private String 	postre;
	private String 	liquido;
	
	private boolean conConsome;
	private boolean conCafe;
	
	public MenuEjecutivo() { }
    public MenuEjecutivo(String entrada, boolean conConsome, String platoFondo,String postre, String liquido, boolean conCafe) {
    	this.entrada 	= entrada;
    	this.conConsome = conConsome;
    	this.platoFondo = platoFondo;
    	this.postre 	= postre;
    	this.liquido 	= liquido;
    	this.conCafe 	= conCafe;
    }

    /* Accesador */
    
    public String getEntrada(){
    	return this.entrada;
    }
    
    public boolean getConConsome(){
    	return this.conConsome;
    }
    
    public String getPlatoFondo(){
    	return this.platoFondo;
    }
    
    public String getPostre(){
    	return this.postre;
    }
    
    public String getLiquido(){
    	return this.liquido;
    }
    
    public boolean getConCafe(){
    	return this.conCafe;
    }
    
  
    /* Mutadores */

    public void setEntrada(String valor){
    	this.entrada = valor;
    }
    
    public void setConConsome(boolean valor){
    	this.conConsome = valor;
    }
    
    public void setPlatoFondo(String valor){
    	this.platoFondo = valor;
    }
    
    public void setPostre(String valor){
    	this.postre = valor;
    }
    
    public void setLiquido(String valor){
    	this.liquido = valor;
    }
    
    public void setConCafe(boolean valor){
    	this.conCafe = valor;
    }
    public int getValorEntrada() {
    	int valorEntrada = 0;
    	if(this.getEntrada().equals("Palta Reina")) {
    		valorEntrada = 1500;
    	} 
    	else if(this.getEntrada().equals("Tomate Relleno")) {
    		valorEntrada = 1400;
    	}
    	else if(this.getEntrada().equals("Vegetariano")) {
    		valorEntrada = 800;
    	}
    	return valorEntrada;
    }
    public int getValorPlatoFondo() {
    	int valorPlatoFondo = 0;
    	if(this.getPlatoFondo().equals("Arroz con Pollo")) {
    		valorPlatoFondo = 2300;
    	}
    	else if(this.getPlatoFondo().equals("Bistec a lo Pobre")) {
    		valorPlatoFondo = 2800;
    	}
    	else if(this.getPlatoFondo().equals("Tortilla Española")) {
    		valorPlatoFondo = 800;
    	}
    	return valorPlatoFondo;
    }
    public int getValorPostre() {
    	int valorPostre = 0;
    	if(this.getPostre().toLowerCase().equals("fruta")) {
    		valorPostre = 100;
    	}
    	else if(this.getPostre().toLowerCase().equals("de la casa")) {
    		valorPostre = 250;
    	} else {
    		valorPostre = 0;
    	}
    	return valorPostre;
    }
    public int getValorLiquido() {
    	int valorLiquido = 0;
    	if(this.getLiquido().equals("Bebida")) {
    		valorLiquido = 300;
    	}
    	else if(this.getLiquido().equals("Cerveza")) {
    		valorLiquido = 420;
    	}
    	return valorLiquido;
    }
    public int getValorRecargo() {
    	int recargo = 0;
    	if(conCafe && conConsome) {
    		recargo = 100;
    	} else if(conCafe || conConsome) {
    		recargo = 80;
    	}
    	return recargo;
    }
    public int getValorTotal() {
    	return this.getValorEntrada() + this.getValorPlatoFondo() + this.getValorPostre() + this.getValorLiquido() + this.getValorRecargo();
    }
    /* Sobrescritura del toString() */
    public String toString() {
    	return "Entrada: "+this.getEntrada()+"\t$"+String.valueOf(this.getValorEntrada())+"\nPlato de Fondo: "+this.getPlatoFondo()+"\t$"+String.valueOf(this.getValorPlatoFondo())+"\nPostre: "+this.getPostre()+"\t$"+String.valueOf(this.getValorPostre())+"\nLiquido: "+this.getLiquido()+"\t$"+String.valueOf(this.getValorLiquido())+"\nCon Consome: "+((this.getConConsome()) ? "Si" : "No")+"\nCon Café: "+((this.getConCafe()) ? "Si" : "No")+"\nRecargo: $"+String.valueOf(this.getValorRecargo())+"\nTotal: "+this.getValorTotal();
    }
}

WCertamen2.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class WCertamen2 extends JFrame {
	
	private JComboBox 		cmbEntrada,cmbFondo;
	private JTextField 		txtPostre;
	private JRadioButton 	rbCafe,rbConsome,rbAmbos,rbBebida,rbCerveza;
	private JButton			btnIngresar,btnLimpiar,btnCerrar;
	private JTextArea		areaDetalle;
	private ButtonGroup 	grupoA,grupoB;
	
	private MenuEjecutivo	menu;
	
	public WCertamen2() {
		super("Registro de Pedido");
		this.cmbEntrada		= new JComboBox();
			this.cmbEntrada.addItem("Palta Reina");
			this.cmbEntrada.addItem("Tomate Relleno");
			this.cmbEntrada.addItem("Vegetariano");
		this.cmbFondo 		= new JComboBox();
			this.cmbFondo.addItem("Arroz con Pollo");
			this.cmbFondo.addItem("Bistec a lo Pobre");
			this.cmbFondo.addItem("Tortilla Española");
		
		this.txtPostre 		= new JTextField();
		
		this.rbCafe			= new JRadioButton("Café");
		this.rbConsome		= new JRadioButton("Consome");
		this.rbAmbos		= new JRadioButton("Ambos");
		
		this.rbBebida		= new JRadioButton("Bebida");
		this.rbCerveza		= new JRadioButton("Cerveza");
		
		this.btnIngresar	= new JButton("Ingresar");
		this.btnLimpiar		= new JButton("Limpiar");
		this.btnCerrar		= new JButton("Cerrar");
		
		this.areaDetalle	= new JTextArea();
		this.init();
	}
	public void init() {
		this.setSize(300,450);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
	
		grupoA = new ButtonGroup();
		grupoA.add(rbCafe);
		grupoA.add(rbConsome);
		grupoA.add(rbAmbos);
		
		grupoB = new ButtonGroup();
		grupoB.add(rbBebida);
		grupoB.add(rbCerveza);
		
		
		JPanel panelComida	= new JPanel();
		panelComida.setBorder(new TitledBorder(new EtchedBorder(),"Comida"));
		panelComida.setLayout(new GridLayout(2,2));
			panelComida.add(new JLabel("Entrada"));
			panelComida.add(cmbEntrada);
			panelComida.add(new JLabel("Plato Fondo"));
			panelComida.add(cmbFondo);
		
		Box horizontal = Box.createHorizontalBox();
		horizontal.setBorder(new TitledBorder(new EtchedBorder(),"Postre"));
			horizontal.add(new JLabel("Postre "));
			horizontal.add(txtPostre);
			horizontal.add(new JLabel(" Fruta,de la casa, sin postre"));
		
		
		JPanel panelAbajo = new JPanel();
		panelAbajo.setLayout(new GridLayout(2,2));
		
			JPanel panelCafeConsome = new JPanel();
			panelCafeConsome.setBorder(new TitledBorder(new EtchedBorder(),"Café/Consomé"));
			panelCafeConsome.setLayout(new GridLayout(3,1));
				panelCafeConsome.add(rbCafe);
				panelCafeConsome.add(rbConsome);
				panelCafeConsome.add(rbAmbos);
		panelAbajo.add(panelCafeConsome);
		
			JPanel panelLiquido = new JPanel();
			panelLiquido.setBorder(new TitledBorder(new EtchedBorder(),"Líquido"));
			panelLiquido.setLayout(new GridLayout(2,1));
				panelLiquido.add(rbBebida);
				panelLiquido.add(rbCerveza);
		panelAbajo.add(panelLiquido);
		
			JPanel panelDetalle = new JPanel();
			panelDetalle.setBorder(new TitledBorder(new EtchedBorder(),"Detalle Menú"));
			panelDetalle.setLayout(new GridLayout());
				panelDetalle.add(areaDetalle);
		panelAbajo.add(panelDetalle);
		
			JPanel panelBotones = new JPanel();
			panelBotones.setLayout(new GridBagLayout());
				panelBotones.add(btnIngresar);
				panelBotones.add(btnLimpiar);
				panelBotones.add(btnCerrar);
		panelAbajo.add(panelBotones);
		
		
		this.getContentPane().add(panelComida,BorderLayout.NORTH);
		this.getContentPane().add(horizontal,BorderLayout.CENTER);
		this.getContentPane().add(panelAbajo,BorderLayout.SOUTH);
		
		this.programarEventos();
		this.pack();
		this.setLocationRelativeTo(null);
		this.setResizable(false);
		this.setVisible(true);
	}
	public void programarEventos() {
		
		ActionListener agregar = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String entrada 		= cmbEntrada.getSelectedItem().toString();
				String platoFondo 	= cmbFondo.getSelectedItem().toString();
				String postre 		= txtPostre.getText();
				
				boolean conCafe 	= false;
				boolean conConsome 	= false;
				if(rbCafe.isSelected()) {
					conCafe 	= true;
				}
				if(rbConsome.isSelected()) {
					conConsome 	= true;
				}
				if(rbAmbos.isSelected()) {
					conCafe 	= true;
					conConsome 	= true;
				}
				
				String liquido		= "";

				if(rbBebida.isSelected()) {
					liquido = "Bebida";
				}
				if(rbCerveza.isSelected()) {
					liquido = "Cerveza";
				}
				//MenuEjecutivo(String entrada, boolean conConsome, String platoFondo,String postre, String liquido, boolean conCafe)
				menu = new MenuEjecutivo(entrada,conConsome,platoFondo,postre,liquido,conCafe);
				areaDetalle.setText(menu.toString());
				pack();
			}	
		};
		this.btnIngresar.addActionListener(agregar);
		
		ActionListener limpiar = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				txtPostre.setText("");
				grupoA.clearSelection();
				grupoB.clearSelection();
				areaDetalle.setText("");
				pack();
			}	
		};
		this.btnLimpiar.addActionListener(limpiar);
		
		ActionListener cerrar = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}	
		};
		this.btnCerrar.addActionListener(cerrar);
		
	}
}
public class CertamenDos {
    public static void main(String[] args) {
    	new WCertamen2();
    }
}

Descargar Codigo de Fuente:
http://estebanfuentealba.net/ayudantia/Certamen2-PEF2501.rar

Java Clases Internas Anónimas

octubre 31, 2009 7 comentarios

Muchas veces mas de alguna vez se preguntaron al agregarle un evento a un boton lo siguiente:
Por que al instanciar un ActionListener hay que poner unas llaves

ActionListener action = new ActionListener() {
	//...
};

La respuesta a esa interrogante es la siguiente:
ActionListener no es una class, sino que es una interface , eso quiere decir que no esta completa y alguna clase tiene que implementarla.
La forma común que conocemos de implementar es la siguiente:

interface IOrden {
	Object mayor(Object o);
}
/* Con la palabra reservada 'implements' tomo un acuerdo de implementar la interface */
public class Persona implements IOrden {
	//...
	/* Aqui implemento la interface */
	public Object mayor(Object o) {
		//...
	}
}

El codigo anterior muestra como la clase Persona implementó IOrden .

Otra forma de implementar interface es creando clases anónimas…
¿ que quiere decir esto ?
una clase sin nombre y sin una visibilidad definida.
Un ejemplo de clase anónima es la que ocupamos cuando agregamos ActionListener, al ser una interface debe ser implementada por alguna clase, nosotros a menudo la implementamos con una clase anónima
Ej:

ActionListener action = new ActionListener() {
	//...
};

Lo que esta entre llaves es la clase anónima que esta dentro de otra clase.

Ej:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
 
public class Tips {
    public int numero = 1;
    public Tips() {
    	/* Creo un Objeto de la Clase JFrame */
		JFrame win = new JFrame();
		/* A esa ventana le doy un ancho y alto */
		win.setSize(300,200);
		
		/* Creo un Objeto de la clase JButton */
		JButton b = new JButton("Clickear");
		/* A ese boton le agrego un evento */
		ActionListener click = new ActionListener() {
			public int numero=2;
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null,"Hola "+this.numero);
			}
		};
		b.addActionListener(click);
		
		/* Agrego el Boton al contenedor de la ventana */
		win.getContentPane().add(b);
		/* Muestro la ventana */
		win.setVisible(true);
    }
    
    public static void main(String[] args) {
    	new Tips();
    }
}

Para explicar lo anterior fijemonos en la siguientes lineas:

ActionListener click = new ActionListener() {
			public int numero=2;
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null,"Hola "+this.numero);
			}
		};

El objeto click es de una instancia de ActionListener , esta a su vez implementa la interface con una clase anónima, pero a su vez esa clase anónima esta dentro de la clase Tips.

Algo interesante es lo que pasa cuando ejecuto la siguiente linea:

JOptionPane.showMessageDialog(null,"Hola "+this.numero);

Esa linea debería mostrarnos una alerta por pantalla… Pero fijense:
La clase Tips tiene un atributo llamado:

public int numero = 1;

y la clase anónima tambien tiene un atributo:

public int numero=2;

Entonces ¿ A que atributo debía llamar la alerta ?

la palabra reservada this es para referenciar a elementos (atributos o metodos) de esta clase

JOptionPane.showMessageDialog(null,"Hola "+this.numero);

Como esa linea esta dentro del método actionPerformed y ese metodo está dentro de la clase anónima. El this ,en éste caso, va a hacer referencia al atributo dentro de dicha clase anonima, por lo que debería mostrar

Hola 2

Por eso nunca dentro del

public void actionPerformed(ActionEvent e) {
//...
}

Nunca deben llamar a elementos (métodos o atributos) con this, osino tendrán un error que el metodo o atributo no fue encontrado porque buscara el atributo en la clase anónima y no en la que anida dicha clase anónima.

Espero que les quede un poco mas claro,

Saludos!

Categorías:Java Etiquetas: , , , ,