Архитектура для отображения динамических данных в режиме реального времени - PullRequest
2 голосов
/ 11 сентября 2010

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

Подробности : У меня естьнедавно завершил написание многопоточной, автоматической торговой платформы на Java.Я говорю «платформа», потому что я упростила реализацию новых и нескольких торговых программ путем подкласса виртуальных объектов.Я инкапсулировал торговый код, чтобы я мог использовать его в приложении Swing, консольном приложении или где-либо еще.В настоящее время я использую его с интерфейсом 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;

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

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

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

Метод 2 : ???

...

Мы хотим:

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

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

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

Ответы [ 2 ]

2 голосов
/ 11 сентября 2010

Один из распространенных подходов к управлению сложностью иерархических данных - это сворачиваемое дерево. Используемая в среде IDE NetBeans, org.netbeans.swing.outline.Outline является особенно универсальной реализацией. NetBeans использует его в нескольких окнах, включая «Проекты», «Навигатор», «Файл», «Службы» и т. Д. Так как он основан на javax.swing.JTable, доступен обычный механизм Editors and Renderers . В статье Объявление новой таблицы Swing Tree показано, как она используется для моделирования файловой системы. Хотя org-netbeans-swing-outline.jar входит в состав IDE, его можно использовать отдельно.

Добавление:

«Детализация вниз» может быть нажатием на торговую программу, вызывающую отображение всех ее сделок в другой панели.

JSplitPane полезен в этом контексте: одна панель может содержать дерево, а другая отображает расширенные сведения о выбранном узле / строке.

1 голос
/ 19 сентября 2010

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

alt text

...