2012-08-13 52 views
5

我正在使用與Twitter類似功能的Swing構建桌面應用程序。我有一個顯示「推文」的「feed」頁面。使用Swing動態重新排列布局

我在JPanel中有「推文」,並希望通過在JPanel的頂部放置新的「推文」並向下移動較舊的推文來動態顯示新推文。我試圖用MigLayout通過使用jpanel.add(tweet, "cell 0 0, wrap")來做到這一點,但是這並沒有按預期工作,爲了讓它與我想要的佈局一起顯示,我不得不打電話給jpanel.revalidate()

這並不理想,因爲每秒都會有很多推文,並且重新繪製面板的速度會很慢。無論如何,我可以在不重繪的情況下向面板頂部添加新的「推文」?

+1

您可以結合這兩個答案來更新'SwingWorker' API中顯示的'TableModel'。 – trashgod 2012-08-13 09:59:53

回答

10

雖然動態佈局是可能的,如圖所示herehere,我會使用一列JTableTableModel反映你想要的下推棧效果,也許一個具有內部Queue<Tweet>JTable渲染效率很高,並且該組件在JScrollPane中運行良好。

10

簡短的回答,沒有。認真思考一下這個問題。 「我想添加新內容,但不更新屏幕」,您認爲這有多可行?

最終你將不得不進行某種繪畫。問題是多久。

但是......

有了一些簡單的技術(和建模),您可以「合併」更新成批次,允許重繪要有意義的多(而不是畫每一個新的鳴叫,你畫一個批次) 。

你可以使用像SwingWorker這樣的東西來做到這一點。基本上publish的推文,並允許process方法來處理添加大塊後。