Foro de elhacker.net

Programación => Java => Mensaje iniciado por: aangrymasther en 26 Enero 2018, 09:01 am



Título: JTextField crea celdas al cambiar el tamaño de la ventana
Publicado por: aangrymasther en 26 Enero 2018, 09:01 am
Buenas, e estado estudiando un poco de diseño de interfaces de usuario en Java y me a surgido un problema, el caso esta en que al añadir a un JPanel una entrada de texto (Con JTextField) y cambiar el tamaño de la ventana, se crean varias celdas mas, cuando tengo entendido que esto no debería ser asi, ¿se os ocurre donde esta el error?

Código:
import java.awt.*;

import javax.swing.*;
public class AWTUserWriting {

public static void main(String args[]){

Frame frame = new Frame();

}

}

class Frame extends JFrame{
public Frame(){
setTitle("Hola Usuario");
setSize(300, 400);
setResizable(true);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
VentanaTexto text = new VentanaTexto();
add(text);

}
}

class VentanaTexto extends JPanel{

public void paintComponent(Graphics g){
super.paintComponent(g);
JTextField texto = new JTextField(20);
texto.setLocation(0,500);
add(texto);
}
}


Título: Re: JTextField crea celdas al cambiar el tamaño de la ventana
Publicado por: rub'n en 27 Enero 2018, 05:29 am
Hola,
Este método produce el issue, repinta mas JTextfield
Código
  1.  
  2. public void paintComponent(Graphics g){  
  3.  super.paintComponent(g);
  4.  JTextField texto = new JTextField(20);
  5.  texto.setLocation(0,500);
  6.  add(texto);
  7. }
  8.  
  9.  

Pero aquí tienes un JTextfield con el administrador de diseño  setLayout(new GridBagLayout()); ver línea 26, muchas veces resulta mejor usar un administrador de diseño para la alineación de los componentes


Código
  1. package foro;
  2.  
  3. import javax.swing.*;
  4. import java.awt.*;
  5.  
  6. class Frame extends JFrame{
  7.    public Frame(){
  8.        setTitle("Hola Usuario");
  9.        setSize(300, 400);
  10.        setResizable(true);
  11.        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  12.        VentanaTexto text = new VentanaTexto();
  13.        add(text);
  14.        setLocationRelativeTo(null);
  15.        setVisible(true);
  16.        pack();
  17.  
  18.    }
  19. }
  20.  
  21. class VentanaTexto extends JPanel{
  22.  
  23.    private JTextField textField = new JTextField(20);
  24.    public VentanaTexto() {
  25.  
  26.        setLayout(new GridBagLayout());
  27.        setBorder(BorderFactory.createTitledBorder("Testing"));
  28.        add(textField);
  29.    }
  30. //    public void paintComponent(Graphics g){ //se generan muchos JTextField
  31. //        super.paintComponent(g);
  32. //        JTextField texto = new JTextField(20);
  33. //        texto.setLocation(0,500);
  34. //        add(texto);
  35. //    }
  36. }
  37. public class AWTUserWriting {
  38.  
  39.        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  40.        new AWTUserWriting();
  41.        new Frame();
  42.    }
  43. }
  44.  
  45.