domingo, 29 de agosto de 2010

Los DocumentListener

Lo que conseguimos con los DocumentListener es una respuesta inmediata sin necesidad de pulsar un boton,  y para ello tendremos que crear la clase que lo implemente, un ejemplo:

import javax.swing.event.DocumentListener;
import javax.swing.event.DocumentEvent;
import javax.swing.text.Document;

public class ImplementacionDocumentListener implements DocumentListener {
   
    public void insertUpdate(DocumentEvent e) {
            calculaValorDoble(e);
    }
    public void removeUpdate(DocumentEvent e) {
        calculaValorDoble(e);
    }
    public void changedUpdate(DocumentEvent e) {
     
    }
   
    private void calculaValorDoble(DocumentEvent e) {

        Document textoNumero = e.getDocument();

        if (textoNumero.getProperty("nombre").equals("numero")){
          String numeroEnLetras = DobleDelNumero.getText_jTF_Numero();
        
          try{
              double numero= Double.parseDouble(numeroEnLetras);
              double numeroDoble = numero * 2;
              DobleDelNumero.setText_jTF_DobleNumero(""+numeroDoble);
              DobleDelNumero.setText_jLabel4(" ");
          }catch (NumberFormatException nfe){            
                 DobleDelNumero.setText_jLabel4("El valor actual no es un n˙mero real v·lido. CorrÌjalo. ");
                 DobleDelNumero.setText_jTF_DobleNumero(" ");            
          }
            
        }
  }
}


y luego para realizar una llamada desde otra clase donde utilizaremos el DocumentListener sera asi:

ImplementacionDocumentListener miPropioDocumentListener =
           new ImplementacionDocumentListener();
        
 jTF_Numero.getDocument().addDocumentListener (miPropioDocumentListener);

En el cual, la clase que lo contiene seria algo asi:

public class DobleDelNumero extends javax.swing.JFrame {
 
    public DobleDelNumero() {      
         initComponents();        
    }
       private void initComponents() {
       
        jTF_DobleNumero = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
       
        jLabel4 = new javax.swing.JLabel();

        getContentPane().setLayout(null);
               
        ImplementacionDocumentListener miPropioDocumentListener =
           new ImplementacionDocumentListener();
       
                jTF_Numero.getDocument().addDocumentListener (miPropioDocumentListener);
       
                jTF_Numero.getDocument().putProperty("nombre", "numero");
       
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jTF_Numero.setFont(new java.awt.Font("Tahoma", 1, 14));
        jTF_Numero.setForeground(new java.awt.Color(0, 0, 153));
        jTF_Numero.setText("0");
        getContentPane().add(jTF_Numero);
        jTF_Numero.setBounds(240, 60, 230, 30);
       
        jTF_DobleNumero.setEditable(false);
        jTF_DobleNumero.setFont(new java.awt.Font("Tahoma", 1, 14));
        jTF_DobleNumero.setForeground(new java.awt.Color(153, 0, 0));
        jTF_DobleNumero.setText("0");
        getContentPane().add(jTF_DobleNumero);
        jTF_DobleNumero.setBounds(240, 130, 230, 30);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel1.setText("N\u00famero:");
        getContentPane().add(jLabel1);
        jLabel1.setBounds(100, 60, 130, 30);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel2.setText("Doble del N\u00famero:");
        getContentPane().add(jLabel2);
        jLabel2.setBounds(10, 130, 220, 30);
        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 13));
        jLabel3.setForeground(new java.awt.Color(0, 0, 255));
        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("Cada vez que modifiques el valor de n\u00famero se actualizar\u00e1 autom\u00e1ticamente el valor de su doble.");
        getContentPane().add(jLabel3);
        jLabel3.setBounds(10, 190, 640, 50);

        jLabel4.setBorder(new javax.swing.border.TitledBorder("\u00c1rea de mensajes."));
        getContentPane().add(jLabel4);
        jLabel4.setBounds(20, 250, 620, 80);
        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 18));
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setForeground(new java.awt.Color(255,0,0));
       
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-669)/2, (screenSize.height-406)/2, 669, 406);
    }
  
    public static void main(String args[]) {
       
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new DobleDelNumero().setVisible(true);
            }
        });
    }
   
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;   
    private static javax.swing.JLabel jLabel4;
    private static javax.swing.JTextField jTF_DobleNumero;
    private static javax.swing.JTextField jTF_Numero;  
     public static  String getText_jTF_Numero(){
        return jTF_Numero.getText();
    }
   
    public static void setText_jTF_DobleNumero(String texto){
        jTF_DobleNumero.setText(texto);
    }
    public static void setText_jLabel4(String texto){
        jLabel4.setText(texto);
    }
}

No hay comentarios:

Publicar un comentario