2012-08-13 10 views
5

Sto costruendo un'app desktop con Swing con funzionalità simili a Twitter. Ho una pagina "feed" in cui vengono visualizzati i "tweet".Riorganizzare dinamicamente il layout con Swing

Ho i "tweet" in un JPanel e voglio visualizzare dinamicamente nuovi che arrivano inserendo nuovi "tweet" nella parte superiore dello JPanel e spostando quelli più vecchi in basso. Stavo cercando di farlo con MigLayout usando jpanel.add(tweet, "cell 0 0, wrap") ma questo non ha funzionato come previsto e per farlo visualizzare con il layout che volevo ho dovuto chiamare jpanel.revalidate().

Questo non è l'ideale in quanto potrebbero esserci molti tweet che arrivano ogni secondo e il ridisegno del pannello può essere piuttosto lento. Posso comunque aggiungere nuovi "tweet" alla parte superiore del pannello senza ridisegnare?

+1

È possibile combinare queste due risposte per aggiornare un 'TableModel' come mostrato nell'API' SwingWorker'. – trashgod

risposta

10

Sebbene layout dinamici sono possibili, come illustrato here e here, userei un una colonna JTable con un TableModel che riflette la Pushdown pila effetto desiderato, forse uno che ha un interno Queue<Tweet>. Il rendering di JTable è efficiente e il componente funziona bene in un JScrollPane.

10

Risposta breve, no. Seriamente, prenditi un momento per pensare alla domanda. "Voglio aggiungere nuovi contenuti, ma non aggiornare lo schermo", come pensate che sia possibile?

Alla fine dovrai eseguire qualche tipo di pittura. La domanda è quanto spesso.

Tuttavia ...

Con alcune semplici tecniche (e modellazione) è possibile "coalizzarsi" gli aggiornamenti in lotti, permettendo al ridisegno di essere più significativo (piuttosto che la pittura ogni nuovo tweet, si dipinge un lotto) .

È possibile utilizzare qualcosa come un SwingWorker per fare questo. Fondamentalmente il publish tweet e consentire il metodo process per occuparsi di aggiungere i blocchi in seguito.

Problemi correlati