tiempo resultado paneles mostrar ejecucion desde crear componentes como cambiar boton actualizar abrir java swing

resultado - ¿Cómo agrego paneles dinámicamente a otros paneles en tiempo de ejecución en Java?



como mostrar resultado en un jlabel java (6)

Estoy tratando de entrar a Java nuevamente (han pasado algunos años). Nunca hice una codificación GUI en Java. He estado usando Netbeans para comenzar con esto.

Al usar winforms en C # en el trabajo, utilizo un control de usuario para construir partes de mi UI y agregarlas a los formularios de forma dinámica.

He estado tratando de usar JPanels como JPanels en C #. JPanel un formulario BlurbEditor llamado BlurbEditor . Esto tiene algunos controles simples en él. Estoy tratando de agregarlo a otro panel en tiempo de ejecución en un evento de botón.

Aquí está el código que pensé que funcionaría:

mainPanel.add(new BlurbEditor()); mainPanel.revalidate(); //I''ve also tried all possible combinations of these too //mainPanel.repaint(); //mainPanel.validate();

Esto lamentablemente no está funcionando. ¿Qué estoy haciendo mal?


Al igual que con todos los códigos de swing, no olvides llamar a cualquier actualización de GUI dentro del hilo de envío del evento. Consulte esto para saber por qué debe hacer actualizaciones como esta

// Do long running calculations and other stuff outside the event dispatch thread while (! finished ) calculate(); SwingUtilities.invokeLater(new Runnable(){ public void run() { // update gui here } }


Pruebe mainPanel.invalidate() y luego, si es necesario, mainPanel.validate() . También podría valer la pena verificar que estás haciendo esto en el hilo de envío del evento, de lo contrario tus resultados serán irregulares y (generalmente) no deterministas.


mainPanel.add (nuevo BlurbEditor ());

mainPanel.validate ();

mainPanel.repaint ();


Swing/AWT componentes Swing/AWT generalmente tienen que tener un diseño antes de agregar cosas; de lo contrario, la UI no sabrá dónde colocar los subcomponentes.

BFreeman ha sugerido BorderLayout que es uno de los más fáciles de usar y te permite "pegar" cosas en la parte superior, inferior, izquierda, derecha o centro del elemento principal.

Hay otros como FlowLayout que es como un área de textarea : agrega componentes de izquierda a derecha en la parte superior del elemento primario y se envuelve en una nueva fila cuando llega al final.

El GridBagLayout que siempre ha sido notorio por ser imposible de descifrar, pero te proporciona casi todo el control que necesitarías. Un poco como esas tablas HTML que solíamos ver con combinaciones extrañas de atributos rowspan, colspan, ancho y alto, que nunca parecían verse como querías.


Estaba lidiando con un problema similar, quería cambiar el panel contenido en un panel sobre el tiempo de ejecución
Después de algunas pruebas, nuevas pruebas y muchos fallos en mi pseudo-algoritmo es este:

parentPanel: contiene el panel que queremos eliminar
childPanel: panel que queremos cambiar
parentPanelLayout: el diseño de parentPanel
editParentLayout (): construye parentPanel con diferentes childPanel y NEW parentPanelLayout cada vez

parentPanel.remove(childPanel); editParentLayout(); parentPanel.revalidate(); parentPanel.repaint();


Me lo imaginé. Los comentarios debajo de la respuesta aceptada aquí lo explican: JTable dinámicamente agregado que no se muestra

Básicamente acabo de agregar lo siguiente antes de mainPanel.add ()

mainPanel.setLayout(new java.awt.BorderLayout());