Pregunta

Estoy construyendo una pequeña aplicación Java y el uso de oscilación en NetBeans. El uso de NetBeans ventana de diseño, he creado un JFrame con un JPanel interior.

Ahora quiero añadir dinámicamente algunos JTextFields al JPanel. Escribí algo así:

Vector textFieldsVector = new Vector();
JTextField tf;
int i = 0;
while (i < 3) {
    tf = new JTextField();
    textFieldVector.add(tf);
    myPanel.add(tf); //myPanel is the JPanel where I want to put the JTextFields
    i++;
}
myPanel.validate();
myPanel.repaint();

Pero no pasa nada:. Cuando corro la aplicación, el JFrame muestra con los JPanel en el interior, pero no lo hacen los JTextFields

Soy un novato total en escribir aplicaciones Java gráficas, por lo que seguramente me falta algo muy simple, pero no puedo ver lo que.

¿Fue útil?

Solución

En la GUI Netbeans, establecer el controlador de distribución a algo así como GridLayout o FlowLayout (sólo para las pruebas). Puede hacer esto de ir al editor de interfaz gráfica de usuario, al hacer clic en su panel, y luego a la derecha del ratón y seleccionando un diseño.

Una vez que haya cambiado a un diseño diferente, vaya a las propiedades y modificar las propiedades de diseño. Para el GridLayout, usted quiere asegurarse de que tiene 3 celdas de la cuadrícula.

En lugar de myPanel.validate (), trate myPanel.revalidate ().

La forma más canónica de hacer esto es crear una costumbre JPanel (sin usar el editor de interfaz gráfica de usuario) que establece su propio controlador de distribución, rellena sí con componentes, etc A continuación, en el editor NetBeans GUI, arrastrar y soltar que JPanel personalizados en el editor de interfaz gráfica de usuario. Matisse es ciertamente capaz de manejar el tiempo de ejecución de la modificación de los componentes Swing, pero eso no es la forma normal de utilizarlo.

Otros consejos

Ha sido un tiempo desde que he hecho algo de movimiento, pero creo que necesita recordar pack () para contar la trama a la redistribución de sus componentes

EDIT: Sí, sabía que había pasado demasiado tiempo desde que hice Swing. He golpeado para arriba el siguiente código que funciona como se espera sin embargo y añade los campos de texto ...

    JFrame frame = new JFrame("My Frame");
    frame.setSize(640, 480);
    JPanel panel = new JPanel();
    panel.add(new JLabel("Hello"));
    frame.add(panel);
    frame.setLayout(new GridLayout());
    frame.pack();
    frame.setVisible(true);
    Vector textFieldVector = new Vector();
    JTextField tf;
    int i = 0;
    while (i < 3) {
        tf = new JTextField();
        textFieldVector.add(tf);
        panel.add(tf); //myPanel is the JPanel where I want to put the JTextFields
        i++;
    }
    panel.validate();
    panel.repaint();

Su bucle while es erróneo. i nunca se incrementa por lo que su creación ventana está en un bucle sin fin y el consumo de CPU debe estar al 100% hasta que aborte el programa. Además, la interfaz gráfica de usuario debe estar completamente no responde cuando se ejecuta el programa.

La forma habitual de usar GroupLayout es añadir un componente a un Group. GroupLayout mantiene una referencia al Container es responsable de (que tiene sentido). No se debe agregar el componente al panel sin restricciones.

No utilice GroupLayout con el nuevo componente (añadido dinámicamente). No se mostrará.

Sólo tiene que utilizar el método de .setVisible() JTextField:

JTextField tf = new JTextField() ;
tf.setVisible(true) ;
panel.add(tf) ;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top