domingo, 3 de abril de 2011

Laboratorio de Swing Java (10.03.06)

- Pruebe el siguiente programa.
- Pruebe cada uno de los LOOKANDFEEL del programa. Que clase usan?
- Agregue un segundo boton (boton2) y un segundo label (label2) al programa pero cuyo contador (numClicks2) inicie en 1000 y se decremente con cada clic al boton2.
- Modifique el layout del contenedor:
LayoutManager layout = new GridLayout(0, 2);
LayoutManager layout = new FlowLayout();
SwingMain.java  
import java.awt.*;  
import java.awt.event.*;  
import javax.swing.*;            
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";  

public static void main(String[] args) {  
//Enviar una tarea al administrador de eventos  
//para que cree y muestre la ventana  
SwingUtilities.invokeLater  
(  new Runnable() {  
public void run() { crearMostrarVentana(); }  
}  
);  
}  

// Metodo para crear una ventana GUI.  
private static void crearMostrarVentana() {  
//Configura el LAF.  
iniciarLookAndFeel();  

//Asegurarse que contenga los decorators de una ventana.  
JFrame.setDefaultLookAndFeelDecorated(true);  

//Crear y configurar la ventana  
JFrame frame = new JFrame("SwingMain");  
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

//Agregar un panel que contiene un label y un boton  
SwingContent contenido = new SwingContent();  
Component panel = contenido.crearComponentes();  
frame.getContentPane().add(panel);  

//Mostrar la ventana  
frame.pack();  
frame.setVisible(true);  
}  

private static void iniciarLookAndFeel() {  

// Clase java que administra el LAF.  
String claseLAF = null;  

if (LOOKANDFEEL != null) {  
if (LOOKANDFEEL.equals("Metal")) {  
// retorna la clase del LAF propio del Java  
claseLAF = UIManager.getCrossPlatformLookAndFeelClassName();  
} else if (LOOKANDFEEL.equals("System")) {  
// retorna la clase del LAF de windows  
claseLAF = UIManager.getSystemLookAndFeelClassName();  
} else if (LOOKANDFEEL.equals("Motif")) {  
claseLAF = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";  
} else if (LOOKANDFEEL.equals("GTK+")) {   
claseLAF = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";  
} else {  
System.err.println("Ha indicado un LOOKANDFEEL incorrecto : "  
+ LOOKANDFEEL);  
claseLAF = UIManager.getCrossPlatformLookAndFeelClassName();  
}  
System.out.println("Clase LAF usada : "+claseLAF);  
try {  
// UIManager es el administrador LAF  
// el metodo configura el LAF de  la aplicacion  
UIManager.setLookAndFeel(claseLAF);  
} catch (ClassNotFoundException e) {  
System.err.println("No se encontro la clase para el LAF:"  
+ claseLAF);  
System.err.println("Ha incluido la libreria en classpath?");  
System.err.println("Se usara LAF por defecto.");  
} catch (UnsupportedLookAndFeelException e) {  
System.err.println("No se puede usar el LAF indicado ("  
+ claseLAF  
+ ") en esta plataforma.");  
System.err.println("Se usara LAF por defecto.");  
} catch (Exception e) {  
System.err.println("Se tiene problemas al usar el LAF ("  
+ claseLAF  
+ ")");  
System.err.println("Se usara LAF por defecto.");  
e.printStackTrace();  
}  
}  
}   
}  

SwingContent.java  
import java.awt.*;  
import java.awt.event.*;  
import javax.swing.*;            
public class SwingContent {  
//Contador de clicks en el boton.  
private int numClicks = 0;  
//Componentes de la aplicacion.  
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  
BotonListener listener = new BotonListener();  
boton.addActionListener(listener);  
//Opcionalmente se enlaza el label al boton  
label.setLabelFor(boton);  

//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);  
//Se agrega un borde vacio alrededor de los componentes.  
panel.setBorder(BorderFactory.createEmptyBorder(  
30, //arriba  
30, //izquierda  
10, //abajo  
30) //derecha  
);  

return panel;  
}  

//Clase interna que es un listener de eventos.  
public class BotonListener implements ActionListener {  
public void actionPerformed(ActionEvent e) {  
numClicks++;  
label.setText("Cantidad de clicks : " + numClicks);  
}  
}  

}  
Compartir:

0 comentarios:

Publicar un comentario