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);
}
}
Hola,
Este método produce el issue, repinta mas JTextfield
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
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();
}
}