2010-09-11 3 views
2

Резюме: Какие варианты звуковой архитектуры существуют для отображения потокобезопасных динамических данных в реальном времени с использованием Swing?Архитектура для отображения динамических данных в реальном времени

: Я недавно завершил создание многопоточной автоматизированной торговой платформы на Java. Я говорю «платформа», потому что я очень упростил реализацию новых и нескольких торговых программ путем подклассификации виртуальных объектов. Я инкапсулировал торговый код, поэтому я могу использовать его в приложении Swing, консольном приложении или любом другом. В настоящее время я запускаю его с интерфейсом Swing.

Я бы сказал, что я жестокий человек, а не пользователь. Не специально. Для разработки современного графического интерфейса требуется интеграция с динамическими данными, которые мне еще предстоит изучить. Я знаю самые основы, такие как обновление экрана только в потоке отправки событий. Вот как я показывать сообщения (от моего 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; 

которой любое число «Traders» (отдельные нити) могут быть торчащие сообщения в на в любой момент. Другой тип объекта данных, который я использовал, - ConcurrentHashMap. Я собираю журналы заказов, торговые записи, цены и другие виды данных. Таким образом, картина, которую я пытаюсь рисовать здесь, представляет собой большую коллекцию зависящих от времени данных, слишком много для отображения всех сразу.

Что бы я хотел сделать, это отобразить сводную информацию и иметь возможность развернуть. Прямо сейчас я показываю сообщения в JTextAreas и другую информацию в некотором JTextFields. Я могу читать JCool, какие бы то ни было и какие данные были там. Но прежде чем я начну с этой дороги, я хочу узнать о других вариантах архитектуры.

Метод 1: Используйте SwingWorkers, чтобы захватить данные и вставить его в JWhatever который находится в моем FrameView подкласса.

Способ 2: ???

...

Мы хотим:

(1) разумной модульности .. достаточно, чтобы добавить/удалить элементы, не разрушая наш вечер

(2) Возможность взаимодействия, в частности возможности бурить вниз поскольку так много данных

Спасибо ... отображение сложного набора динамических данных в режиме реального времени является интересной темой, и я надеюсь, что мы сможем продолжить хорошее обсуждение.

+1

Что именно вы имеете в виду под «сводной информации» и «развернуть»? Является ли сводка только номерами разных типов сообщений? Или ваши сообщения имеют больше структуры, и вам нужно суммировать их (например, количество акций в заказах)? –

+0

Итоговой информацией может быть список торговых программ, их текущая позиция и текущая прибыль/убыток (PnL). «Дрель» может нажимать на торговую программу, запускающую отображение всех ее сделок на другой панели. Это всего лишь один пример. – Pete

ответ

2

Один общий подход к управлению сложностью иерархических данных - это сбрасываемое дерево. Используемый во всей среде IDE NetBeans, 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 полезен в этом контексте: на одной панели может храниться дерево, а на другом - расширенные детали выбранного узла/строки.

1

JIDE Grids имеет несколько типов иерархических таблиц. Я использовал только таблицу деревьев. «Иерархическая таблица (пример 1)» снимок экрана, кажется, довольно близко к тому, что вы хотите:

alt text

Смежные вопросы