Este es el Ejemplo #07 del Topic: Programación Gráfica en Java.
Generalmente las IDE’s de desarrollo en Java no traen incluidos el evento de cambio de texto en las cajas de entrada, por lo menos los que he usado no los tienen, ni Netbeans que es mi preferida tampoco lo trae, debido a eso para lograr tal efecto vamos a implementar una función JTexFieldChanged haciendo uso de DocumentEvent y DocumentListener del que derivarán los eventos deseados:
... private void setJTexFieldChanged(JTextField txt) { DocumentListener documentListener = new DocumentListener() { @Override public void changedUpdate(DocumentEvent documentEvent) { printIt(documentEvent); } @Override public void insertUpdate(DocumentEvent documentEvent) { printIt(documentEvent); } @Override public void removeUpdate(DocumentEvent documentEvent) { printIt(documentEvent); } }; txt.getDocument().addDocumentListener(documentListener); } private void printIt(DocumentEvent documentEvent) { DocumentEvent.EventType type = documentEvent.getType(); if (type.equals(DocumentEvent.EventType.CHANGE)) { } else if (type.equals(DocumentEvent.EventType.INSERT)) { //Método a ejecutar } else if (type.equals(DocumentEvent.EventType.REMOVE)) { //Método a ejecutar } } ...
Código de Ejemplo:
package beastieux.gui; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; /** * * @author beastieux */ public class Ejm07_EventoTextFieldChanged extends JFrame{ private JTextField txtEjemplo; private JLabel lblEjemplo; public Ejm07_EventoTextFieldChanged() { txtEjemplo=new JTextField(); lblEjemplo=new JLabel(); this.add(txtEjemplo); this.add(lblEjemplo); this.setLayout(new GridLayout(1,1)); this.setSize(400, 80); setJTexFieldChanged(txtEjemplo); } private void setJTexFieldChanged(JTextField txt) { DocumentListener documentListener = new DocumentListener() { @Override public void changedUpdate(DocumentEvent documentEvent) { printIt(documentEvent); } @Override public void insertUpdate(DocumentEvent documentEvent) { printIt(documentEvent); } @Override public void removeUpdate(DocumentEvent documentEvent) { printIt(documentEvent); } }; txt.getDocument().addDocumentListener(documentListener); } private void printIt(DocumentEvent documentEvent) { DocumentEvent.EventType type = documentEvent.getType(); if (type.equals(DocumentEvent.EventType.CHANGE)) { } else if (type.equals(DocumentEvent.EventType.INSERT)) { txtEjemploJTextFieldChanged(); } else if (type.equals(DocumentEvent.EventType.REMOVE)) { txtEjemploJTextFieldChanged(); } } private void txtEjemploJTextFieldChanged() { //Copiar el contenido del jtextfield al jlabel this.lblEjemplo.setText(this.txtEjemplo.getText()); } public static void main(String args[]) { Ejm07_EventoTextFieldChanged obj = new Ejm07_EventoTextFieldChanged(); obj.setVisible(true); } }
Pueder ir al artículo principal:
Códigos Sencillos hechos en Java
El evento ya existe en netbeans.
Puedes usar KeyPressed, KeyReleased o KeyTyped
El evento ya existe en netbeans
El evento ya existe en netbeans
puedes usar KeyTyped, KeyReleased o KeyPressed
Hola Muchachis, despues de varias horas de busqueda para encontrar una forma practica y poco boluminosa para detectar el cambio de texto en un jLabel (java) me encontre con la ultima citacion de un colega en la Web: http://www.coderanch.com/t/346037/GUI/java/detect-change.
El codigo es mas o menos asi:
jLabel_1.addPropertyChangeListener(«text», new PropertyChangeListener() {
//Donde «text» no es mas que un parametro, no está referido al texto del jLabel.
@Override
public void propertyChange(PropertyChangeEvent evt) {
//Codiogo necesario.
}
});
En mi caso particular, lo plantee de la siguiente forma:
jLabel_1.addPropertyChangeListener(«text», new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if(bandera == false){
bandera = true;
jLabel_1.setText( jLabel_.getText() + » Texto que deseo agregar » );
}
else
bandera = false;
}
});
Explicacion:
Debido a que es un evento, como una interrupcion, decidi utilizar una bandera para que no se genere un bucle infinito de deteccion de cambio de texto.
Debido a que mi objetivo fue que al detectar un cambio en el texto de jLabel, le agregase el texto deseado al final. Entonces, si por defecto la bandera es false; cuando la rutina que modifica el texto lo hace, se detona el evento, se pone en true la bandera y luego se modifica el texto del jLabel, detonandose el evento nuevamente, pero como encuentra a la bandera en true, solo la pone en false y se termina el bucle.
Saludos y espero que a alguien le sirva!
Muchas GRACIAS REALLY …. gracias ….
Yo tengo mas de un JtextField … como podria detectar si uso la funcion con mas de un jTextField como se cual JTextFiel se cambio el contenido
POr ejemplo
setJTexFieldChanged(txtCodigo);
setJTexFieldChanged(txtNombre);
setJTexFieldChanged(txtDescripcion);
COmo se cual es el que cambio
Debes hacer un evento para cada objeto
Muchas Gracias, me sirvió mucho, Excelente ayuda.
Supongamos que ya le puse el DocumentListener pero ahora surge la necesidad de remover tal evento al campo de texto en plena ejecución, cual sería el codiogo para remover?…. alguíen me puede ayudar… gracias