JTextField crea celdas al cambiar el tamaño de la ventana

Iniciado por aangrymasther, 26 Enero 2018, 09:01 AM

0 Miembros y 1 Visitante están viendo este tema.

aangrymasther

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?

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);
}
}

Probablemente el 99% de lo que digo sea incorrecto

rub'n

#1
Hola,
Este método produce el issue, repinta mas JTextfield
Código (java) [Seleccionar]

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



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 (java) [Seleccionar]

package foro;

import javax.swing.*;
import java.awt.*;

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

   }
}

class VentanaTexto extends JPanel{

   private JTextField textField = new JTextField(20);
   public VentanaTexto() {

       setLayout(new GridBagLayout());
       setBorder(BorderFactory.createTitledBorder("Testing"));
       add(textField);
   }
//    public void paintComponent(Graphics g){ //se generan muchos JTextField
//        super.paintComponent(g);
//        JTextField texto = new JTextField(20);
//        texto.setLocation(0,500);
//        add(texto);
//    }
}
public class AWTUserWriting {

   public static void main(String ...agrs) throws ClassNotFoundException, UnsupportedLookAndFeelException, InstantiationException, IllegalAccessException {
       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
       new AWTUserWriting();
       new Frame();
   }
}



rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen