viernes, 1 de junio de 2012

Jlabel editable con tecla Enter

En este caso podremos editar en tiempo de ejecución un Jlabel con la tecla Enter con lo cual lo podremos modificar a nuestro gusto.
Dejo el código para que lo prueben:

/** 
* 
* @author http://jonathan-palomino.blogspot.com/ 
* 
*/ 
import javax.swing.SwingUtilities; 
import java.awt.BorderLayout; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.swing.JTextField;
import java.awt.CardLayout; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent;
import javax.swing.JLabel; 
import java.awt.Font; 
import javax.swing.SwingConstants;
public class principal extends JFrame {
    private static final long serialVersionUID = 1L; 
    private JPanel jContentPane = null; 
    private JPanel panel_edicion = null; 
    private JLabel etiqueta_editable = null; 
    /*************************************/ 
    //si el usuario hizo enter 
    private static final int confirmar = KeyEvent.VK_ENTER; 
    //si es usuario pulso escape 
    private static final int cancelo = KeyEvent.VK_ESCAPE; 
    private CardLayout card;//utilizo el carlayotu para manejar varios objetos dentro del mismo panel 
    private static final String txt_caja = "text field";  //  @jve:decl-index=0: 
    private JTextField caja_edicion; 
    private static final String LABEL = "label"; 
    private String valor=new String("");
    /** 
     * This method initializes panel_edicion    
     *     
     * @return javax.swing.JPanel    
     */ 
    private JPanel getPanel_edicion() { 
        if (panel_edicion == null) { 
            card = new CardLayout(); 
            etiqueta_editable = new JLabel(); 
            etiqueta_editable.setText("Programación fácil con JAVA"); 
            etiqueta_editable.setHorizontalAlignment(SwingConstants.CENTER); 
            etiqueta_editable.setFont(new Font("Dialog", Font.BOLD, 48)); 
            etiqueta_editable.addMouseListener(new MouseAdapter() { 
                public void mouseClicked(MouseEvent e) { 
                    //si el usurario hizo doble clic encima de la etiqueta 
                    if (e.getClickCount() == 2) { 
                        editando(); 
                    } 
                } 
            }); 
            caja_edicion = new JTextField(); 
            caja_edicion.addKeyListener(new KeyAdapter() { 
                public void keyReleased(KeyEvent e) { 
                    if (e.getKeyCode() == confirmar) { 
                        confirmar(); 
                    } else if (e.getKeyCode() == cancelo) { 
                        cancelar(); 
                    } 
                } 
            }); 
            panel_edicion = new JPanel(card); 
            panel_edicion.add(caja_edicion, txt_caja); 
            panel_edicion.add(etiqueta_editable, LABEL); 
            card.show(panel_edicion, LABEL); 
        } 
        return panel_edicion; 
    }
    /** 
     * @param args 
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        SwingUtilities.invokeLater(new Runnable() { 
            public void run() { 
                principal thisClass = new principal(); 
                thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
                thisClass.setVisible(true); 
            } 
        }); 
    }
    /** 
     * This is the default constructor 
     */ 
    public principal() { 
        super(); 
        initialize(); 
    }
    /** 
     * This method initializes this 
     * 
     * @return void 
     */ 
    private void initialize() { 
        this.setSize(864, 251); 
        this.setContentPane(getJContentPane()); 
        this.setTitle("JLabel editable en tiempo de ejecucion por jonathan-palomino.blogspot.com"); 
        this.setLocationRelativeTo(null); 
    }
    /** 
     * This method initializes jContentPane 
     * 
     * @return javax.swing.JPanel 
     */ 
    private JPanel getJContentPane() { 
        if (jContentPane == null) { 
            jContentPane = new JPanel(); 
            jContentPane.setLayout(new BorderLayout()); 
            jContentPane.add(getPanel_edicion(), BorderLayout.CENTER); 
        } 
        return jContentPane; 
    } 
    /*********************************************/ 
    private void editando() { 
        card.show(getPanel_edicion(), txt_caja); 
        caja_edicion.setText(valor); 
        caja_edicion.requestFocus(); 
        caja_edicion.selectAll(); 
    }
    private void cancelar() { 
        caja_edicion.setText(valor); 
        card.show(getPanel_edicion(), LABEL); 
    }
    public void confirmar() { 
        valor = caja_edicion.getText(); 
        etiqueta_editable.setText(valor); 
        card.show(getPanel_edicion(), LABEL); 
    } 
    
} 
Reacciones:

2 comentarios: