You are on page 1of 45

PROGRAMACION II

Ing. Irma Prado

AWT y SWING
Awt y Swing forman parte de una coleccin de clases llamadas JFC(Java Foundation
Clases), incluyen paquetes dedicados a la programacin de interfaces grficas y
multimedia.

AWT
Awt (Abstract Windows Tools) fue la primera solucin propuesta por java y esta
formada por varias clases que no dependen del sistema operativo y propone una serie
de clases para la programacin GUIs (graphic users intefaces). Un GUIs comprende
contenedor y componentes.

Es la biblioteca de clases original proporcionada por Java para interfaces de usuario,


se encuentra en el paquete java.awt. Vea clases y mtodos en
http://docs.oracle.com/javase/1.5.0/docs/api/

Ejemplo 1: Crear una ventana (contenedor)con el ttulo Ejemplo Ventanita. Note


que esta ventanita no se cierra.

import java.awt.*;

public class Ejemplo1 {


public static void main( String args[] ) {
Frame f = new Frame( "Ejemplo ventanita" );
f.show(); //muestra la ventana
f.pack();//activa a ventana para cambiar el tamano
f.resize(400,200); //nuevas dimensiones de la ventana
}
}
Al ejecutar el ejemplo1 genera una ventana, debe hacer clic en el botn stop de
Ready to Program para concluir la ejecucin.

Ejemplo 2. Crear dos ventanas

import java.awt.*;
//dos ventanas
public class Ejemplo2 {
public static void main( String args[] ) {
Frame f = new Frame( "Ejemplo ventanita 1" );
Frame k = new Frame("Ejemplo ventanita 2");
f.show(); //muestra la ventana
f.pack();//activa a ventana para cambiar el tamano

1
PROGRAMACION II
Ing. Irma Prado

f.resize(400,200); //nuevas dimensiones de la ventana


k.pack();
k.resize(100,300);
k.show();
}
}

Son dos ventanas, dos objetos y ninguna se cierra.

Ejemplo 3. Crear dos ventanas. Esta vez la segunda ventana cerrar la aplicacin,
por lo que debemos programar este evento.

import java.awt.*;
import java.awt.event.*;
//dos ventanas
public class Ejemplo3 {
public static void main( String args[] ) {
Frame f = new Frame( "Ejemplo ventanita 1" );
Frame k = new Frame("Ejemplo ventanita 2");
f.show(); //muestra la ventana
f.pack();//activa a ventana para cambiar el tamano
f.resize(400,200); //nuevas dimensiones de la ventana
k.pack();
k.resize(300,300);
k.show();
//--------------------------------------------
//cerrar ventana k y salir del programa
k.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent evt ) {
System.exit( 0 );}} );
//---------------------------------------------
}}

2
PROGRAMACION II
Ing. Irma Prado

Ejemplo 4. El siguiente programa muestra un Frame con el logo de la Universidad. No


se olvide que debe tener la imagen ucb.gif en el lugar donde almacene el
archivo.java. (Ejecutar en REady to program)

import java.lang.*;
import java.awt.*;
import java.awt.Image; //para la imagen
import java.awt.event.*;

public class prog1 {

static Frame ventana= new Frame(); //nuestra ventana se llama ventana

public static void main(String[] args)

{
// area de definicion de propiedades de el objeto
Image icono = Toolkit.getDefaultToolkit().getImage("logop.jpg");
//cargamos la imagen
ventana.setIconImage(icono);
//ubcamos la imagen en la ventana(el logo de la U)

ventana.setTitle("Ejemplo de ventana con 'icono");


//agregamos el titulo de la ventana

ventana.setBackground(java.awt.Color.green);//el fondo de la ventana verde

ventana.setSize(400,100);// dimensiones de la ventana


ventana.setVisible(true);//mostramos la ventana
// se agrega un escuchador para que cierre la ventana con la X de arriba
ventana.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);} });
}; // termina main
} // termina clase

Genera la siguiente ventana

En el siguiente ejemplo vamos a utilizar el mtodo paint. Este mtodo se invoca


automticamente por el sistema cuando la ventana primer plano, mostrando
imgenes, texto, etc en la ventana. El mtodo paint(Graphics g) no se puede invocar
directamente.

Ejemplo 5. Nuevamente una ventana ahora con imagen. (Ejecutar en REady to


program)

3
PROGRAMACION II
Ing. Irma Prado

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.*; //para el Buffered

class amigo extends Frame {

Image fotografia;

public amigo() //constructor

this.setTitle( "Mi amigo" );

this.setSize( 315,169); //tamanio de la ventana

fotografia=Toolkit.getDefaultToolkit().getImage("logop.jpg");

this.setVisible(true); //muestra la ventana

this.addWindowListener(

// para controlar el cierre de la ventana

new WindowAdapter(){

public void windowClosing( WindowEvent evt){

System.exit(0);

}); //lleva ; porque es considerado una sentencia

//todo eso para cerrar el applet haciendo clic en X de la ventana y que no se cuelque el
programa

} //fin del constructor

//---- programa principal

public static void main(String[] args)throws IOException {

new amigo(); //creamos un objeto y se ejecuta el constructor

4
PROGRAMACION II
Ing. Irma Prado

//---fin del prog. Principal

//---- paint que se autoejecuta

public void paint(Graphics g){

int x2=100, x1=50; //coordenadas de la pantalla

g.translate(this.getInsets().left,this.getInsets().top);

//traslada el origen de la ventana

g.drawImage(fotografia,x2,x1,this); //ubica la imagen en la ventan

Ejemplo 6. En base al ejemplo anterior, pero ahora paint() dibuja figuras geomtricas

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.*; //para el Buffered

class amigo2 extends Frame {

public amigo2() //constructor

this.setTitle( "Graficos" );

5
PROGRAMACION II
Ing. Irma Prado

this.setSize( 515,269); //tamanio de la ventana

this.setVisible(true); //muestra la ventana

this.addWindowListener(

// para controlar el cierre de la ventana

new WindowAdapter(){

public void windowClosing( WindowEvent evt){

System.exit(0);

}); //lleva ; porque es considerado una sentencia

//todo eso para cerrar el applet haciendo clic en X de la ventana y que no se cuelque el
programa

} //fin del constructor

//---- programa principal

public static void main(String[] args)throws IOException {

new amigo2(); //creamos un objeto y se ejecuta el constructor

//---fin del prog. principal

public void paint(Graphics g){

g.setColor(java.awt.Color.red); //activa el color rojo

g.drawRect(55,55,50,50); //dibuja el rectangulo

g.fillRect(100,65,100,50);

//dibuja rectangulo pintado de rojo

g.setColor(java.awt.Color.blue);//cambiamos el color

g.drawOval(110,80,70,90);//dibuja un ovalo azul

g.setColor(java.awt.Color.yellow);

g.fillOval(200,80,70,90);

g.setColor(java.awt.Color.black);

g.drawLine(25,200,250,300);

6
PROGRAMACION II
Ing. Irma Prado

Ejemplo 7. Tipos de letra en un Frame

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.awt.Font; //para las letras

import java.io.*; //para el Buffered

class otro extends Frame {

// Image fotografia;

public otro() //constructor

this.setTitle( "Tipos de letras" );

this.setSize( 600,250); //tamanio de la ventana

this.setVisible(true); //muestra la ventana

this.addWindowListener(

// para controlar el cierre de la ventana

new WindowAdapter(){

public void windowClosing( WindowEvent evt){

7
PROGRAMACION II
Ing. Irma Prado

System.exit(0);

}); //lleva ; porque es considerado una sentencia

//todo eso para cerrar el applet haciendo clic en X de la ventana y que no se


cuelque el programa

} //fin del constructor

//---- programa principal

public static void main(String[] args)throws IOException {

new otro(); //creamos un objeto y se ejecuta el constructor

//---fin del prog. principal

public void paint(Graphics g)

{ //escribe texto en columna,fila

g.drawString(" Ttipo de letra por defecto",150,225);

//la siguiente lnea declara un tipo de letra

Font letrita=new Font("TimesRoman",Font.BOLD,24);

//activa el tipo de letra

g.setFont(letrita);

//escribe texto con la letra activa

g.drawString("letras en time roman tamanio 24",200,140);

//repetimos el proceso para otro tipo de letra

letrita=new Font("Courier",Font.ITALIC,14);

g.setFont(letrita);

g.drawString("letras en courier tamanio 14",105,75);

//otro ejemplo pero esta vez en rojo

letrita=new Font("Helvetica",Font.PLAIN,14);

g.setFont(letrita);

g.setColor(java.awt.Color.red);

8
PROGRAMACION II
Ing. Irma Prado

g.drawString("letra tipo Helvetica color rojo y tamao 34",205,175);

//cambiamos el color

g.setColor(java.awt.Color.green);

g.drawString("Mismo tipo de letra de color verde",5,95);

Ejemplo 9. Utilizando un arreglo de imgenes vamos a mostrar todas las fotografas


de los estudiantes

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*; //para el Buffered

class amigos extends Frame {


Image fotografia;
//vector de imagenes donde se almacenaran las fotografias
Image [] fotos=new Image[26];
//un vector de imagenes
int n=25; //total de alumnos
//datos es un vector donde se almacenaran los nombres de los archivos.gif
String []datos= new String[26];
public amigos() { //constructor
this.setTitle( "Alumnos de Programacion II" );
this.setSize( 515,269); //tamanio de la ventana

9
PROGRAMACION II
Ing. Irma Prado

for(int i=1; i<n; i++){


//cargamos los nombres de los archivos gifs
datos[i]="f"+i+".jpg";//todas las fotos tienen el nombre f
//ahora cargamos las imagenes
fotografia=Toolkit.getDefaultToolkit().getImage(datos[i]);
//cargamos la imagen del disco, el tamanio es 35x35
fotos[i]=fotografia.getScaledInstance(35,35,Image.SCALE_DEFAULT);
//las fotitos son 35x35
}
// desde aqui
this.setVisible(true); //muestra la ventana
this.addWindowListener(
// para controlar el cierre de la ventana
new WindowAdapter(){
public void windowClosing( WindowEvent evt){
System.exit(0);
}
});
//todo eso para cerrar el applet haciendo clic en X de la ventana y que no se
cuelque el programa
}
public static void main(String[] args)throws IOException {
new amigas();
}
public void paint(Graphics g){
int x2=5, x1=5; //coordenadas de la pantalla
g.translate(this.getInsets().left,this.getInsets().top);
//traslada el origen de la ventana
MediaTracker tr= new MediaTracker(this);
for(int i=1;i<n;i++){
tr.addImage(fotos[i], 1);
}
try {
tr.waitForAll();
} catch (InterruptedException e){
System.out.println(e);
}
if ( !tr.isErrorAny()){
for(int i=1;i<n;i++){
g.drawImage(fotos[i],x2,x1,this);
x2=x2+55;
//posicion de la siguiente foto
if (x2>400){ x2=0; x1=x1+55;}
//x1 controla la siguiente fila de las fotos
}
}
else

10
PROGRAMACION II
Ing. Irma Prado

{ System.out.println("Error al cargar las imagenes");


System.exit(1);
}
} }

Ejemplo 9.- Volvemos al ejemplo de Frame con botones

import java.awt.*;
import java.awt.event.*;

//super ejemplito con botones


public class botones_v extends Frame
{
java.awt.Label etiqueta1 = new java.awt.Label();
//PARA EL TITULO DE LA VENTANA
java.awt.Button boton1 = new java.awt.Button();//PRIMER BOTON
java.awt.Button boton2 = new java.awt.Button();//SEGUNDO BOTON
java.awt.Label texto = new java.awt.Label(); //PARA DESPLEGAR
HOLA O CHAU
public botones_v() //constructor
{
//TITULO DE LA VENTANA
this.setTitle( "Ejemplos de Botones y eventos" );
//titulo de la ventna
this.setSize( 400,250); //tamanio de la ventana
//titulo dentro de la ventana
etiqueta1.setText("Saludo y despedida");
//titulo de la aplicacion
etiqueta1.setAlignment(java.awt.Label.CENTER);
// ubicamos al centro
etiqueta1.setFont(new Font("Dialog", Font.PLAIN, 20));
etiqueta1.setBounds(50,28,356,38);
//posicion Y TAMANIO DEL LA ETIQUETA x,y,ancho,altura
this.add(etiqueta1);
//Ubicamos la etiqueta en la ventana

// primer boton

11
PROGRAMACION II
Ing. Irma Prado
boton1.setLabel("Saludo");
boton1.setBackground(java.awt.Color.blue);
boton1.setBounds(42,78,124,33);
//columna,fila,alto y ancho
this.add(boton1); //ubicamos el boton1 en la ventana

//segundo boton
boton2.setLabel("Despedida");
boton2.setBackground(java.awt.Color.red);
boton2.setBounds(200,78,124,33);
this.add(boton2); //ubicamos el boton2 en la ventana

//salida
texto.setText(" ");
texto.setAlignment(java.awt.Label.LEFT);
// ubicamos al izq
texto.setFont(new Font("BOLD", 40, 30));
//negrita, tipo de letra,tamano
texto.setBounds(42,344,100,136);
this.add(texto); //ubicamos el texto en la ventana
this.show();//mostramos la ventana
this.addWindowListener(

// para controlar el cierre de la ventana


new WindowAdapter(){
public void windowClosing( WindowEvent
evt){
System.exit(0);
}
});
//lleva ; porque es considerado una sentencia

}
public static void main(String []arg)
{
new botones_v();
}
public boolean action(Event e,Object o)
//active los eventos de los botones
{
if (e.target==boton1){
//en e.target se encuentra el boton que hiceron clic,
metodoBoton1();
repaint();} //se ejecuta otra vez paint,

if (e.target==boton2){
//en e.target se encuentra el boton que hiceron clic en el boton2
metodoBoton2();
repaint();} //se ejecuta otra vez paint
return false;
//si no hicieron clic en el boton no hara nada
}//fin de action

12
PROGRAMACION II
Ing. Irma Prado
void metodoBoton1()//function boton1
{
texto.setText(" HOLA ");
}
void metodoBoton2()//function boton2
{
texto.setText(" ADIOS ");
}
}

El siguiente ejemplo utiliza entrada de datos por la ventana, un


botn y ejecuta una funcin.

Ejemplo 10. Sumar dos nmeros, utilizando Frame, entrada de dos


datos desde la ventana y un botn para ejecutar (Ejecutar en
Ready to Program):

import java.awt.*;
import java.awt.Component;
import java.awt.event.*;

//super ejemplito para sumar dos numeros


public class bbb extends Frame
{
java.awt.Label etiqueta1 = new java.awt.Label();
java.awt.Button boton = new java.awt.Button();
java.awt.TextField texto = new
java.awt.TextField("0");//ingresa un dato
java.awt.TextField texto1 = new java.awt.TextField("0");//para
que ingrese otro dato
//iniciamos en cero para evitar error que el usuario deje
vacio
int suma=0, a,b;
public bbb() //constructor
{
this.setTitle( "Suma de dos numeros" );//titulo de la
ventna

13
PROGRAMACION II
Ing. Irma Prado
this.setSize( 515,269); //tamanio de la ventana

//titulo dentro de la ventana


etiqueta1.setText("Ingrese los numeros");
etiqueta1.setAlignment(java.awt.Label.RIGHT);
etiqueta1.setFont(new Font("Dialog", Font.PLAIN, 20));
etiqueta1.setBounds(50,28,256,38);//columna,fila,alto
y ancho
this.add(etiqueta1);
//ahora el boton
boton.setLabel("Sumar...");
this.add(boton);
//ahora el string para recibir el primer dato
this.add(texto);
this.add(texto1);
boton.setBackground(java.awt.Color.pink);
boton.setBounds(142,144,110,33);//columna,fila,alto y
ancho
this.show();
//damos el tamano a la entrada de datos
texto.setBounds(100,78,100,36); //columna,fila,alto y
ancho
texto1.setBounds(250,78,100,36);
this.addWindowListener(
// para controlar el cierre de la ventana con X de windows
new WindowAdapter(){
public void windowClosing( WindowEvent
evt){
System.exit(0);
}
}); //lleva ; porque es considerado
una sentencia

}
public static void main(String []arg)
{
new bbb();
}
public boolean action(Event e,Object o)
{
if (e.target==boton){ //en e.target se encuentra el boton
que hiceron clic
a= Integer.parseInt( texto.getText() ); //convertimos a
numero el dato ingresado
b= Integer.parseInt( texto1.getText() ); //convertimos a
numero el dato ingresado
repaint();} //se ejecuta otra vez Saint, pero ahora con el
dato ingresado
return false; //si no hicieron clic en el boton no hara
nada
}
public void paint(Graphics g)
{ int x=30; int r;

14
PROGRAMACION II
Ing. Irma Prado
int y=200;
String resultado;
suma=a+b;
g.setColor(Color.blue); //texto azul
g.drawString("La suma es "+a+"+"+b+"="+suma,x,y);
}
}

Ejemplo 11.- Tabla de un nmero (Ejecutar en Ready to Program)

import java.awt.*;
import java.awt.Component;
import java.awt.event.*;

//super ejemplito con botones


public class aaa extends Frame
{
java.awt.Label etiqueta1 = new java.awt.Label();
java.awt.Button boton = new java.awt.Button();
java.awt.TextField texto = new
java.awt.TextField("0");//para la entrada de datos
//iniciamos en cero para evitar error que el usuario
deje vacio
int num=0;
public aaa() //constructor
{
this.setTitle( "Tabla de
multiplicacion" );//titulo de la ventna
this.setSize(426,366); //tamanio de la ventana

//titulo dentro de la ventana


etiqueta1.setText("Tabla de un numero");
etiqueta1.setAlignment(java.awt.Label.RIGHT);

15
PROGRAMACION II
Ing. Irma Prado

etiqueta1.setFont(new Font("Dialog",
Font.PLAIN, 20));

etiqueta1.setBounds(50,28,256,38);//columna,fila,alto y ancho
this.add(etiqueta1);

//ahora el boton
boton.setLabel("ejecutar");
this.add(boton);

//ahora el string para recibir el dato


this.add(texto);
//ubicamos en la ventana la casilla para el
dato de entrada
boton.setBackground(java.awt.Color.blue);
boton.setBounds(142,144,110,33);//columna,
fila, alto y ancho
this.show();
texto.setBounds(142,78,100,36);
//columna,fila,alto y ancho
this.addWindowListener(
// para controlar el cierre de la ventana con X de
windows
new WindowAdapter(){
public void
windowClosing( WindowEvent evt){
System.exit(0);
}
}); //lleva ; porque es
considerado una sentencia

}
public static void main(String []arg)
{
new aaa();
}
public boolean action(Event e,Object o)
{
if (e.target==boton){ //en e.target se encuentra el
boton que hiceron clic
num = Integer.parseInt( texto.getText() );
//convertimos a numero el dato //ingresado
repaint();} //se ejecuta otra vez paint, pero ahora
con el dato ingresado
return false; //si no hicieron clic en el boton no
hara nada
}

public void paint(Graphics g)

16
PROGRAMACION II
Ing. Irma Prado

{ int x=30; int r;


int y=200;
String resultado;
g.setColor(Color.blue); //texto azul
g.drawString("tabla de "+num,x,y);
g.setColor(Color.black); //texto negro
for(int i=1;i<=10;i++)
{
y=y+15;
r=i*num;
resultado=i+" * "+num+" = "+r; //hacemos esto
porque drawString solo
// despliega texto
g.drawString(resultado,x,y);
}
}
}

17
PROGRAMACION II
Ing. Irma Prado

Swing
Es un conjunto de clases desarrolladas para mejorar al paquete AWT, es una
extensin de AWT y se implementa a partir de Java 1.2, llamado Java2, este paquete
soporta mucho ms clases y construye mejor las apariencias del programa. AWT no
desaparece, simplemente Swing le aade nuevas capacidades y Swing utiliza clases
de Awt, como por ejemplo las relacionadas con eventos. Para mayor informacin
visite http://docs.oracle.com/javase/1.5.0/docs/api/

Es necesario importar el paquete:

import javax.swing.*;

Los elementos fundamentales de Swing son:

Contenedores. Son los elementos que pueden contener otros elementos


(contenedores o componentes),tambin permiten la deteccin algunos
eventos, pero no permiten introducir datos. Todos los contenedores se
heredan de la clase JContainer
Componentes. Los componentes son elementos que se presentan por
pantalla, por ejemplo Botones, ComboBox, Tablas,etc. Tienen por objetivo
interactuar con el usuario todos se heredan de la clase JComponent.

Ejemplos de componenetes de swning

En otras palabras, componentes son los elementos bsicos de la programacin con


swing, todo lo que se ve en un GUI (graphic users interfaces) de java es un
componente. Los componentes se colocan en otros elementos llamados
contenedores que sirven para agrupar componentes.

18
PROGRAMACION II
Ing. Irma Prado

La clase javax.swing.JComponent es la clase padre de todos los componentes y son


descendientes de java.awt.container.

Ejemplo 1.- Creamos una ventana, creando una subclase de la clase JFrame, para
poder utilizar todos sus atributos y aplicaciones.

import javax.swing.*;
class Ventana1 extends JFrame // heredamos
{
Ventana1() //creamos un constructor
{ super("Aqui el titulo de la ventana"); //asignamos el titulo de la ventana
}
public static void main(String []args)
{ Ventana1 a=new Ventana1();
//a es objeto de la clase ventana. Hemos creamos el objeto
a.setLocation(150,250); //coordenadas donde debe salir la ventana emergente
a.pack(); //ajusta la ventana
a.show();//muestra la ventana
}
}
Genera la siguiente ventana

Ejemplo 2.- En este ejemplo agregamos un botn (es un objeto de la clase JButton),
que de momento no hace nada y cambiamos el tamao de la ventana.

import javax.swing.*;
class Ventana2 extends JFrame
{
JButton boton1= new JButton("boton 1");
//declaracin del objeto boton1 que lleva el texto "boton 1"
JPanel panel=new JPanel();//creamos un objeto panel
Ventana2()
{ super("ejemplo de ventana 2");
panel.add(boton1); //adicionamos el boton al panel
setContentPane(panel); //convertimos al panel de contenidos
}
public static void main(String []args)
{
JFrame x=new Ventana2();
x.pack();
x.setSize(100,150); //cambia el tamanio de la ventana
x.show();
}
}

19
PROGRAMACION II
Ing. Irma Prado

Genera la siguiente ventana

Ejemplo 3. En este ejemplo cambiamos el tamao de la ventana, la posicin donde


debe salir la ventana y utilizamos otro mtodo para mostrar la ventana.

import javax.swing.*;
class Ventana3 extends JFrame
{
Ventana3() //creamos un constructor
{ super("Aqui el titulo de la ventana"); //asignamos el titulo de la ventana
}
public static void main(String []args)
{ Ventana3 a=new Ventana3();
//a es objeto de la clase ventana. Creamos el objeto
a.setLocation(150,250); //coordenadas donde debe salir la ventana emergente
a.setSize(300,100); //indicamos el tamao de la ventana
a.setVisible(true); //otra forma de mostrar la ventana
}
}

Genera la siguiente ventana:

Ejemplo 4. Ahora agregamos un botn con imagen

import javax.swing.*;
class Ventana4 extends JFrame
{ //z es un objeto de la case ImageIcon
ImageIcon z=new ImageIcon("logop.gif");
//cargamos la imagen en la variable z
JButton boton1= new JButton(z); //ahora el botn lleva la imagen
JPanel panel=new JPanel();//creamos un objeto panel

20
PROGRAMACION II
Ing. Irma Prado

Ventana4()
{ super("ejemplo de ventana con boton de imagen");
panel.add(boton1); //adicionamos el boton al panel
setContentPane(panel); //convertimos al panel de cotenidos
}

public static void main(String []args)


{
JFrame x=new Ventana4();
x.pack();
x.show();
}
}

Genera la siguiente ventana:

Ejemplo 5.- Agregamos texto en el botn.

import javax.swing.*;
class Ventana5 extends JFrame
{ //z es un objeto de la case ImageIcon
ImageIcon z=new ImageIcon("logop.gif");
String s="Salir";
//cargamos la imagen en la variable z
JButton boton1= new JButton(s,z);
//declaracin del objeto boton1 con el texto salir
JPanel panel=new JPanel();//creamos un objeto panel
Ventana5()
{ super("ejemplo de ventana con boton de imagen");
panel.add(boton1); //adicionamos el boton al panel
setContentPane(panel); //convertimos al panel de cotenidos
}
public static void main(String []args)
{
JFrame x=new Ventana5();
x.pack();
x.show();
}
}

21
PROGRAMACION II
Ing. Irma Prado

Genera la siguiente ventana:

Ventanas:

Clase JFrame: define ventana con ttulo y marco.

Ejemplo

import javax.swing.JFrame;
public class ventanita0 {
public static void main(String[] ar) {
JFrame f=new JFrame();
f.setBounds(10,10,300,200);
f.setVisible(true);
}
}

Algunos mtodos, que vamos a utilizar de esta clase son;

void setLocation(int x, int y) Posiciona la ventana en la pantalla.


(x, y) son las coordenadas de su vrtice
superior izquierdo
void setSize(int ancho, int alto) Cambia el tamao de la ventana
void setVisible(boolean b) Hace la ventana visible o la oculta
(cuando b es false)
void pack() Reduce la ventana alrededor de sus
componentes
void setDefaultCloseOperation Accin al cerrar la ventana
(int accin); (JFrame.EXIT_ON_CLOSE)

Ejemplo.

22
PROGRAMACION II
Ing. Irma Prado

import javax.swing.*;
public class VentanaHola extends JFrame {
public VentanaHola() { //constructor
super("Hola Amigos");
setLocation(50,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(250, 200);
setVisible(true);
}
public static void main(String[] args) {
new VentanaHola(); //sin objeto
}
}

Cada ventana tiene asociado un panel de contenidos o content pane y sobre l se


dibujan los componentes y los grficos:

Algunos mtodos:

Container getContentPane() Permite obtener el content pane

void setContentPane(Container Cambia el content pane


contentPane)

Para dibujar grficos en un panel, los dibujos se realizan en un contexto grfico,


representando por un objeto de la clase Graphics y los paneles tienen un contexto

23
PROGRAMACION II
Ing. Irma Prado

grfico asociado. Las posiciones se las representa en el siguiente sistema de


coordenadas:

Mtodos de la clase grafics:


void drawString(String str, Escribe el string str en la posicin x,y, de
int x, int y) acuerdo al sistema de coordenadas
anteriormente descrito.
void drawLine(int x1, int y1, Traza una lnea desde el punto x1,y1
int x2, int y2) hasta el punto x2,y2

void drawRect(int x, int y, Traza un rectngulo que inicia en el


int ancho, punto x1,y1, con un ancho y alto
int alto)

void fillRect(int x, int y, Traza un rectngulo pintado o lleno


int ancho,
int alto)

void drawRoundRect(int x, int y, Dibuja un rectngulo con esquinas


int ancho, redondeadas
int alto,
int anchoArco,
int altoArco)

24
PROGRAMACION II
Ing. Irma Prado

void fillRoundRect(int x, int y, Dibuja un rectngulo con esquinas


int ancho, redondeadas, pero pintado o lleno
int alto,
int anchoArco,
int altoArco)

void drawOval(int x, int y, Dibuja una elipse


int ancho,
int alto)

void setColor(Color c); Asigna un color que saldr en la sgte


imagen
Color getColor(); Obtiene el color vigente
public Color(int r, int g, int b) Podemos crear nuestros propios colores.
r, g, b cada una debe estar entre 0 y 255

Ejemplo . Aplicacin con todos los componentes:

import java.awt.Graphics;
import java.awt.Color;
import javax.swing.*;
class DibujaEnVentana extends JFrame{
public static void main(String[] args) {
new DibujaEnVentana("Dibujos");
}
public DibujaEnVentana(String ttulo) {
super(ttulo);
setContentPane(new PanelDibujos());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setVisible(true);
}
public class PanelDibujos extends JPanel {

25
PROGRAMACION II
Ing. Irma Prado

public void paintComponent(Graphics g) {


super.paintComponent(g);
g.setColor(Color.blue);
g.drawRect(60, 60, 80, 90);
g.setColor(Color.yellow);
g.drawRoundRect(210, 60, 90, 90, 20, 20);
g.setColor(Color.red);
g.drawString("Un texto", 30, 170);
g.setColor(new Color(0,255,0));
g.drawRect(100, 100, 120, 120);
g.setColor(new Color(255,255,0));
g.fillOval(200,200,50,50);
}
}
}

Si agregamos la lnea de cdigo en la funcin paintComponent:

setBackground(Color.white);

el color del panel a blanco y quedara as

26
PROGRAMACION II
Ing. Irma Prado

En el siguiente ejemplo
identifique
componentes y
contenedores:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
public class MuevePelota extends JFrame {
//------------------------------------------------
public static void main(String[] args) {
JFrame f = new MuevePelota();
// Llama a repaint cada 50ms
while (true) {
try {
Thread.sleep(50); // Espera 50ms
} catch (InterruptedException e) { }
f.repaint();
}
}
//------------------------------
public MuevePelota() {
super("Pelota");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //para cerrar la ventana
setContentPane(new PanelPelota());
setSize(450, 500);
setVisible(true);
}
//--------------seg clase-------------------
public class PanelPelota extends JPanel {
// coordenadas del centro de la pelota
private int xCentro = 0;
private int yCentro = 0;
// componentes de la velocidad
private int vx = 5; // (en pixels/periodo main)
private int vy = 5; // (en pixels/periodo main)
// radio de la pelota
private final int radio = 50;
//--------------------------------------
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// calcula nueva posicin del centro
xCentro=xCentro + vx; yCentro=yCentro + vy;

27
PROGRAMACION II
Ing. Irma Prado

// comprueba si choca contra los bordes


if ((vx>0 && xCentro + radio > getWidth()) || (vx<0 && xCentro - radio < 0))
vx = -vx;
if ((vy>0 && yCentro + radio > getHeight()) || (vy<0 && yCentro - radio < 0))
vy = -vy;
// pinta la pelota
g.setColor(Color.red);
g.fillOval(xCentro-radio, yCentro-radio,
radio*2, radio*2);
}
} // fin clase PanelPelota
} // fin clase MuevePelota

Paneles y Gestores de Distribucin

Swing define varios tipos de paneles contenedores: JPanel, JScrollPane, JSplitPane y


JTabbedPane.

Para aadir componentes a un panel se utilizan los mtodos:


Component add(Component comp)
Component add(Component comp, int index)

Para eliminar componentes existe el mtodo:


void remove(Component comp)

Por ejemplo, para aadir un botn a un JPanel, debemos aadir estas lneas en su
constructor:

Button b = new Button("Etiqueta botn");


add(b);

Los mtodos de paneles contenedores que utilizaremos son:


void setBackground(Color c) Cambia el color del panel contenedor, o
color de fondo
Color getBackground() Permite obtener el color de fondo del
panel
int getWidth() Retorna el ancho de un componente

28
PROGRAMACION II
Ing. Irma Prado

int getHeight() Retorna la altura de un componente


void setLayout(LayoutManager mgr) Permite definir la forma en que se
distribuirn los componente en el
contenedor
void setPreferredSize(Dimension Modifica el tamao del componente
preferredSize)

Aadir componentes a una ventana

Para aadir componentes a una ventana (JFrame) hay que aadirles a su content
pane. En el constructor de un JFrame podran aparecer las siguientes
lneas de cdigo:
Button b = new Button("botoncito");
getContentPane().add(b);

Por comodidad los mtodos add, remove y setLayout de un JFrame estn redefinidos
para que operen sobre su content pane, entonces escribir en el constructor de un
JFrame:
add(b);
es lo mismo que escribir:
getContentPane().add(b);

Gestores de distribucin

Permiten determinar la forma en que se distribuyen los componentes dentro de un


contenedor, los ms comunes son :

FlowLayout, GridLayout y BorderLayout (gestor de distribucin por omisin en


todos los paneles contenedores)
Con FlowLayout, los componentes se van colocando de izquierda a derecha,
completando la lnea y pasa a la sgte lnea, mantiene el tao de los componentes. Su
constructor es:
FlowLayout()

GridLayout, es una grilla de celdas iguales que se rellena de izquierda a derecha,


lnea a lnea. Cambia el tamao de los componentes. El nmero de filas y columnas

29
PROGRAMACION II
Ing. Irma Prado

se indica en el constructor, el otro parmetro se deja a 0, es calculado


automticamente por el gestor de distribucin. Su constructor:
GridLayout(int filas, int columnas)

BorderLayout. Coloca los componentes en los 4 puntos cardinales y en el centro. El


del centro se expande para ocupar el mayor rea posible. El resto ocupan el menor
espacio posible. El constructor :

BorderLayout()

El mtodo add tiene un parmetro adicional para indicar la zona.

30
PROGRAMACION II
Ing. Irma Prado

Interface grfica de usuario

Sabemos que SWING es un conjunto de clases presente a partir del Java2, para
mejorar el paquete AWT, Abstract Window Tools) que an se usa bastante en las
aplicaciones Java. Tanto Swing como AWT forman parte de una coleccin de
clases llamada JFC (Java Foundation Classes) que incluyen paquetes dedicados a
la programacin de interfaces grficos (as como a la produccin multimedia).
El modelo- vista controlador es fundamental en el trabajo con interfaces de
usuario por parte de Swing. Consiste en tres formas de abstraccin. Es decir, el
mismo objeto se ve de esas tres
Maneras:
Modelo. Se refiere al modelo de datos que utiliza el objeto. Es la
informacin que se manipula mediante el objeto Swing.
Vista. Es cmo se muestra el objeto en la pantalla.
Controlador. Es lo que define el comportamiento del objeto.

Los contenedores son un tipo de componentes pensados para almacenar y


manejar otros componentes.
En los siguientes ejemplos, vamos a utilizar clases y mtodos de swing que ya se
explicaron en la anterior gua de swing , pero como son cientos, para mayor
informacin consulte el libro La bilbia de Java 2, pdf que se le entreg en
clases.
El Netbeans, genera cdigo, y el programador arrasta y suelta en el lugar
adecuado los contenedores y componentes que necesite en la aplicacin para
luego describir sus propiedades de cada objeto, sus eventos y el cdigo
necesario. Realmente es poco el cdigo que usted escribir.
Es recomendable que siga paso a paso los ejemplos descritos aqu para que le
entienda mejor.

1) Programa para sumar dos nmeros.


Primero creamos un nuevo proyecto, luego indicamos qu tipo de aplicacin
estamos realizando.

31
PROGRAMACION II
Ing. Irma Prado

con el botn derecho:

32
PROGRAMACION II
Ing. Irma Prado

Click en finish y tenemos la primera pantalla donde trabajaremos, ahora


vamos agregar el contenedor Panel, arrastre y suelte en la ventana de
trabajo, luego ajuste el tamao arrastrando los borde s:

33
PROGRAMACION II
Ing. Irma Prado

Para poner un color de fondo en el panel, primero debe estar el panel activo, es
decir debe estar marcado, con los cuadritos en los bordes. Utilizamos sus
propiedades y seleccionamos la propiedad background, luego elegimos el color
de la paleta de colores y clic en aceptar.

Como ttulo vamos agregar una etiqueta, agregamos el controlador Jlabel, tal como
se ve en la imagen.

34
PROGRAMACION II
Ing. Irma Prado

Entre las propiedades puede cambiar el tipo y tamao de letra. Haciendo doble clic
sobre la etiqueta cambia el texto
Aada dos etiquetas ms y cambie el texto como en la siguiente figura:

Aada dos campos de textos, el campo dejndolo vaco.

35
PROGRAMACION II
Ing. Irma Prado

Ahora cambie el nombre de la variable del los campos de texto, escriba X


para el primero e Y para el segundo, encuentra esta opcin ingresando al
cdigo:

Ahora vamos agregar un botn, arrastre y deje un botn. Luego en


propiedades cambie el texto por SUMAR.

36
PROGRAMACION II
Ing. Irma Prado

Ahora cambie el nombre de la variable por el de botoncito, para ello ingresa


al cdigo, ver pantalla. Para que se produzcan estos cambios el botn debe
estar activo.

Aada otra etiqueta donde guardar el resultado, borra el texto de la


etiqueta, luego con el mouse arrastre y forme un rectngulo con la etiqueta:

Ingrese a cdigo y cambie el nombre de la variable por el de resultado. La


imagen queda as:

37
PROGRAMACION II
Ing. Irma Prado

Ahora vamos a programar un evento para el botn.


Active el botn, clic en eventos y clic en mouseCliked:

Inmediatamente se traslada hasta el cdigo, adicione en el cdigo que se


indica en la figura:

38
PROGRAMACION II
Ing. Irma Prado

Cuando se haga clic en el botn se leern los campos de texto, en este cdigo El
campo de texto X se convierte a entero y se almacena en la variable a. El valor
ingresado en el campo de texto 2 , ahora llamado Y se convierte a entero y se
almacena en b. Note que la suma de a+b se almacena en la etiqueta cuyo nombre
de variable era resultado,
Regrese a la pantalla de diseo y ejecute el programa

La siguiente ventana muestra la ejecucin del programa.

2) Programa para desplegar la tabla de un nmero.

39
PROGRAMACION II
Ing. Irma Prado

Crear un nuevo proyecto, luego agregar:

Dada una lista desplegable y en propiedades, escriba en Model


1,2,3,4,5,6,7,8,9,10

Aada el ttulo de tabla de un nmero, utilizando otra etiqueta.


Active nuevamente la lista desplegable, clic en cdigo y cambie el nombre
de la variable por el de tabla

40
PROGRAMACION II
Ing. Irma Prado

Ahora, para el resultado, que son varias lneas ya que vamos a desplegar la
tabla, vamos agregar el componente rea de texto, debe arrastrarlo y
dejarlo del tamao que se ve en la figura:
Inmediatamente se traslada a la pantalla de cdigo, agregue las siguientes
lneas de texto ( lo que est con amarillo y celeste):
private void tablaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//en k almacenamos el numero seleccionado de la lista deplegable
int k=Integer.parseInt(String.valueOf(tabla.getSelectedItem()));
String p1=calcular_tablita(k);
//llamamos a la funcin tablita donde se calcula la tabla y se almacena en
una string. Swing en Netbeans Programacion II Ing. Irma Prado

41
PROGRAMACION II
Ing. Irma Prado

jTextArea1.setText(p1); //cargamos el area de texto con la tabla


}
public static String calcular_tablita(int n)
{ int r;
String p="Tabla de "+n;
for(int i=1;i<=10;i++)
{
r=i*n;
p=p+"\n"+n+"*"+i+" = "+r;
}
return (p);
}
Listo ahora ejecute el programa

3.- Programa para sumar y restar dos nmeros.


Crear un nuevo proyecto y gregur el contenedor Panel, dos etiquetas y dos
campos de texto. Tal como se ve en la pantalla. Luego agregue un pequep
panel, donde almacenar los botones de opcin. Agregue dos botones de
opcin en el panel pequeo. En propiedades cambie el texto de cada botn
de opcin, agregue en el primero suma y en el segundo resta, tal como
se ve en la figura:

Selecciones los dos botones de opcin y agregue un botn de grupo.


El botn de grupo no se ve, por este motivo para cambiarle el cdigo,
seleccinelo de la lista de elementos de la clase. (Ver figura). Cambie el
nombre de la variable por el de grupo1.

Ahora cada botn de opcin debe pertenecer al grupo1, esto para que
permita seleccionar uno solo y no todas las opciones. Proceda como en la
figura. Proceda con cada botn opcin del mismo modo.

42
PROGRAMACION II
Ing. Irma Prado

Nos falta darle nombre a los botones de opcin, entonces clic en el botn,
clic en cdigo y cambie el nombre por el de radiob1 para la suma y radiob2
para la opcin de la resta.

Ahora alistamos la salida de la respuesta, para ello agregamos una etiqueta,


y en cdigo indicamos que el nombre de la variable es res.

Ahora vamos a proceder a programar los botones de opciones. Seleccione el


botn de opcin de la suma, luego clic en eventos y en action Performed,
luego copie el sgte cdigo:

private void radiob1ActionPerformed(java.awt.event.ActionEvent evt) {


int a=Integer.parseInt(jTextField2.getText());

43
PROGRAMACION II
Ing. Irma Prado

int b=Integer.parseInt(jTextField1.getText());
res.setText(String.valueOf(a+b)); }

Proceda del mismo modo para el botn de opcin de la resta y al hacer clic
en eventos actionPerformed, ingrese el sgte cdigo para la resta.

private void radiob2ActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here: Swing en Netbeans Programacion II
Ing. Irma Prado

44
PROGRAMACION II
Ing. Irma Prado

int a=Integer.parseInt(jTextField2.getText());
int b=Integer.parseInt(jTextField1.getText());
res.setText(String.valueOf(a-b));
}
LABORATORIO Y TRABAJO PRACTICO
1. Realice en Netbeans los programas explicados en esta gua, luego en un
archivo zip registrar estos en el aula virtual como asistencia del laboratorio.

2. Programa para:
Dado un nmero entero N que ingresa por teclado, realizar un
programa para invertir los dgitos del nmero. Ej. N=459
invertido es 954, un solo nmero
Dado un nmero N que ingresa por teclado, realizar un
programa para sumar los dgitos del nmero. Ej. N=459 la
suma es 18

3. Programa para calcular:


Calcular la a/b sin utilizar /.
Calcular a*b sin utilizar *.
Calcular ab sin utilizar pow.

4. Programa para calcular:


Sumatoria de n nmeros que ingresan por teclado
Sumatoria de n nmeros pares que ingresan por teclado.
Sumatoria de n nmero mltiplos de 3 que ingresan por
teclado.
5. Realice un programa para dibujar una parbola, los datos deben ingresar
por teclado.
6. Investigue y explique qu son las excepciones en java.

45

You might also like