Java - Problema con JLabel/JTextField

 
Vista:

Problema con JLabel/JTextField

Publicado por Irmin (1 intervención) el 24/02/2021 01:30:28
Hola buenas noches a todos
Tengo un problema que me viene llevando tiempo ya y no puedo dar el por que
Por ejemplo , ahora les adjunto el codigo y una foto del error , tengo un JFrame con su JPanel, dentro del JPanel creo algunos JTextField con sus JLabel, y en el lugar que los coloque con el setbounds me los muestra con error , cuando en el curso que estoy haciendo los muestra perfectamente, no entiendo el porque, si alguno sabe la solucion me ayudaria bastante ya que me vengo quemando la cabeza hace unos dias..

Codigo:

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
import java.awt.*;
 
import javax.swing.*;
 
public class eventoFoco {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		MarcoFoco marco=new MarcoFoco();
		marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
 
	}
 
}
 
class MarcoFoco extends JFrame{
 
	public MarcoFoco(){
 
		setBounds(500,300,700,400);
		setTitle("Ejercicio de evento foco 1");
		add (new LaminaMarcoFoco());
		setVisible(true);
 
 
	}
}
 
class LaminaMarcoFoco extends JPanel{
 
	public LaminaMarcoFoco(){
 
 
 
	}
	public void paintComponent(Graphics g){
 
		super.paintComponent(g);
 
		campotexto1=new JTextField();
		campotexto2=new JTextField();
		campotexto3=new JTextField();
		campotexto1.setBounds(120, 10, 200, 20);
		campotexto2.setBounds(120, 50, 200, 20);
		campotexto3.setBounds(120, 90, 200, 20);
		etiq1=new JLabel("Usuario");
		etiq2=new JLabel("Contraseña");
		etiq3=new JLabel("E-mail");
		etiq1.setBounds(70, 10, 150, 20);
		etiq2.setBounds(40, 50, 150, 20);
		etiq3.setBounds(70, 90, 150, 20);
		add(campotexto1);
		add(campotexto2);
		add(campotexto3);
		add(etiq1);
		add(etiq2);
		add(etiq3);
 
	}
 
	private JTextField campotexto1, campotexto2, campotexto3;
	private JLabel etiq1, etiq2, etiq3;
}

Imagen del error :

errorjlabel


No se porque salen esos cuadraditos extras y por que copia doble algunos jlabel, encima que a veces los copia en diferentes lados
Esto claramente impide el buen funcionamiento del programa y en otros ejemplos directamente es mucho peor
Desde ya , saludos y 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: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con JLabel/JTextField

Publicado por Kabuto (1381 intervenciones) el 27/02/2021 03:11:26
Hola.
Te recomiendo que busques otro curso.

Eso de introducir los componentes Swing usando el método paintComponent(), no lo había visto nunca, y me extraña que funcione bien, pues cada vez que se añade algo, la interfaz se "repinta" automáticamente y de ahí que salgan cosas raras y duplicadas.

Busca otro curso, y que enseñe a usar los distintos layouts que ofrece Swing. Nada de layouts nulos y dar posiciones absolutas con setBounds.

Un ejemplo rápido de como construir una interfaz similar a la que propones, sin paintComponent y combinando un par de layouts para que los campos de texto queden alineados verticalmente

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
import java.awt.FlowLayout;
 
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
 
public class EjemploSwing extends JFrame{
 
	private JTextField campotexto1, campotexto2, campotexto3;
	private JLabel etiq1, etiq2, etiq3;
 
	public EjemploSwing() {
 
		etiq1 = new JLabel("Usuario");
		etiq2 = new JLabel("Contraseña");
		etiq3 = new JLabel("E-mail");
 
		campotexto1 = new JTextField(14);
		campotexto2 = new JTextField(14);
		campotexto3 = new JTextField(14);
 
		JPanel panelPrincipal = new JPanel();
		panelPrincipal.setLayout(new BoxLayout(panelPrincipal, BoxLayout.Y_AXIS));
		panelPrincipal.add(new PanelCampoTexto(etiq1, campotexto1));
		panelPrincipal.add(new PanelCampoTexto(etiq2, campotexto2));
		panelPrincipal.add(new PanelCampoTexto(etiq3, campotexto3));
		panelPrincipal.setBorder(new EmptyBorder(15,25,15,65));
 
		add(panelPrincipal);
 
		setTitle("Ejemplo Swing");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}
 
	private class PanelCampoTexto extends JPanel {
 
		public PanelCampoTexto(JLabel etiq, JTextField campo) {
			setLayout(new FlowLayout(FlowLayout.RIGHT));
			add(etiq);
			add(campo);
			setBorder(new EmptyBorder(15,15,15,15));
		}
	}
 
 
	public static void main(String[] args) {
		new EjemploSwing();
	}
 
}
imagen_2021-02-27_031037
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