JFRAME EN JAVA
La clase
JFrame implementa un objeto ventana,
JFrame es una extensión de la clase
Frame del paquete
AWT.
Para crear una ventana, existen dos formas principales de hacerlo:
- Crear un objeto de la clase JFrame
- Extender la clase JFrame
El último método es muy útil cuando se crean ventanas personalizadas que se invocan repetidamente (como ventanas de error, o de información).
Crearemos una ventana con el primer método:
ventana = new JFrame();
Una vez creado una ventana JFrame, ésta obtiene el tamaño necesario para mostrar los componentes que existen dentro de la aplicación, como en nuestro ejemplo no existe componente, cambiaremos su tamaño inicial, con el método:
setSize(int ancho, int largo)
ventana.setSize(200,300);
Después cambiaremos su título para que sea el nombre de nuestra aplicación con el método:
setTitle(String titulo)
ventana.setTitle("Hola mundo Swing");
El objeto existe, pero no es mostrado por defecto, entonces se hace la llamada a:
setVisible(boolean)
ventana.setVisible(true);
con esto tendremos nuestra primera aplicación en Swing.
Código:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Window extends JFrame
{
public Window()
{
this.setSize(400,500);
this.setTitle("Primer Aplicacion Swing");
this.setVisible(true);
}
public static void main(String []args)
{
new Window();
JFrame jFrameWindow = new JFrame();
jFrameWindow.setSize(400,500);
/* se puede sustituir por pack() para
* que java calcule automaticamente el tama\~no
* que necesita.
*/
jFrameWindow.setTitle("Segunda Aplicacion Swing");
jFrameWindow.setVisible(true);
}
}
Se debe notar que aquí están los dos métodos de creación de ventanas, el primero es extendiendo la clase
JFrame y el segundo por medio de la creación de un objeto
jFrameWindow.
Hasta aquí hemos creado una aplicación sencilla, pero hemos de notar que la ventana no termina cuando damos click en el botón cerrar, esto es debido a que no hemos definido ningún evento.
Debido a la programación en objetos, Java ha logrado adaptar el enfoque orientado de eventos al paradigma de orientado a objeto, esto se logra mediante la creación de clases
xxxAdapter que procesen información de teclado, ratón o de las ventanas mismas.Debido al enfoque multiplataforma de Java, esencialmente son interfases las que procesan la información del teclado o de ratón y son llamados
Listeners, pero también se hacen implementaciones de esas interfases en clases
Event.
Siempre hay que generar una clase heredada de algún
xxxAdapter o implementarla desde su interfaz (que comúnmente es
xxxListener) para procesar los eventos ocurridos. Una vez creada una clase heredada, hay que
registrarla en el componente que queremos procese esos eventos, por ejemplo:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class EventoBoton implements ActionListener
{
public EventoBoton(){}
public void actionPerformed(ActionEvent evt)
{
System.out.println("Evento: " + evt.getActionCommand());
}
}
class Window extends JFrame
{
...
JButton boton;
...
public Window()
{
... /*Inicializacion de la ventana y el boton*/
boton.addActionListener(new EventoBoton());
...
}
}
Entre las interfaces importantes tenemos:
ActionListenerEsta interfaz permite crear clases para todos los eventos de
acción tales como botones (el único método provisto por esta interfaz es:
actionPerformed(ActionEvent evt).
FocusListenerInterfaz para los eventos de Foco.
ItemListenerInterfaz para los eventos de cambios de Items (para listas).
KeyListenerInterfaz para los eventos de teclado.
MouseListenerInterfaz para los eventos de ratón.
WindowListenerInterfaz para los eventos de ventana.
Una vez con estos conceptos, nos detendremos en la Interfaz
ActionListener, la cual sólo provee un método:
void actionPerformed(ActionEvent evt), la clase
ActionEvent provee los siguientes métodos:
Valor de Retorno | Nombre del Método |
String | getActionCommand() |
| Regresa la cadena de comando asociada con esta acción. |
int | getModifiers() |
| Regresa las llaves modificadoras que se presionaron |
| durante la acción. |
long | getWhen() |
| Regresa la hora cuando el evento ocurrió. |
String | paramString() |
| Regresa una cadena de paraámetros identificando la acción. |
Object | getSource() |
| Regresa el objeto que originó la acción. |
El último método es de la clase
EventObject de la que provienen todos los
xxxEvents, cada uno de estos métodos nos permitirá conocer más acerca de los componentes que originaron el evento.
Supóngase que tenemos dos botones:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class EventoBoton implements ActionListener
{
public EventoBoton(){}
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource().toString().indexOf("boton1") != -1)
System.out.println("Se presiono el boton1");
else
if (evt.getSource().toString().indexOf("boton2") != -1)
System.out.println("Se presiono el boton2");
else
System.out.println("Boton desconocido");
}
}
class Window extends JFrame
{
...
JButton boton1;
JButton boton2;
EventoBoton eventos;
...
public Window()
{
... /*Inicializacion de la ventana y el boton*/
eventos = new EventoBoton();
boton1.addActionListener(eventos);
boton2.addActionListener(eventos);
...
}
}
Con esta versión modificada de
EventoBoton podemos obtener la fuente y hacer operaciones específicas para cada botón.
Tarea
- tipea el siguiente programa y explica linea x linea lo que realiza
import javax.swing.*;
public class Formulario extends JFrame{
public Formulario() {
setLayout(null);
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(10,20,400,300);
formulario1.setVisible(true);
}
}
Tipee el siguiente programa y explique que objeto nuevo se esta incluyendo en este programa
y explique para que sirve
import javax.swing.*;
public class Formulario extends JFrame {
private JLabel label1,label2;
public Formulario() {
setLayout(null);
label1=new JLabel("Sistema de Facturación.");
label1.setBounds(10,20,300,30);
add(label1);
label2=new JLabel("Vesion 1.0");
label2.setBounds(10,100,100,30);
add(label2);
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,300,200);
formulario1.setResizable(false);
formulario1.setVisible(true);
}
}
- Crear tres objetos de la clase JLabel, ubicarlos uno debajo de otro y mostrar nombres de tres canciones de ADELE
- Tipee el siguiente programa y explique que objeto nuevo se esta incluyendo en este programa y explique para que sirve
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener{
private JTextField textfield1;
private JLabel label1;
private JButton boton1;
public Formulario() {
setLayout(null);
label1=new JLabel("Usuario:");
label1.setBounds(10,10,100,30);
add(label1);
textfield1=new JTextField();
textfield1.setBounds(120,10,150,20);
add(textfield1);
boton1=new JButton("Aceptar");
boton1.setBounds(10,80,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
String cad=textfield1.getText();
setTitle(cad);
}
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,300,150);
formulario1.setVisible(true);
}
}
- Tipee el siguiente programa y explique que objeto nuevo se esta incluyendo en este programa y explique para que sirve
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener{
private JTextField textfield1,textfield2;
private JButton boton1;
public Formulario() {
setLayout(null);
textfield1=new JTextField();
textfield1.setBounds(10,10,100,30);
add(textfield1);
textfield2=new JTextField();
textfield2.setBounds(10,50,100,30);
add(textfield2);
boton1=new JButton("Sumar");
boton1.setBounds(10,90,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
String cad1=textfield1.getText();
String cad2=textfield2.getText();
int x1=Integer.parseInt(cad1);
int x2=Integer.parseInt(cad2);
int suma=x1+x2;
String total=String.valueOf(suma);
setTitle(total);
}
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,140,150);
formulario1.setVisible(true);
}
}
Ingresar el nombre de usuario y clave en controles de tipo JTextField. Si se ingresa las cadena (usuario: juan, clave=abc123) luego mostrar en el título del JFrame el mensaje "Correcto" en caso contrario mostrar el mensaje "Incorrecto".
- Tipee el siguiente programa y explique que objeto nuevo se esta incluyendo en este programa y explique para que sirve
import javax.swing.*;
public class Formulario extends JFrame{
private JTextField textfield1;
private JTextArea textarea1;
public Formulario() {
setLayout(null);
textfield1=new JTextField();
textfield1.setBounds(10,10,200,30);
add(textfield1);
textarea1=new JTextArea();
textarea1.setBounds(10,50,400,300);
add(textarea1);
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,540,400);
formulario1.setVisible(true);
}
}
- Tipee el siguiente programa y explique que objeto nuevo se esta incluyendo en este programa y explique para que sirve
import javax.swing.*;
public class Formulario extends JFrame{
private JTextField textfield1;
private JScrollPane scrollpane1;
private JTextArea textarea1;
public Formulario() {
setLayout(null);
textfield1=new JTextField();
textfield1.setBounds(10,10,200,30);
add(textfield1);
textarea1=new JTextArea();
scrollpane1=new JScrollPane(textarea1);
scrollpane1.setBounds(10,50,400,300);
add(scrollpane1);
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,540,400);
formulario1.setVisible(true);
}
}
- Tipee el siguiente programa y explique que objeto nuevo se esta incluyendo en este programa y explique para que sirve
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener{
private JScrollPane scrollpane1;
private JTextArea textarea1;
private JButton boton1;
public Formulario() {
setLayout(null);
textarea1=new JTextArea();
scrollpane1=new JScrollPane(textarea1);
scrollpane1.setBounds(10,10,300,200);
add(scrollpane1);
boton1=new JButton("Verificar");
boton1.setBounds(10,260,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
String texto=textarea1.getText();
if (texto.indexOf("argentina")!=-1) {
setTitle("Si contiene el texto \"argentina\"");
} else {
setTitle("No contiene el texto \"argentina\"");
}
}
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,400,380);
formulario1.setVisible(true);
}
}
- Tipee el siguiente programa y explique que objeto nuevo se esta incluyendo en este programa y explique para que sirve
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener {
JButton boton1;
public Formulario() {
setLayout(null);
boton1=new JButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
System.exit(0);
}
}
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,450,350);
formulario1.setVisible(true);
}
}
- Tipee el siguiente programa y explique que objeto nuevo se esta incluyendo en este programa y explique para que sirve
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements ActionListener{
private JButton boton1,boton2,boton3;
public Formulario() {
setLayout(null);
boton1=new JButton("1");
boton1.setBounds(10,100,90,30);
add(boton1);
boton1.addActionListener(this);
boton2=new JButton("2");
boton2.setBounds(110,100,90,30);
add(boton2);
boton2.addActionListener(this);
boton3=new JButton("3");
boton3.setBounds(210,100,90,30);
add(boton3);
boton3.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
setTitle("boton 1");
}
if (e.getSource()==boton2) {
setTitle("boton 2");
}
if (e.getSource()==boton3) {
setTitle("boton 3");
}
}
public static void main(String[] ar){
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,350,200);
formulario1.setVisible(true);
}
}
- Investigar los siguientes objetos
JFrame
JLabel
JButton
JTextField
JTextArea