【问题标题】:Architecture for displaying dynamic data in real time实时显示动态数据的架构
【发布时间】:2011-04-11 00:32:50
【问题描述】:

执行摘要:使用 Swing 实时显示线程安全的动态数据有哪些合理的架构选择?

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

我会说我是 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 中显示其他信息。我可以阅读 JCoolWhatever 并在其中填充数据。但在我开始走这条路之前,我想了解其他架构选择。

方法 1:使用 SwingWorkers 抓取数据并将其粘贴到位于我的 FrameView 子类中的 JWhatever 中。

方法二:???

...

我们想要:

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

(2) 交互能力,特别是下钻能力,因为数据太多了

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

【问题讨论】:

  • “摘要信息”和“向下钻取”究竟是什么意思?摘要只是不同类型消息的数量吗?或者您的消息是否有更多结构并且您需要总结它们(例如订单中的份额数量)?
  • 摘要信息可以是交易程序列表、它们的当前仓位和当前损益 (PnL)。 “向下钻取”可能是点击交易程序,触发在另一个窗格中显示其所有交易。这只是一个例子。

标签: java multithreading user-interface swing swingworker


【解决方案1】:

管理分层数据复杂性的一种常用方法是使用可折叠树。在整个 NetBeans IDE 中使用,org.netbeans.swing.outline.Outline 是一个特别通用的实现。 NetBeans 在几个窗口中使用它,包括项目、导航器、文件、服务等。因为它派生自javax.swing.JTable,所以可以使用通常的Editors and Renderers 机制。文章Announcing the new Swing Tree Table 展示了如何使用它来建模文件系统。虽然org-netbeans-swing-outline.jar 包含在IDE 中,但它可以单独使用。

附录:

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

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

【讨论】:

    【解决方案2】:

    JIDE Grids 有几种类型的分层表。我只使用了树表。 “层次表(示例 1)”屏幕截图似乎与您想要的非常接近:

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 2013-06-06
      • 2013-08-20
      相关资源
      最近更新 更多