2012-08-13 21 views
5

Estoy construyendo una aplicación de escritorio con Swing con una funcionalidad similar a la de Twitter. Tengo una página de "feed" donde se muestran "tweets".Reorganizar dinámicamente el diseño con Swing

Tengo los "tweets" en un JPanel y quiero mostrar dinámicamente los nuevos ingresando nuevos "tweets" en la parte superior del JPanel y moviendo los más viejos hacia abajo. Intenté hacer esto con MigLayout usando jpanel.add(tweet, "cell 0 0, wrap"), sin embargo, esto no funcionó como estaba previsto y para que se muestre con el diseño que quería tuve que llamar al jpanel.revalidate().

Esto no es ideal, ya que podría haber muchos tweets en cada segundo y redibujar el panel puede ser bastante lento. ¿De todos modos puedo agregar nuevos "tweets" a la parte superior del panel sin redibujar?

+1

Puede combinar estas dos respuestas para actualizar un 'TableModel' como se muestra en la API' SwingWorker'. – trashgod

Respuesta

10

Aunque los diseños dinámicos son posibles, como se muestra here y here, que haría uso de una sola columna JTable con un TableModel que refleja la pila de pila efecto deseado, tal vez uno que tiene un interior Queue<Tweet>. La representación de JTable es eficiente y el componente funciona bien en un JScrollPane.

10

Respuesta corta, no. En serio, tómate un momento para pensar en la pregunta. "Quiero agregar contenido nuevo, pero no actualizar la pantalla", ¿qué tan factible crees que es?

Eventualmente tendrá que realizar algún tipo de pintura. La pregunta es con qué frecuencia.

Sin embargo ...

Con algunas técnicas sencillas (y modelado) puede "unirse" los cambios en lotes, permitiendo que el repinte a ser más significativo (en lugar de pintar cada nuevo tweet, se pinta un lote) .

Puede usar algo como SwingWorker para hacer esto. Básicamente publish el tweet y permite que el método process se ocupe de agregar los fragmentos después.

Cuestiones relacionadas