Hola A todos, estoy aprendiendo este maravilloso y complejo lenguaje. Estoy siguiendo un video curso en el cual se encuentra el siguiente ejercicio: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package graficos;
/** * * @author gabrieldrv * @version 1.0 */ public class FocoEvento {
/** * @param args the command line arguments */ public static void main(String[] args) { MarcoFoco miMarco = new MarcoFoco(); miMarco.setVisible(true); miMarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
}
class MarcoFoco extends JFrame{
public MarcoFoco(){ setTitle("Eventos de foco en componentes"); setLocation(600, 250); setSize(750, 350); PanelFoco miLamina = new PanelFoco(); add(miLamina); }
}
class PanelFoco extends JPanel{
@Override public void paintComponent(Graphics g){ super.paintComponent(g); setLayout(null); //Al invalidar el Layout se debe definir posiscion y tamaño para loc compoenntes cuadroTexto1 = new JTextField(); cuadroTexto1.setBounds(120, 10, 150, 20); add(cuadroTexto1); cuadroTexto2 = new JTextField(); cuadroTexto2.setBounds(120, 50, 150, 20); add(cuadroTexto2); EventoFoco focoComponente = new EventoFoco(); cuadroTexto1.addFocusListener(focoComponente); }
private class EventoFoco implements FocusListener{
@Override public void focusGained(FocusEvent fe) { System.out.println("Se ha ganado el foco del cuadro de texto 1"); }
@Override public void focusLost(FocusEvent fe) { String correo = cuadroTexto1.getText(); boolean check = false; for(int i = 0; i < correo.length(); i++){ if(correo.charAt(i) == '@'){ check = true; } } if(check){ System.out.println("La dirección es válida"); } else{ System.out.println("La dirección es inválida"); } }
Estoy reproduciendo fielmente el ejercicio planteado. Se trata a cerca de los eventos de foco de componentes. El problema puntualmente esta dado en la linea; String correo = cuadroTexto1.getText();
dentro del método focusLost. porque no funciona (parece no hacer nada) si en el video se realiza de la misma forma y funciona. Para verificar esto he probado diversas variantes de capturar el texto de un cuadro y el otro en diversos puntos, pero he podido comprobar que efectivamente es esta linea la que aparentemente se esta pasando por alto. Como ultima aclaración uso Netbeans 8.1 con SDK 1.8 y en el curso se usa Eclipse con SDK 1.7. Desde ya gracias a todo por su atención. Saludos cordiales y aguardo su respuesta.-
El método paintComponent se ejecuta cada vez que el sistema pinta el panel. Estas creando componentes que se van sobreescribiendo cada vez. Los componentes debes crearlos una única vez, por ejemplo en el constructor.
Hola A todos, estoy aprendiendo este maravilloso y complejo lenguaje. Estoy siguiendo un video curso en el cual se encuentra el siguiente ejercicio:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package graficos;
import java.awt.Graphics;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
*
* @author gabrieldrv
* @version 1.0
*/
public class FocoEvento {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
MarcoFoco miMarco = new MarcoFoco();
miMarco.setVisible(true);
miMarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MarcoFoco extends JFrame{
public MarcoFoco(){
setTitle("Eventos de foco en componentes");
setLocation(600, 250);
setSize(750, 350);
PanelFoco miLamina = new PanelFoco();
add(miLamina);
}
}
class PanelFoco extends JPanel{
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
setLayout(null);
//Al invalidar el Layout se debe definir posiscion y tamaño para loc compoenntes
cuadroTexto1 = new JTextField();
cuadroTexto1.setBounds(120, 10, 150, 20);
add(cuadroTexto1);
cuadroTexto2 = new JTextField();
cuadroTexto2.setBounds(120, 50, 150, 20);
add(cuadroTexto2);
EventoFoco focoComponente = new EventoFoco();
cuadroTexto1.addFocusListener(focoComponente);
}
private class EventoFoco implements FocusListener{
@Override
public void focusGained(FocusEvent fe) {
System.out.println("Se ha ganado el foco del cuadro de texto 1");
}
@Override
public void focusLost(FocusEvent fe) {
String correo = cuadroTexto1.getText();
boolean check = false;
for(int i = 0; i < correo.length(); i++){
if(correo.charAt(i) == '@'){
check = true;
}
}
if(check){
System.out.println("La dirección es válida");
} else{
System.out.println("La dirección es inválida");
}
}
}
JTextField cuadroTexto1;
JTextField cuadroTexto2;
}
Estoy reproduciendo fielmente el ejercicio planteado. Se trata a cerca de los eventos de foco de componentes. El problema puntualmente esta dado en la linea;
String correo = cuadroTexto1.getText();
dentro del método focusLost. porque no funciona (parece no hacer nada) si en el video se realiza de la misma forma y funciona. Para verificar esto he probado diversas variantes de capturar el texto de un cuadro y el otro en diversos puntos, pero he podido comprobar que efectivamente es esta linea la que aparentemente se esta pasando por alto. Como ultima aclaración uso Netbeans 8.1 con SDK 1.8 y en el curso se usa Eclipse con SDK 1.7. Desde ya gracias a todo por su atención. Saludos cordiales y aguardo su respuesta.-