Programas a Revisar y Repaso de La Unidad 1

17
Programas para entregar en la unidad 1. 1. Programa de la CALCULADORA (debe de hacer los cálculos (con eventos) ) 20% 2. Programa del Chat 15% (con eventos opcional). 3.Programa que calcule conversiones Fahrenheit y Celsius 15% (con eventos) 4. Programa de áreas de fig. geométricas 15% (con eventos) 5.Programas Checkbox y menus (sin eventos) 10% Layout null Los componentes pueden colocarse exactamente donde el programador lo decida si en lugar de usar uno de los despliegues predeterminados aplica el despliegue nulo o Layout null (setLayout(null)) y define la posición y dimensiones de cada componente con el método setBounds(int left,int top,int width,int height) setBounds(130,149, 125, 20); Este sistema tiene el inconveniente de que la presentación no se ajusta automáticamante cuando se cambian las dimensiones del contenedor o la ventana, pero en muchas ocasiones es útil y además cuando el programador quiere controlar todos los detalles no hay mejor opción. Se le pasa como argumento, donde 130, 149 son respectivamente las coordenadas x,y dentro del formulario y 125 es el ancho y 20 la altura del control JLabel. En realidad lo único que hacen es utilizar el null Layout y permitir al programador colocar los componentes con el ratón en lugar de tener que calcular las coordenadas y el tamaño. De cualquier manera, lo que hacen es usar también el método setBounds.

description

Tópicos avanzados de programación

Transcript of Programas a Revisar y Repaso de La Unidad 1

Programas para entregar en la unidad 1.

1. Programa de la CALCULADORA (debe de hacer los clculos (con eventos) ) 20%2. Programa del Chat 15% (con eventos opcional).3. Programa que calcule conversiones Fahrenheit y Celsius 15% (con eventos)4. Programa de reas de fig. geomtricas 15%(con eventos)5. Programas Checkbox y menus (sin eventos) 10%

Layout null Los componentes pueden colocarse exactamente donde el programador lo decida si en lugar de usar uno de los despliegues predeterminados aplica el despliegue nulo o Layout null (setLayout(null)) y define la posicin y dimensiones de cada componente con el mtodo setBounds(int left,int top,int width,int height) setBounds(130,149, 125, 20);

Este sistema tiene el inconveniente de que la presentacin no se ajusta automticamante cuando se cambian las dimensiones del contenedor o la ventana, pero en muchas ocasiones es til y adems cuando el programador quiere controlar todos los detalles no hay mejor opcin.Se le pasa como argumento, donde 130, 149 son respectivamente las coordenadas x,y dentro del formulario y 125 es el ancho y 20 la altura del control JLabel.En realidad lo nico que hacen es utilizar el null Layout y permitir al programador colocar los componentes con el ratn en lugar de tener que calcular las coordenadas y el tamao. De cualquier manera, lo que hacen es usar tambin el mtodo setBounds.Este sistema puede ser muy til cuando lo que se disea es una interfaz para una aplicacin que aparecer en pantalla con un tamao fijo. Sin embargo, si se quiere que la apariencia de la intefaz se ajuste a diferentes tamao del contenedor, es ms conveniente utilizar los otros despliegues de Java. GridLayout El ms sencillo de los despiegues (aparte de null) es GridLayout. Tiene dos constructores. El ms simple es: GridLayout(int filas,int columnas) Cuando a un Panel (o cualquier otro contenedor) se le aplica este despliegue mediante setLayout(new GridLayout(filas,columnas)habr que agregarle filas*columnas componentes y stos se van acomodando de izquierda a derecha y de arriba a abajo (ver preImposible.java al final de la seccin). El resultado son filas*columnas componentes del mismo tamao que se ajusta a que quepan exactamente en el lugar que se les ha asignado. Esto se logra sin que el programador tenga que hacer clculos o acomodar manualmente cada componente. En muchas aplicaciones se utiliza GridLayout con una sola fila o una sola columna (ver las lneas superior e inferiro de preDibuja.java al final de la unidad). GridLayout tiene otro constructor que permite definir la separacin (en pixels) ente los componentes, misma que es cero con el primer constructor. As, por ejemplo new GridLayout(3,4,2,2) crea un desplieque de 3 filas y 4 columnas donde los componentes quedan a dos pixels de separacin, como muestra este ejemplo: BorderLayout BorderLayout crea cinco espacios donde acomodar componentes o paneles. La localizacin de estos espacios queda descrita por cadenas con los nombres de "Center" y los cuatro puntos cardinales: "North", "South", "East" y "West". Por ejemplo la construccin de la izquierda crea el despliegue de la derecha: setLayout(new BorderLayout()); add("North",new TextField("Norte")); add("South",new TextField("Sur")); add("East",new Button("Este")); add("West",new Button("Oeste")); Label lbl=new Label("Centro"); lbl.setAlignment(Label.CENTER); add("Center",lbl); ,

BorderLayout tiene otro constructor BorderLayout(int seph,int sepv) con el que se pueden definir las separaciones vertical y horizontal entre los componentes que aparecern en las cinco zonas. BorderLayout es muy til como despliegue inicial de un programa. En sus cinco regiones pueden luego colocarse contenedores con otros despliegues, por ejemplo se puede poner al norte o al sur un contenedor con un despliegue de tipo GridLayout, como se hace abajo en los ejemplosFlowLayout Los dos despliegues anteriores (GridLayout y BorderLayout) controlan el tamao de los componentes adecundolo al espacio que se les haya asignado. En cambio FlowLayout "respeta" el tamao de los componentes y trata de acomodarlos uno tras otro dejando cierto espacio entre uno y el siguiente. Por supuesto en este caso a veces los componentes no caben en el espacio que se les ha asignado y puede ocurrir que algunos no se deplieguen. El ejemplo siguiente acomoda varios componentes en un applet con un despliegue de tipo FlowLayout. setLayout(new FlowLayout()); add(new TextField("texto")); add(new TextField("...",8)); add(new Button("botn")); add(new Label("etiqueta")); add(new Checkbox("interruptor")); Choice ch=new Choice(); ch.add("uno"); ch.add("dos"); ch.add("tres"); add(ch); add(new TextArea(5,10)); CheckboxGroup g=new CheckboxGroup(); add(new Checkbox("si",g,true)); add(new Checkbox("no",g,false)); add(new Checkbox("tal vez",g,false)); List l=new List(4,true); l.add("one"); l.add("two"); l.add("three"); l.add("four"); l.add("five"); l.add("six"); add(l); ,

FlowLayout es el despliegue que todo panel tiene por defecto. Hay otros dos constructores aparte del que se utiliza en el ejemplo. FlowLayout(int align) que permite elegir si los componentes se acomodan alineados a la izquierda, centrados o alineados a la derecha, segn se pase como parmetro una de las constantes: FlowLayout.LEFT, FlowLayout.CENTER o FlowLayout.RIGHT respectivamente. Otro constructor:FlowLayout(int align,int seph,int sepv) permite adems elegir la separacin entre los componentes. El valor por defecto de seph y sepv es de 5 pixels. El tamao de cada componente dentro de un despliegue de tipo FlowLayout depende del tipo de letra que se le haya asignado o tenga por defecto. Los tamaos se ajustan para que las cadenas que en ellos aparecen queden bien presentadas. Los campos y cuadros de texto tienen constructores con los que se puede definir su ancho (en el caso de los campos de texto) y su alto y ancho (en el caso de los cuadros o reas de texto). Las unidades para medir esto son "filas" para el alto y "columnas" para el ancho. En la mayora de los intrpretes y navegadores el nmero de columnas se calcula utilizando la letra ms ancha de la fuente asignada al componente, pero en otros se usa un promedio, por lo cual el ancho de un campo de texto suele cambiar de un navegador a otro. Advertencia: Para agregar una pizarra (Canvas) a un contenedor con despliegue de tipo FlowLayout es necesario llamar al mtodo Canvas.setSize(int ancho,int alto) para determinar el tamao de la pizarra, de otra manera no aparece porque su tamao por defecto es 0x0. No conviene agregar barras de desplazamiento a un contenedor con despliegue FlowLayout porque no se puede controlar su aspecto. Se recomienda que para agregar barras de desplazamiento, se utilice BorderLayout agregando las barras horizontales al norte o al sur y las barras verticales al este o al oeste.CardLayout El CardLayout es un despliegue especial que poco tiene que ver con los otros que se presentan en esta unidad. Su objetivo es desplegar slo un componente o contenedor a la vez pero teniendo la posibilidad de desplegar otros en otras circunstancias. Puede pensarse que el CardLayout consta de tarjetas (cards) todas del mismo tamao (el tamao del contenedor) que estn unas detrs de otras y slo puede verse la que est al frente.

public class mi_Ventana extend s JFrame { JLabel etiqueta = new JLabel(); JTextField txtBase = new JTextField();

JPanel miPanel = mi_Ventana.getContentPane();mi_Panel.setLayout(null);mi_Panel().add(txtBase); o getContentPane().add(txtBase);getContentPane().add(txtBase);}

>Crear un nuevo proyecto agregndole un nuevo JFrame> establece el SetLayout NULL

>Control Propiedad-- Valor de la Propiedad--- nombre de variable del controlJLabel1 Text BASE:JLabel2 Text ALTURA:JLabel3 Text El rea del Tringulo es:JTextField1 Text (Vaco o limpiar) txtBaseJTextField2 Text (Vaco o limpiar) txtAlturaJTextField3 Text (Vaco o limpiar) txtAreaJButton1 Text CALCULAR btnCalcularJButton2 Text LIMPIAR btnLimpiarJButton3 Text CERRAR btnCerrar

>Luego En vista de diseo damos clic con el botn derecho a cada control y le >seleccionamos Change Variable Name, para cambiar el nombre de la variable>Redimensionar y colocar el JFrame con setbounds o en las siguientes propiedadessetLocation(100,100); setSize(200,100);

Realizar el programa para el clculo del rea de un circulo y un rectnguloprivate void btnCalcularActionPerformed(java.awt.event.ActionEvent evt){int base, altura;double area;base=Integer.parseInt(txtBase.getText());altura=Integer.parseInt(txtAltura.getText());area=base*altura/2;txtArea.setText(String.valueOf(area));}

private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt){txtBase.setText("");txtAltura.setText("");txtArea.setText("");txtBase.requestFocus();}En el botn CERRAR (btnCerrar) luego de darle doble click, escribimos el siguiente c digo:dispose();

http://docs.oracle.com/javase/tutorial/uiswing/http://foro.el-hacker.com/f41/netbeans-creacion-de-interfaces-graficas-139208/

Un explicacion algo sencilla de como crear intefaces graficas basicas y funcionales con netbeans =D

El Netbeans es un IDE (entorno de desarrollo) para trabajar con Java, es similar al Visual Studio usado para trabajar con Visual Basic.

Empezaremos con algo basico, creando una minicalculadora capaz de sumar numeros, en la cual se demuestra la interaccion entre botones y cajas de texto :P.

1. Creando el Proyecto

- En el menu File > New Project o en el Icono de Nuevo Proyecto (depende de si lo tienen en ingles o espaol xD )

- En el panel de Categorias selecionar Java, en el panel de proyecto seleccionar Aplicacion Java (Java Application) y luego en siguiente...

- En la caja de texto poner el nombre dle proyecto como "SumadeNumeros"

- Desmarcar la opcion de "carpata dedicada para librerias"

- Marcar la opcion de "Definir como proyecto principal", y desmarcar la opcion de "Crear la Clase Main"

- Luego de esto en finalizar y ya entraremos al IDE a desarrollar nuestra app

2. Creando la Interfaz

Para proceder con la construccion de nuestra interfaz debemos crear un contenedor en el cual pondremos todos los componentes graficos de la aplicacion (Algo asi como el FORM en VB), luego crearemos un componente JForm, el contenedor sera puesto en un nuevo paquete que aparecera en el listado de paquetes.

Creando el contenedor

- En la ventana de proyectos, clic derecho en SumadeNumeros, luego en Nuevo y seleccionan JForm

- Como nombre de clase poner "SumadeNuemrosUI" (el UI nos indica que es la parte grafica)- Como paquete poner "my.SumadeNumeros"- Finalizar

Con esto el IDE (NetBeans) crea un nuevo formulario (JForm) y una clase de Nombres "SumadeNumerosUI", dentro de la aplicacion SumadeNumeros y abre el formulario SumadeNumerosUI en modo diseo, luego el paquete my.SumadeNumeros reemplaza al paquete original.

Agregando Componentes

Ahora usaremos la "Paleta" (similar al cuadro de Herramientas en VB) en el cual se muestran los diferentes objetos graficos que podemos usar, los cuales para agregarlos al formularios solo basta con arrastrarlos sobre el mismo...

Empezaremos por usar un JFrame, luego tres JLabels, tres JTextFields y tres JButtons, y los acomodaremos de manera que tengamos un resultado como el siguiente:

Ahora seleccionamos el JPanel y en la pestaa propiedades vamos a seleccionar borde (...) y escogeremos un borde con titulo, en la propiedad de texto pondremos el titulo del Panel como "Suma De Numeros"

Ahora renombraremos los demas componentes, doble clic en jLabel1 y en la propiedad de texto pondremos "Numero 1" y haremos lo mismo para los otros dos jLabels poniendo "Numero 2" y "Resultado". Despues de esto cambiaremos los atributos de texto pero para los jtextFields dejandolos vacios, y cambiaremos los atributos de texto de los tres botones (jButtons) colocando "Sumar", "Limpiar" y "Salir" respectivamente.

Con esto se finalizaria la parte visual, dando un resultado similar a este:

Ahora nos toca agregar la parte de codigo.........

3. Agregando Funcionalidad

Bien, ahora tenemos que agregar funcionalidad a los botones y demas objetos en el formulario, que junto con el codigo formaran una calculadora simple. Para poder agregarle funcionlidad tenemos que manejar el proceso en base a eventos que pasen en nuestra app, tales como el clic en un boton, o la entrada de usuario...etc.

Empecemos con el Boton de Salir, daremos clic derecho sobre el boton y en el menu emergente buscaremos "Eventos --> Accion --> accionRealizada (actionPerformed) "

Con esto el IDE automaticamente agregare el "Handler" que controlara los eventos....que se recibiran mediante un "ActionListener"

Ahora se nos abrira el editor decodigo donde debemos poner lo que queremos que haga el control, en este caso el boton de salida de la plicacion...por lo tanto el codigo seria...Cdigo: private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); } Y con esto el boton de Salir queda funcional, ahora regresaremos a la parte de diseo y realizaremos el mismo proceso para darle funcionalidad a los otros dos botones.

Boton Limpiar:Cdigo: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { jTextField1.setText(""); jTextField2.setText(""); jTextField3.setText(""); } Boton Sumar:Cdigo: private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // Definimos variables de coma flotante (float). float num1, num2, result; // Transformamos (parse)lo introducido a float. num1 = Float.parseFloat(jTextField1.getText()); num2 = Float.parseFloat(jTextField2.getText()); // Reaalizamos la suma. result = num1+num2; // Mostramos el resultado en jTextField3. // Pero transformandolo de nuevo a un String jTextField3.setText(String.valueOf(result)); } Con esto el programa esta completo y listo para ponerlo a funcionar... !

4. Corriendo la Aplicacion

En el menu, buscaremos la opcion de "Compilar" (Build) el proyecto, una vez que esto a finalizado procedemos a Ejecutarlo (Run), con lo que visualizaremos en pantalla a nuestra aplicacion corriendo......si por alguna razon sale un error de que el proyecto no tiene una Clase Main, deberan seleccionar my.SumadeNumeros.SumadeNumerosUI como la clase principal y aceptar para que pueda ejecutarse.

Lo Anterior mostrado es para responder a un simple evento mostrado en un Boton, para otros eventos disponibles se puede consultar la ayuda del NetBeans.

Al final, el codigo escrito por nosotros, mas el codigo que automaticamente es agregado por NetBeans y que es el encargado de crear las variables principales y de inicializar el Form debe ser algo parecido a esto...Cdigo:/* * SumaDeNumerosUI.java * Created on 06/03/2009, 12:37:47 */

package sumadenumeros;

/** * @author SmartGenius * From: CodeMakers */public class SumaDeNumerosUI extends javax.swing.JFrame {

public SumaDeNumerosUI() { initComponents(); }

@SuppressWarnings("unchecked")

private void initComponents() {

jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jTextField2 = new javax.swing.JTextField(); jTextField3 = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Suma de Numeros"));

jLabel1.setText("Numero 1");

jLabel2.setText("Numero 2");

jLabel3.setText("Resultado");

jButton1.setText("Limpiar"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } });

jButton2.setText("Sumar"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } });

jButton3.setText("Salir"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } });

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2) .addComponent(jLabel3) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jTextField1, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTextField2, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTextField3, javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE))) .addComponent(jLabel1)) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton2) .addComponent(jButton1) .addComponent(jButton3)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) );

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) );

pack(); }

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); }

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { jTextField1.setText(""); jTextField2.setText(""); jTextField3.setText(""); }

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { float num1, num2, result; num1 = Float.parseFloat(jTextField1.getText()); num2 = Float.parseFloat(jTextField2.getText()); result = num1+num2; jTextField3.setText(String.valueOf(result)); }

public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new SumaDeNumerosUI().setVisible(true); } }); }

private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JPanel jPanel1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; private javax.swing.JTextField jTextField3;

} Y eso es todo...tenemos nuestra app andando =D

Saludos ! =)