Java - JTextField completar de otros 2 JTextField

 
Vista:
sin imagen de perfil
Val: 31
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

JTextField completar de otros 2 JTextField

Publicado por Dante Miguel (11 intervenciones) el 26/03/2020 03:09:50
Buenas noches.

Tengo un formulario, donde tengo dos JTextField - Uno es el nombre y el otro es el apellido.

Básicamente, lo que quiero hacer, es en un tercer JTextField, se vaya creando un "codigouser" q va a ser las primeras 3 letras del nombre y las primeras 3 letras del apellido, la idea es que a medida que vas completando el nombre y el apellido, el 3er JTextField se vaya completando.

Espero que me puedan guiar, si es que se puede hacer.

Desde ya, muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 2.268
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

JTextField completar de otros 2 JTextField

Publicado por Kabuto (568 intervenciones) el 26/03/2020 12:08:17
Hola.
Claro que se puede hacer.

Una forma de hacerlo es implementar un KeyListener a los dos campos de nombre y apellido.
La interfaz KeyListener se encarga de "escuchar" las pulsaciones de teclado. Así cada vez que se teclee algo en los campos nombre y apellido, lo podremos captar y actuar en consecuencia.

Podemos hacer que cada vez que el usuario haya terminado de pulsar una tecla (KeyReleased), actualizamos el campo de codigouser con los datos existentes en los campos nombre y apellido. Los pasos lógicos a seguir serían:
- recoger lo que tiene el campo nombre en una variable

- recoger lo que tiene el campo apellido en otra variable.

- Con eso datos intentaremos construir un nuevo String de forma dinámica.
Para ello nos conviene crear un objeto de la clase StringBuilder.

- Con un bucle FOR leemos los caracteres que tiene el campo nombre y los vamos añadiendo al String que estamos construyendo.
Tenemos que leer un máximo de 3 caracteres, así que la condición del bucle FOR tiene que tener en cuenta ese máximo, o bien, la longitud del String nombre, ya que al principio tendrá menos de 3 caracteres.

- Con otro bucle FOR, hacemos lo mismo con el apellido.

- Por último, enviamos el String que hemos construido al campo de CodigoUsuario.

Siguiendo estos pasos, se consigue que cada vez que se pulse una tecla se actualice el campo de código. Y además los caracteres de nombre y apellido que vamos a coger, siempre salen en el orden correcto.
Si por ejemplo el usuario primero escribe el apellido, y luego el nombre, el código se irá construyendo en el orden correcto.

Intenta completar tu código basándote en lo que he comentado. Si te equivocas o te atascas, mejor. Es la oportunidad de hacer preguntas concretas aquí en el foro y aprender.

De todos modos, te dejo un código que he hecho yo.
Crea una GUI sencilla e incluye una clase anidad que implementa la interfaz KeyListener.
Esta clase es la que sigue los pasos que he descrito para crear el Listener que le añadiremos a los campos de nombre y apellido.

Pregunta si algo no lo entiendes, pero insisto, mejor si te peleas primero intentando hacer tu propio código.
Un saludo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
public class CodUser extends JFrame{
 
	JTextField campoNombre;
	JTextField campoApell;
	JTextField campoCodigo;
 
	public CodUser() {
		//Inicializamos controles
		campoNombre = new JTextField(8);
		campoNombre.addKeyListener(new CrearCodigo());
		campoApell = new JTextField(8);
		campoApell.addKeyListener(new CrearCodigo());
		campoCodigo = new JTextField(8);
		campoCodigo.setEditable(false);
 
		//Construimos interfaz
		JPanel panelSuperior = new JPanel();
		panelSuperior.add(new JLabel("Nombre: "));
		panelSuperior.add(campoNombre);
		panelSuperior.add(new JLabel("Apellido: "));
		panelSuperior.add(campoApell);
		panelSuperior.setBorder(BorderFactory.createEmptyBorder(20, 30, 10, 30));
 
		JPanel panelInferior = new JPanel();
		panelInferior.add(new JLabel("Código Usuario: "));
		panelInferior.add(campoCodigo);
		panelInferior.setBorder(BorderFactory.createEmptyBorder(10, 30, 20, 30));
 
		setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		add(panelSuperior);
		add(panelInferior);
 
		setTitle("Codigo Usuario");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}
 
	class CrearCodigo implements KeyListener {
 
		@Override
		public void keyTyped(KeyEvent e) { }
 
		@Override
		public void keyPressed(KeyEvent e) { }
 
		@Override
		public void keyReleased(KeyEvent e) {
			//Recogemos datos
			String nombre = campoNombre.getText();
			String apell = campoApell.getText();
 
			//Construiremos un nuevo String para el codUser
			StringBuilder codUser = new StringBuilder();
			//Cogemos los primeros caracteres del nombre. Máximo 3
			for (int i = 0; i < nombre.length() && i < 3; i++)
				codUser.append(nombre.charAt(i));
			//Lo mismo con el apellido.
			for (int i = 0; i < apell.length() && i < 3; i++)
				codUser.append(apell.charAt(i));
 
			//Actualizamos el campo de codigo usuario
			campoCodigo.setText(codUser.toString());
		}
	}
 
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new CodUser();
			}
		});
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 31
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

JTextField completar de otros 2 JTextField

Publicado por Dante Miguel (11 intervenciones) el 26/03/2020 14:55:04
Hola, buen día, magnífica respuesta, bien explicado, y lo voy a implementar.

Te comento, que para salir de paso, lo hice de la siguiente forma, que me dio un resultado bastante cerca de lo que busco(ahora con lo que me pasaste vos, seguro llego al resultado que quiero). Te pongo el pequeño código.

Lo que usé fue el KeyReleased

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void txtDniKeyReleased(java.awt.event.KeyEvent evt) {
    String dniconca = txtDni.getText();
    txtUsuario.setText(dniconca);
}
 
private void txtNombreKeyReleased(java.awt.event.KeyEvent evt) {
    String nombreconca = txtNombre.getText().substring(0, 3);
    txtUsuario.setText(nombreconca + txtDni.getText());
}
 
private void txtApellidoKeyReleased(java.awt.event.KeyEvent evt) {
    String apellidoconca = txtApellido.getText().substring(0, 3);
    txtUsuario.setText(txtNombre.getText().substring(0, 3).toUpperCase() + apellidoconca.toUpperCase() + txtDni.getText());
}

En este caso, uso, las primeras 3 letras del nombre, las primeras 3 letras del apellido y el DNI completo, para crear el "USUARIO".... como verás, se redunda de un JTextField a otro, pero eso es para crear el "efecto" de "se actualiza a medida que voy typeando". Acepto todo tipo de críticas constructivas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar