代码之家  ›  专栏  ›  技术社区  ›  Pete

实时显示动态数据的体系结构

  •  2
  • Pete  · 技术社区  · 14 年前

    执行摘要 :对于使用Swing实时显示线程安全的动态数据,有哪些可靠的体系结构选择?

    细节 :我最近完成了用Java编写多线程自动交易平台的工作。我之所以说“平台”,是因为我通过对虚拟对象进行分类,使得实现新的和多个交易程序变得非常容易。我已经封装了交易代码,这样就可以在Swing应用程序、控制台应用程序或其他任何应用程序中使用它。目前我正在运行一个摆动前端。

    我想说我是一个挥杆滥用者而不是使用者。不是故意的。开发一个现代化的GUI并将其与动态数据集成需要一种特殊的思维方式,而动态数据我还没有学会。我知道最基本的,比如只在事件调度线程中更新屏幕。下面是我如何显示消息(从我的 SingleFrameApplication 子类):

     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);
         }
        }
    }
    

    这里的数据元素只是

    public ArrayBlockingQueue<String> m_TraderMsgs;
    

    ConcurrentHashMap . 我收集订单日志、交易记录、价格和其他类型的数据。因此,我在这里试图描绘的是大量与时间相关的数据,太多了,无法一次全部显示出来。

    我真正想做的是显示摘要信息,并有能力向下钻取。现在我正在中显示消息 JTextAreas 以及其他一些信息 JTextFields

    方法1 :使用swingworker获取数据并将其粘贴到 JWhatever 它存在于我的 FrameView 子类。

    方法2 : ???

    ...

    (1) 合理的模块化。。足够添加/删除元素而不破坏我们的夜晚

    谢谢。。。实时显示一组复杂的动态数据是一个有趣的课题,我希望我们能进行一个很好的讨论。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Bill the Lizard    12 年前

    管理层次数据复杂性的一种常见方法是可折叠树。在整个NetBeans IDE中使用, org.netbeans.swing.outline.Outline javax.swing.JTable ,一如既往 Editors and Renderers 机构可用。文章 Announcing the new Swing Tree Table 演示如何使用它对文件系统进行建模。尽管 org-netbeans-swing-outline.jar

    附录:

    “向下钻取”可能是点击交易程序触发在另一个窗格中显示其所有交易。

    JSplitPane 在这种情况下很有用:一个窗格可能包含树,而另一个窗格显示选定节点/行的展开详细信息。

        2
  •  1
  •   Geoffrey Zheng    14 年前