2011-07-27 36 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