18/12/2007, 13:09
|
| | Fecha de Ingreso: octubre-2007
Mensajes: 57
Antigüedad: 17 años, 3 meses Puntos: 0 | |
Re: Duda principiante funcion (THIS) java Aplicación de ejemplo
Se trata de una ventana con una etiqueta para mostrar un número y 4 botones de comando; cada botón,al ser pulsado, implementa la acción de forma diferente, según lo referido más arriba; todos ellos suman una cifra al número mostrado.
codigo fuente
Código:
/* CAPTURA DE EVENTOS DE ACCIÓN USANDO
* CLASES DERIVADAS DE LA INTERFAZ ActionListener Y EVENTOS DE TIPO ActionEvent.
* ActionListener GENERA EVENTOS ActionEvent CUANDO OCURRE UNA ACCIÓN SOBRE EL ELEMENTO
* Y MEDIANTE SU MÉTODO ActionPerformed(ActionEvent e) REALIZA LAS ACCIONES PREVISTAS */
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
// CLASE PRINCIPAL DEL PROGRAMA (implementa ActionListener)
public class Action_listener extends JFrame implements ActionListener {
// variables a nivel de clase
private JLabel contador;
private JButton bt1, bt2, bt3, bt4, bt5, bt6;
private int cuenta = 0;
private JPanel p1, p2;
// MÉTODO DE ENTRADA AL PROGRAMA
public static void main(String[] args) {
// instancia de la clase principal
new Action_listener();
}
// MÉTODO CONSTRUCTOR QUE CREA Y MUESTRA LA INTERFAZ
public Action_listener() {
// decoración de Java
JFrame.setDefaultLookAndFeelDecorated(true);
/* la variable especial this se usa en métodos de instancia
* para hacer referencia al objeto que contiene al método,
* aquí equivale a JFrame */
// acción por defecto al cerrar la ventana: salir del programa
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/* paneles de disposición: por defecto, los paneles se crean con diseño FlowLayout
* por ello es preferible definir el Layout en el constructor del panel, para crearlo
* desde el principio con ese diseño y evitar la creación de un FlowLayout temporal;
* es preferible hacer:
* p1 = new JPanel(new BorderLayout());
* mejor que hacer ésto otro:
* p1 = new JPanel();
* p1.setLayout(new BorderLayout()); */
p1 = new JPanel(new BorderLayout());
// borde del panel: vacío, 10px por cada lado
p1.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
// panel para ocupar BorderLayout.SOUTH
p2 = new JPanel();
p2.setLayout(new GridLayout(1,4,10,10));
// configurar fuente y convertir número a String para JLabel
contador = new JLabel(Integer.toString(cuenta), JLabel.CENTER);
Font letra1 = new Font("Arial", Font.BOLD, 12);
contador.setFont(letra1);
// configurar fuente para los botones
Font letra2 = new Font("Arial", Font.PLAIN, 12);
bt1 = new JButton("De 1 en 1");
bt1.setFont(letra2);
bt2 = new JButton("De 2 en 2");
bt2.setFont(letra2);
bt3 = new JButton("De 3 en 3");
bt3.setFont(letra2);
bt4 = new JButton("De 4 en 4");
bt4.setFont(letra2);
// tooltips para los botones
bt1.setToolTipText("Contar de 1 en 1");
bt2.setToolTipText("Contar de 2 en 2");
bt3.setToolTipText("Contar de 3 en 3");
bt4.setToolTipText("Contar de 4 en 4");
/* acción por defecto ante los eventos de bt1 y bt3,
* para poder diferenciar más tarde cuál de los 2 botones
* ha generado el evento */
bt1.setActionCommand ("Contar1");
bt3.setActionCommand ("Contar3");
/*colocar los componentes en los paneles;
* para añadir un componente a un JFrame es preferible
* frame.getContentPane().add(p1);
* en lugar de
* frame.add(p1);*/
this.getContentPane().add(p1);
p1.add(contador, BorderLayout.NORTH);
p1.add(p2, BorderLayout.SOUTH);
p2.add(bt1);
p2.add(bt2);
p2.add(bt3);
p2.add(bt4);
// crear y mostrar la ventana
this.setTitle("ActionListener");
this.setSize(500,100);
this.setLocationRelativeTo(null); // centrar el formulario en la pantalla
this.setResizable(false);
this.setVisible(true);
/*la clase principal implementa la interfaz ActionListener
* por ello se pueden emplear sus métodos directamente.
* aquí se detectan las acciones sobre los botones bt1 y bt3: */
bt1.addActionListener(this);
bt3.addActionListener(this);
/*Botón bt2: se asocia con una instancia de la clase Contar,
* la clase Contar también implementa ActionListener por lo que
* este método podría usarse aunque la clase principal no fuese ActionListener */
bt2.addActionListener(new Contar());
/* si la clase principal no implementa la interfaz ActionListener
* se puede asociar el botón con una instancia de ActionListener;
* su método actionPerformed() enlaza con el método clicEnBoton2() que
* se ejecuta cuando se detectan acciones sobre el botón */
bt4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
clicEnBoton2(e); }
});
}
// LO QUE SUCEDE AL PULSAR LOS BOTONES 1 y 3
public void actionPerformed(ActionEvent e) {
// si se ha pulsado en el botón bt1 (si ActionCommand es Contar1)
if ("Contar1".equals(e.getActionCommand())) {
cuenta ++; // contar 1
contador.setText(Integer.toString(cuenta)); }
// si se ha pulsado en el botón bt3 (si ActionCommand es Contar3)
else if ("Contar3".equals(e.getActionCommand())) {
cuenta +=3; // contar 3
contador.setText(Integer.toString(cuenta)); }
}
// LO QUE SUCEDE AL PULSAR EL BOTON 2
class Contar implements ActionListener {
public void actionPerformed(ActionEvent evt) {
cuenta +=2; // contar 3
contador.setText(Integer.toString(cuenta)); }
}
// LO QUE SUCEDE AL PULSAR EL BOTON 4
private void clicEnBoton2(ActionEvent evt) {
cuenta +=4; // contar 4
contador.setText(Integer.toString(cuenta));
}
}
|