2011-07-27 3 views
3

Je reçois des données flottantes du réseau toutes les 400 ms que je place dans 4 tableaux de flottant. Je stocker ces tableaux dans un autre tableau, donc j'ai:Liste des données de stockage

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

Mon modèle a une liste d'objets FloatData et l'objet FloatData a la méthode:

float[] getFloatData(int index); 

qui renvoie le tableau de flotteur i vouloir. Ce tableau est utilisé pour peindre sur un JPanel. Ainsi, dans le painComponent je fais ce qui suit:

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

Ma question est quel genre de liste puis-je utiliser pour le listOfFloatData car il sera mis à jour tous les 400 ms et lu dans la méthode paintComponent? Aussi, je voudrais savoir un moyen pratique de passer le listOfFloatData du modèle à ma vue? Je pensais à utiliser un objet singleton contenant le listOfFloatData car cette liste sera utilisée dans plusieurs composants? Merci.

+0

avez-vous des problèmes comme vous l'avez fait? – woliveirajr

+1

400ms est une bonne quantité de temps pour votre ordinateur. Avez-vous eu des problèmes de performance en utilisant les implémentations standard de la liste Java, telles que java.util.ArrayList, ou essayez-vous d'optimiser votre liste avant de savoir qu'il y a un problème de performance? –

+0

Essayer d'optimiser et avoir quelques conseils pour le faire mieux si c'est le cas. L'heure pourrait aussi être de 200 ms. Je ne l'ai pas encore essayé parce que je ne sais pas encore comment je vais le passer à mon avis. – LionO

Répondre

2

Dissocier le modèle de la vue en stockant vos données dans une sous-classe de AbstractTableModel. Le flyweight pattern utilisé par JTable est beaucoup plus efficace au rendu, et vous pouvez modifier votre modèle en tant que mandataires de profilage.

Addendum: Si vous collectez des données sur un autre thread, en utilisant par ex. SwingWorker, vous pouvez publish() les données avec une latence très faible, tandis que votre mise en œuvre process() met à jour le modèle sur le thread d'envoi d'événements . Il y a un exemple here.

+0

Très bien, merci pour vos bons conseils. – LionO