2011-07-27 40 views
3

我每隔400毫秒接收一次來自網絡的浮點數據,並將其放入4個浮點數組中。餘存儲在另一個陣列的那些陣列,所以我有:保存數據的列表

float[][] datas = {data1, data2, data3, data4}; 
FloatData floatData = new FloatData(datas); 
model.addFloatData(floatData); 

我的模型具有FloatData對象的列表和FloatData對象具有方法:

float[] getFloatData(int index); 

返回浮點數的數組,我想。這個數組用於在JPanel上繪製。 所以在painComponent我做到以下幾點:

for(FloatData floatData : listOfFloatData) { 
floatData.draw(g, index); 
} 

我的問題是,我可以使用什麼樣的列表爲listOfFloatData,因爲它會每400毫秒中的paintComponent方法來更新和閱讀? 此外,我想知道一個方便的方式將listOfFloatData從模型傳遞到我的視圖?我正在考慮使用一個持有listOfFloatData的單例對象,因爲這個列表將在幾個組件中使用? 謝謝。

+0

你有問題嗎? – woliveirajr

+1

對於您的計算機,400毫秒是相當長的時間。使用標準Java List實現(例如java.util.ArrayList),您是否遇到過任何類型的性能問題?或者在知道存在任何性能問題之前嘗試優化列表? –

+0

試圖優化並提供一些建議,如果有更好的方法。時間也可能是200毫秒。我還沒有嘗試過,因爲我不知道我會如何將它傳遞給我的觀點。 – LionO

回答

2

將模型從視圖中解耦出來,方法是將數據存儲在AbstractTableModel的子類中。 JTable所使用的flyweight pattern在渲染方面效率更高,您可以將您的模型修改爲配置權限。

附錄:如果您在另一個線程上收集數據,請使用例如SwingWorker,您可以publish()數據的延遲非常低,而您的process()實施更新模型事件調度線程。有一個例子here

+0

好的,謝謝你的好建議。 – LionO