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

Java 实时显示动态数据的体系结构,java,multithreading,user-interface,swing,swingworker,Java,Multithreading,User Interface,Swing,Swingworker,执行摘要:对于使用Swing实时显示线程安全的动态数据,有哪些可靠的体系结构选择 详细信息:我最近完成了用Java编写多线程自动交易平台的工作。我之所以称之为“平台”,是因为我通过对虚拟对象进行分类,使实现新的和多个交易程序变得非常容易。我已经封装了交易代码,以便可以在Swing应用程序、控制台应用程序或其他任何应用程序中使用它。目前,我正在使用Swing前端运行它 我会说我是一个挥杆滥用者,而不是使用者。不是故意的。开发一个现代GUI并将其与动态数据集成需要一种特殊的思维方式,而动态数据是我尚

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

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

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

私有类PrintTraderMsgTask扩展SwingWorker{
@凌驾
受保护的Void doInBackground(){
串味精;
而(!isCancelled()){
msg=m_data.m_TraderMsgs.poll();
如果(msg!=null){
发布(msg);
}
}
返回null;
}
@凌驾
受保护的无效进程(列表块){
for(字符串项:块){
m_view.displayTraderString(项目);
}
}
}
这里的数据元素只是

public ArrayBlockingQueue<String> m_TraderMsgs;
公共阵列锁定队列m_TraderMsgs;
任何数量的“交易者”(独立的线程)都可能在任何时候插入消息。我使用的另一种类型的数据对象是
ConcurrentHashMap
。我收集订单日志、交易记录、价格和其他类型的数据。因此,我在这里试图描绘的是一个与时间相关的大量数据集合,太多了,无法一次全部显示出来

我真正想做的是显示摘要信息,并能够向下钻取。现在我在
jtextarea
中显示消息,在一些
JTextFields
中显示其他信息。我可以读懂JCool上的任何东西,然后把数据塞进里面。但在我开始这条路之前,我想了解其他架构选择

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

方法2

我们希望:

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

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


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

管理分层数据复杂性的一种常见方法是可折叠树。在整个NetBeans IDE中使用,是一个特别通用的实现。NetBeans在多个窗口中使用它,包括项目、导航器、文件、服务等。由于它派生自
javax.swing.JTable
,所以通常的机制是可用的。本文展示了如何使用它来建模文件系统。尽管IDE中包含了
org netbeans swing outline.jar
,但它可以单独使用

增编:

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

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

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


您所说的“摘要信息”和“深入了解”到底是什么意思?摘要只是不同类型消息的数量吗?或者您的消息是否有更多的结构,您需要对其进行汇总(例如,订单中的股票数量)?汇总信息可以是交易程序、当前头寸和当前损益(PnL)的列表。“向下钻取”可能是点击交易程序,触发在另一个窗格中显示其所有交易。这只是一个例子。
public ArrayBlockingQueue<String> m_TraderMsgs;