Bueno. Vamos a poner esto un poco interesante: Botoncicos.
Primero te dejo el ejemplo y te voy explicando a partir de el:
//AppletBoton.java
// poniendo botones en los applets
import javax.swing.*;
import java.awt.*;
import net.juantxu.swing.*;
public class AppletBoton extends JApplet{
JButton b1 = new JButton("Boton 1"), b2 = new JButton("Boton 2");
public void init(){
Container cp = getContentPane();
cp.setLayout( new FlowLayout() );
cp.add(b1);
cp.add(b2);
}
public static void main(String[] args){
Console.run( new AppletBoton(), 200, 100);
}
}
Como puedes ver poner botones no es tan difícil. añades un Jbutton y listo. Definimos los botones como globales porque queremos que todo el mundo acceda a ellos. y luego, en el init() los añadimos. Pero aquí hemos hecho algo mas. El gestor de disposición por defecto no nos gustaba, por lo que hemos asignado un gestor de disposición de nuestro gusto (FlowLayout() ) que es mucho mas molón. Un gestor de disposición es el que se encarga de decir donde van las cosas en la ventana. En este caso el FlowLayout tiene mucho flow y va poniendo los objetos uno detrás de otro de izquierda a derecha y de arriba a abajo.
Pero esto queda un poco soso… esos botones no hacen nada.
¡Claro, porque no les has dicho que hagan nada! - ¿Que es lo que tienen que hacer? - Pues que cuando yo le pique hagan algo. - … osea, que esperen a tu acción y reaccionen a ella…. vamos a ver.
A pesar de tener que escribir mas que un tonto, Java tiene la ventaja de que hace lo que tu le digas que haga y nada mas. Me explico, para aquellos que hayais usado Visual Basic. Cuando he usado VB tenía la sensación de que no era programador, que era un usuario. Yo cogía un boton, lo ponía ahi y le picaba y ponía el código detras. Después VB sabía que lo que yo estaba esperando era que picase en el botón … pero… ¿Como?¿Quien le había dicho que se comportase así?
En Java esto funciona de otra manera. Tu tienes un botón que no hace nada. Entondes tu dices…. hey, botón, quiero que respondas al evento de picar sobre ti. ¡A eso se le llama tener el control!
Esto funciona de la siguiente manera: Tu creas el botón y creas tambien un objeto que es un oyente de acciones o el oyente de acciones no es otra cosa que un objeto que está esperando a que pase algo, piques en la pantalla, pases el ratón por encima, piques con el botón derecho, etc. Y a ese oyente le dices… Estate atento por si alguien pica encima de un botón. En ese caso haz esto. Finalmente le tienes que decir donde escuche. De momento tenemos un botón y un oyente, pero el oyente tiene que ir a alguna parte para escuchar algo. ¿A donde? Pues claro está, al botón.
Mira:
// Boton2.java
// hagamos un boton que hace algo
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import net.juantxu.swing.*;
public class Boton2 extends JApplet{
JButton
b1= new JButton("Boton 1"),
b2= new JButton("Boton 2");
JTextField texto = new JTextField(10);
class Oyente implements ActionListener{
public void actionPerformed(ActionEvent e){
String nombre= ( (JButton)e.getSource() ).getText();
texto.setText(nombre);
}
}
Oyente o1 = new Oyente();
// y aqui llamo al init()
public void init(){
// le añado el oyente a cada boton
b1.addActionListener(o1);
b2.addActionListener(o1);
// genero el container y le empiezo a meter las cosas
Container cp = getContentPane();
cp.setLayout( new FlowLayout() );
cp.add(b1);
cp.add(b2);
cp.add(texto);
}
public static void main(String[] args){
Console.run(new Boton2(), 300, 300);
}
}
Le he puesto un textfield para que veas que pasa algo. Tampoco creo que merezca mucha mas explicación.
Vamo a añadirle un poco mas…. un area de texto. fijate que la envolvemos en un JScrollPane para que le ponga barras de desplazamiento. Si no , no las pone…
// Boton2.java
// hagamos un boton que hace algo
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import net.juantxu.swing.*;
public class Boton3 extends JApplet{
JButton
b1= new JButton("Boton 1"),
b2= new JButton("Boton 2"),
b3= new JButton("Añadir datos"),
b4= new JButton("Borrar datos");
JTextArea t = new JTextArea(10,20);
JTextField texto = new JTextField(10);
class Oyente implements ActionListener{
public void actionPerformed(ActionEvent e){
String nombre= ( (JButton)e.getSource() ).getText();
texto.setText(nombre);
}
}
Oyente o1 = new Oyente();
// y aqui llamo al init()
public void init(){
// le añado el oyente a cada boton
b1.addActionListener(o1);
b2.addActionListener(o1);
// otra forma más compacta de añadir el action listener
b4.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e){
t.setText("");
}
} );
b3.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e){
for(int i=0; i<5;i++){
t.append("" + i +" vuelta");
}
}
} );
// genero el container y le empiezo a meter las cosas
Container cp = getContentPane();
cp.setLayout( new FlowLayout() );
cp.add(b1);
cp.add(b2);
cp.add(b3);
cp.add(b4);
cp.add(texto);
cp.add(new JScrollPane(t) );
}
public static void main(String[] args){
Console.run(new Boton3(), 300, 300);
}
}
como sabes se puede ejecutar desde la consola… pero por si no te fias… aqui tienes el html para ejecutarlo dentro del navegador.. :D
<html> <head> </head> <body> <applet code=Boton3 width=300 height=300> </applet> </body>
Y… aqui tienes distintos tipos de botoncitos… Botones.java import javax.swing.*; import javax.swing.plaf.basic.*; import javax.swing.border.*; import java.awt.*; import java.awt.event.*; import net.juantxu.swing.*; public class Botones extends JApplet{ JButton jb = new JButton(“Boton”); BasicArrowButton arriba = new BasicArrowButton(BasicArrowButton.NORTH), abajo = new BasicArrowButton(BasicArrowButton.SOUTH), este = new BasicArrowButton(BasicArrowButton.EAST), oeste = new BasicArrowButton(BasicArrowButton.WEST); public void init(){ Container cp = getContentPane(); cp.setLayout(new FlowLayout() ); cp.add(jb); cp.add(new JToggleButton(“JToggleButton”) ); cp.add(new JCheckBox(“JCheckBox”) ); cp.add(new JRadioButton(“JRadioButton”)); JPanel jp = new JPanel(); jp.setBorder(new TitledBorder(“direciones”)); jp.add(arriba); jp.add(abajo); jp.add(este); jp.add(oeste); cp.add(jp); } public static void main(String[] args){ Console.run(new Botones(), 400, 200); } }