Está en la página 1de 17

LENGUAJE DE PROGRAMACION

ORIENTADO A OBJETOS

SWING

Universidad Nacional de Ingeniería

Facultad de Ingeniería Industrial y de Sistemas

Angel Chata Tintaya (angel.chata@gmail.com)


http://aulaportal.googlepages.com

1
Universidad Nacional de Ingeniería 1
SWING
- Es un conjunto de componentes visuales que son parte del java.
- Son livianos respecto a sus antecesores llamados AWT
- Son independientes de la plataforma.
- El siguiente es un árbol de componentes usados en SWING
- SWING usa la infraestructura
de AWT

2
Universidad Nacional de Ingeniería 2
Componentes visuales
Componentes de alto nivel para Ventanas
JFrame JDialog JApplet

JWindow JInternalFrame

Contenedor de componentes
JPanel JScrollPane JToolBar

JSplitPane JTabbedPane JDesktopPane

Componentes de menu
JMenuBar JMenu JCheckboxMenuItem

JPopupMenu JMenuItem JRadioButtonMenuItem

Componentes de texto
JTextField JTextPane JPasswordField

JEditorPane JTextArea JFormattedTextField

3
Universidad Nacional de Ingeniería 3
Componentes visuales
Controles atomicos
JLabel JButton JToggleButton

Componentes de complejos
JTable JTree JFileChooser JCheckBox JRadioButton JProgressBar

JList JOptionPane JColorChooser


JSpinner JComboBox JSlider

JScrollBar JSeparator JToolTip

4
Universidad Nacional de Ingeniería 4
El primer programa com SWING
- Cada programa es SWING esta dividido en:
1. import de paquetes gráficos
2. Configurar el contenedor de alto nivel
3. Mostrar el contenedor
4. Asegurar consistencia del programa. (thread-safe)
 
1. import de paquetes gráficos
- La primera línea incorpora el SWING en el programa

import javax.swing.*;
 
- En la mayoría de programas se requiere importar además paquetes AWT.
- Estos paquetes se requieren porque SWING usa la infraestructura AWT.
- También usa los eventos AWT.
- Un evento es una acción sobre la aplicación. (presionar un botón, seleccionar un
menú...)

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

5
Universidad Nacional de Ingeniería 5
Configurar el contenedor de alto nivel
2. Configurar el contenedor de alto nivel...
- Cada programa debe tener al menos un contenedor de alto nivel
- Un contenedor de alto nivel maneja los eventos de sus componentes.
- Se cuenta con tres contenedores de alto nivel: JApplet, JFrame, JDialog.
- JFrame implementa la ventana principal de la aplicación.
- JFrame implementa los elementos por defecto de una ventana como bordes, titulo,
cambio de tamaño, botón para inconizar y cerrar. Estos elementos se llaman
decorators.
JFrame.setDefaultLookAndFeelDecorated(true);

- La variable frame es un objeto de clase JFrame


- El siguiente código define el contenedor principal.

JFrame frame = new JFrame("TestSwing");


- Los contenedores de alto nivel (como JFrame) heredan de java.awt.Window

6
Universidad Nacional de Ingeniería 6
Configurar el contenedor de alto nivel
- Los componentes de los contenedores heredan de javax.swing.Jcomponent
- El programa usa un JComponent llamado Jlabel que muestra un texto.
- Estas líneas crean el componente JLabel y lo agregan al contenedor JFrame
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);

- El JLabel no se agrega directamente al JFrame, sino a la zona de contenidos


(contentPane)
- Todos los contenedores de alto nivel tienen una zona de contenidos
- Los componentes de la ventana se encuentran en esta zona
- No se encuentran en esta zona los menús ni los decorators.
- En la versión 1.5 se evitara la complejidad del contentPane y se podrá utilizar
directamente el frame.
- Para que el programa termine al presionar el botón Close se requiere:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 

7
Universidad Nacional de Ingeniería 7
El primer programa com SWING
3. Mostrar el contenedor.
- Para mostrar el contenedor se realiza lo siguiente:
frame.pack();
frame.setVisible(true);
- la primera línea coloca el tamaño de la ventana de acuerdo a sus componentes. 

4. Asegurar la consistencia.
- Este código asegura que la ventana no se cuelgue antes de mostrarse en pantalla.
 javax.swing.SwingUtilities.invokeLater
( new Runnable() {
public void run() { crearMostrarVentana(); }
}
);
 

8
Universidad Nacional de Ingeniería 8
TestSwing.java
import javax.swing.*;
public class TestSwing {
public static void main(String[] args) {
//Enviar una tarea al administrador de eventos
//para que cree y muestre la ventana
javax.swing.SwingUtilities.invokeLater
( new Runnable() { public void run() { crearMostrarVentana(); } } );
}
// Metodo para crear una ventana.
private static void crearMostrarVentana() {
//Asegurarse que contenga los decorators de una ventana.
JFrame.setDefaultLookAndFeelDecorated(true);
//Crear y configurar la ventana
JFrame frame = new JFrame("TestSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Agregar un label que muestre "Hola Mundo!"
JLabel label = new JLabel("Hola Mundo!");
frame.getContentPane().add(label);
//Mostrar la ventana
frame.pack();
frame.setVisible(true);
}
}

9
Universidad Nacional de Ingeniería 9
Una aplicacion en SWING
En la aplicación cada vez que se presione el botón, el contador de clicks se
incrementara.
La aplicación explicara lo siguiente:
 
1. Look and Feel
2. Configurar de botones y labels
3. Agregar componentes al contenedor
4. Agregar bordes a los componentes
5. Manejar los eventos.

10
Universidad Nacional de Ingeniería 10
Look and feel
public class SwingMain {
 
//Indicar que look and feel se usara en la aplicacion.
//Los valores de LOOKANDFEEL seran:
// null (por defecto), "Metal", "System", "Motif" y "GTK+"
final static String LOOKANDFEEL = "Metal";
 
private static void initLookAndFeel() {
// Clase java que administrara el LAF.
String claseLAF = null;

if (LOOKANDFEEL.equals("Metal")) {
// retorna la clase del LAF propio del Java
claseLAF = UIManager.getCrossPlatformLookAndFeelClassName();
}
 
// UIManager es el administrador LAF
// el metodo configura el LAF de la aplicación
UIManager.setLookAndFeel(lookAndFeel);
 
}
 
}

11
Universidad Nacional de Ingeniería 11
Configurar botones y labels
public class SwingContent {
private JButton boton;
private JLabel label;
 
public Component crearComponentes() {
 
//Creando los componentes de la ventana
label = new JLabel("Soy un label Swing!");
boton = new JButton("Soy un boton Swing!");

//Se agrega una tecla rapida ALT+S


boton.setMnemonic(KeyEvent.VK_S);
//Se agrega un manejador de eventos
SwingListener listener = new SwingListener();
boton.addActionListener(listener);
//Opcionalmente se enlaza el label al boton
label.setLabelFor(boton);
}
}

12
Universidad Nacional de Ingeniería 12
Agregar componentes al contenedor
public class SwingContent {
public Component crearComponentes() {
//Se crea un layout para los componentes
LayoutManager layout = new GridLayout(0, 1);
JPanel panel = new JPanel(layout);
//Se agrega los componentes al panel.
panel.add(boton);
panel.add(label);
}
}

13
Universidad Nacional de Ingeniería 13
Agregar bordes a los componentes

public class SwingContent {

public Component crearComponentes() {


//Se agrega un borde vacio alrededor de los componentes.
panel.setBorder(BorderFactory.createEmptyBorder(
30, //arriba - pixeles
30, //izquierda
10, //abajo
30) //derecha
);
 
return panel;
}
}

14
Universidad Nacional de Ingeniería 14
Manejar los eventos
public class SwingContent {

private int numClicks = 0;


private JLabel label;
 
public Component crearComponentes() {
//Se agrega un manejador de eventos
SwingListener listener = new SwingListener();
boton.addActionListener(listener);
}
 
//Clase interna que es un listener de eventos.
public class SwingListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
numClicks++;
label.setText("Cantidad de clicks : " + numClicks);
}
}
 
}

15
Universidad Nacional de Ingeniería 15
Eventos
a) Donde se manejaran los eventos?
Una clase que implementara el listener de eventos.

public class SwingListener implements ActionListener...


b) Que componentes tendran eventos?
Una declaracion que registra el listener como manejador de eventos de un componente.
SwingListener listener = new SwingListener();
boton.addActionListener(listener);
 c) Que se realizara ante un evento?
Un método manejador de eventos que implementa la interfase del listener.
public void actionPerformed(ActionEvent e) {
numClicks++;
label.setText("Cantidad de clicks : " + numClicks);
}
1) Cuando el usuario presiona un boton en pantalla (o realiza su equivalente en teclado) el
programa debe contar con un objeto que implemente la interfase ActionListener
2) El programa debe registrar este objeto en la fuente del evento (el boton)
3) Cuando el usuario presiona el boton, se realiza el evento, invocandose el método
actionPerformed del ActionListener registrado.

16
Universidad Nacional de Ingeniería 16
SWING II y III

17
Universidad Nacional de Ingeniería 17

También podría gustarte