Eventos de foco FocusListener
Un evento de foco es aquel que se desemboca cuando tenemos
seleccionado un determinado espacio de la interface, podemos tener un botón
seleccionado, un marco, un archivo. Supongo que alguna vez habéis rellenado un
formulario en una web, cuando cambias de casilla estas poniendo el foco en la
siguiente casilla.
Para
ello utilizaremos la interface FocusListener, por lo que estaremos obligados a
implementar 2 métodos:
·
focusGained
(FocusEvent e): el elemento adquiere el foco.
·
focusLost
(FocusEvent e): el elemento pierde el foco.
En
caso de no desear implementar los dos disponemos de la clase adaptadora
FocusAdapter.
0.
Necesitaremos dos textfiled , las variables se declaran dentro de
la lámina porque serán internas y de uso interno solo en la lamina
class A_lamina extends JPanel{
public void
paintComponent(Graphics g){//constructor
super.paintComponent(g);
setBackground(Color.DARK_GRAY);
setLayout(null); //establecer diseño por defecto no
cuadro1=new
JTextField();
cuadro2=new
JTextField();
cuadro1.setBounds(100,50,150,20);
cuadro2.setBounds(100,90,150,20);
add(cuadro1);
add(cuadro2);
}
JTextField cuadro1,cuadro2;
}
1.
Ahora generamos una clase interna con el oyente y
ponemos y ponemos el cuadro una como desencadenante.
class A_lamina extends JPanel{
public void paintComponent(Graphics g){//constructor
super.paintComponent(g);
setBackground(Color.DARK_GRAY);
setLayout(null); //establecer diseño por defecto
no
cuadro1=new
JTextField();
cuadro2=new
JTextField();
cuadro1.setBounds(100,50,150,20);
cuadro2.setBounds(100,90,150,20);
add(cuadro1);
add(cuadro2);
cuadro1.addFocusListener(new escucha());
}
JTextField
cuadro1,cuadro2;
private Image foto;
private class escucha implements FocusListener{
public void focusGained(FocusEvent e) {System.out.println("estas
dentro del cuadro 1");}
public void focusLost(FocusEvent
e) {System.out.println("estas
fuera del cuadro 1");}
} }
En la siguiente práctica
realizaremos un marco al que le introduciremos una lámina con una foto de fondo
y en la que pondremos dos cuadros de texto. Para posteriormente generar los
eventos de foco, ratón, teclado
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;
public class
Practica_JText {
public static void main (String[] arg) {
A_marco1 cuadro = new
A_marco1();
cuadro.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class A_marco1 extends JFrame{
public A_marco1() {
setVisible(true);
setBounds(150,
150, 500, 300);
add(new A_lamina());
addWindowListener(new escucha2());
addWindowStateListener(new escucha2());
addKeyListener(new escucha2());
addMouseListener(new escucha2());
}
}
class A_lamina extends JPanel{
public void
paintComponent(Graphics g){//constructor
super.paintComponent(g);
try { //tratamineto de excepciones, haz esto
y si no catch
foto = ImageIO.read(new File("C:\\Users\\dagip\\Desktop\\BOGEER\\imagenes\\JAVA2.jpg"));//ruta relativa
} catch(IOException e) {
JOptionPane.showConfirmDialog(null, "no esta la foto");
}
//escribimos la foto
en nuestra lamina
g.drawImage(foto, 0, 0, null);
setBackground(Color.DARK_GRAY);
setLayout(null); //establecer diseño por defecto no
cuadro1=new
JTextField();
cuadro2=new
JTextField();
cuadro1.setBounds(100,50,150,20);
cuadro2.setBounds(100,90,150,20);
add(cuadro1);
add(cuadro2);
cuadro1.addFocusListener(new escucha());
}
JTextField cuadro1,cuadro2;
private Image foto;
private class escucha
implements FocusListener{
public void
focusGained(FocusEvent e) {System.out.println("estas dentro del cuadro
1");}
public void
focusLost(FocusEvent e) {System.out.println("estas fuera del cuadro
1");}
}
}
class escucha2 implements
WindowListener,WindowStateListener,MouseListener,ActionListener,KeyListener{
public void
windowStateChanged(WindowEvent e) {}
public void
windowActivated(WindowEvent e) {}
public void
windowClosed(WindowEvent e) {}
public void
windowClosing(WindowEvent e) {}
public void
windowDeactivated(WindowEvent e) {}
public void
windowDeiconified(WindowEvent e) {}
public void
windowIconified(WindowEvent e) {}
public void
windowOpened(WindowEvent e) {}
public void
keyPressed(KeyEvent e) {}
public void
keyReleased(KeyEvent e) {}
public void
keyTyped(KeyEvent e) {}
public void
actionPerformed(ActionEvent e) {}
public void
mouseClicked(MouseEvent e) {}
public void
mouseEntered(MouseEvent e) {}
public void
mouseExited(MouseEvent e) {}
public void
mousePressed(MouseEvent e) {}
public void
mouseReleased(MouseEvent e) {}
}
Ejercicio 2 . Ahora generamos otro marco con dos botones y
dos cuadros de texto, y cuando el usuario cambie el foco de un cuadro de texto
al otro nos confirmará si el correo es correcto. Esto último lo podemos hacer gracias algunos métodos de la clase String.
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
public class
Practica27_text {
public static void main (String[] arg) {
//cargar el frame
Marco_1111 x =new Marco_1111();
x.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class Marco_1111 extends JFrame{
public Marco_1111() {
setVisible(true);
setBounds(150,150,800,390);
add(new Lamina_1111());
}
}
class Lamina_1111 extends JPanel{
public
void paintComponent(Graphics g) {
super.paintComponent(g);
//cargar los botones
en el frame
JButton Boton1=new JButton
("cerrar");
JButton Boton2=new JButton
("Abrir");
add(Boton1); add(Boton2);
Boton1.setBackground(Color.GREEN);
Boton1.setBounds(600, 20, 80, 30);
Boton2.setBackground(Color.GREEN);
Boton2.setBounds(600, 55, 80, 30);
// colgar imagen, para
lo que necesitamos un tratamiento de excepciones
try { Foto1=ImageIO.read(new File("C:\\Users\\dagip\\Desktop\\BOGEER\\imagenes\\JAVA2.jpg"));
} catch (IOException e) {
JOptionPane.showConfirmDialog(null, "la foto no esta en la ruta");
}
g.drawImage(Foto1,0,0,null);
c_t1= new JTextField(); c_t2= new JTextField();
c_t1.setBounds(50,50,250,40); c_t2.setBounds(50,100,250,40);
add(c_t1); add(c_t2);
c_t1.addFocusListener(new
EventosDEfoco());
}
JTextField c_t1,c_t2;
Image Foto1;
private class
EventosDEfoco implements FocusListener{
public void
focusGained(FocusEvent e) {}
public void
focusLost(FocusEvent e) {
//para capturar el texto
del cuadro getText()
String Correo = c_t1.getText();
boolean validador_arroba = false;
boolean validador_punto = false;
//ahora vamos a comprobar
si el correo introducido es correcto
for (int i=0;i<Correo.length();i++) {
//recordar que cuando
buscamos una letra serán comillas simples
if (Correo.charAt(i) == '@') {validador_arroba =true;}
if(Correo.charAt(i) == '.') {validador_punto = true;}
}
if(validador_punto==false && validador_arroba==false) {
String
remplazar=JOptionPane.showInputDialog(null, "le falta un punto en su correo", "ejemplo@eeee.es");
c_t1.setText(remplazar); }
else if (validador_arroba==false
&& validador_punto == true) {
JOptionPane.showMessageDialog(null, "repasa si has puesto el @");
}
else if (validador_punto==false
&& validador_arroba == true) {
JOptionPane.showMessageDialog(null, "repasa si has puesto el punto");
}
}
}
}
No hay comentarios:
Publicar un comentario