2010-09-11 5 views
2

Résumé exécutif: Quels types de choix d'architecture sonore sont disponibles pour l'affichage de données dynamiques thread-safe en temps réel à l'aide de Swing?Architecture pour l'affichage de données dynamiques en temps réel

Détails: J'ai récemment terminé l'écriture d'une plate-forme de trading automatisée multithread en Java. Je dis "plate-forme" parce que j'ai rendu très facile la mise en œuvre de nouveaux et multiples programmes de trading en subdivisant les objets virtuels. J'ai encapsulé le code de trading afin que je puisse l'utiliser dans une application Swing, une application console, ou autre. Actuellement, je l'utilise avec un frontal Swing.

Je dirais que je suis un abuseur Swing plutôt que l'utilisateur. Pas exprès. Il faut un type particulier de réflexion pour développer une interface graphique moderne et l'intégrer à des données dynamiques que je n'ai pas encore apprises. Je connais les bases mêmes, telles que la mise à jour de l'écran uniquement dans le fil d'expédition de l'événement. Voici comment j'afficher les messages (de ma SingleFrameApplication sous-classe):

private class PrintTraderMsgTask extends SwingWorker<Void, String>{ 
    @Override 
    protected Void doInBackground() { 
     String msg; 
     while(!isCancelled()){ 

       msg = m_data.m_TraderMsgs.poll(); 
       if(msg!=null){ 
        publish(msg); 
       } 
     } 
     return null; 
    } 

    @Override 
    protected void process(List<String> chunks) { 
    for (String item: chunks){ 
     m_view.displayTraderString(item); 
    } 
    } 
} 

L'élément de données est ici juste

public ArrayBlockingQueue<String> m_TraderMsgs; 

qui un certain nombre de « Traders » (threads séparés) peuvent adhérer messages à à tout moment. L'autre type d'objet de données que j'ai utilisé est un ConcurrentHashMap. Je collectionne les carnets de commandes, les registres de transactions, les prix et d'autres types de données. Donc, l'image que j'essaie de peindre ici est une grande collection de données dépendant du temps, trop pour tout afficher à la fois.

Ce que je voudrais vraiment faire, c'est afficher des informations de synthèse et avoir la possibilité de faire un zoom avant. En ce moment je montre des messages dans JTextAreas et d'autres informations dans certains JTextFields. Je peux lire sur JCoolWhatever et les données de données là-bas. Mais avant de commencer cette route, je veux apprendre d'autres choix d'architecture.

Méthode 1: Utilisez SwingWorkers pour saisir des données et le coller dans JWhatever qui réside dans ma FrameView sous-classe.

Méthode 2: ???

...

Nous voulons:

(1) modularité raisonnable .. assez pour ajouter/supprimer des éléments sans ruiner notre soirée

(2) la capacité d'interaction, la capacité drill-down spécifique car il y a tellement de données

Merci ... l'affichage en temps réel d'un ensemble complexe de données dynamiques est un sujet intéressant et j'espère que nous pourrons avoir une bonne discussion.

+1

Que voulez-vous dire par « l'information sommaire » et « drill down »? Le résumé est-il simplement le nombre de différents types de messages? Ou vos messages ont-ils plus de structure et vous avez besoin de les résumer (par exemple le nombre de partages dans les commandes)? –

+0

Les informations récapitulatives peuvent être une liste des programmes de trading, leur position actuelle et le profit/perte actuel (PnL). "Drill down" pourrait être un clic sur le programme de trading déclenchant l'affichage de tous ses métiers dans un autre volet. Ceci est juste un exemple. – Pete

Répondre

2

Une approche commune pour gérer la complexité des données hiérarchiques est un arbre pliable. Utilisé dans l'EDI NetBeans, org.netbeans.swing.outline.Outline est une implémentation particulièrement polyvalente. NetBeans l'utilise dans plusieurs fenêtres, y compris Projets, Navigateur, Fichier, Services, etc. Parce que dérive de javax.swing.JTable, le mécanisme habituel Editors and Renderers est disponible. L'article Announcing the new Swing Tree Table montre comment il est utilisé pour modéliser un système de fichiers. Bien que org-netbeans-swing-outline.jar soit inclus avec l'EDI, il peut être utilisé isolément.

Addendum:

« Exploration » pourrait être cliquer sur le programme d'échange déclenchant l'affichage de tous ses métiers dans un autre volet.

JSplitPane est utile dans ce contexte: une sous-fenêtre peut contenir l'arbre, tandis que les autres écrans étendus détails du noeud/ligne sélectionnée.

1

JIDE Grids possède plusieurs types de tables hiérarchiques. J'ai seulement utilisé la table de l'arbre. Le « Tableau hiérarchique (Exemple 1) » capture d'écran semble être assez proche de ce que vous voulez:

alt text

Questions connexes