- 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);
}
}
}
0 comentarios:
Publicar un comentario