Реализация графического интерфейса просмотра журнала с помощью C # (или Java) - PullRequest
4 голосов
/ 15 июля 2009

Я пишу программный компонент, который на лету отображает содержимое определенного файла журнала. Подумайте об увеличении tail -f. Это должно быть частью большего графического интерфейса.

Мне было интересно, какой компонент GUI следует выбрать для реализации прокручиваемой области текста, которая должна отображать вывод файла журнала.

Три моих основных требования:

  1. Поиск - позволяет пользователю находить слова в журнале. Подчеркну, что поиск не может быть реализован фильтром . Я хочу перейти к ячейке, содержащей foo в файле журнала без сокрытия соседей, которые не содержат foo, в отличие от фильтрации.
  2. Копировать - он должен позволять легко выбирать и копировать строки (поэтому я исключил решения на основе DataGrid).
  3. Фильтр - он должен позволять мне легко скрывать определенные строки.
  4. Цвета - было бы неплохо иметь возможность иногда использовать определенные цвета (на основе фильтров)

Было бы также неплохо, если бы компонент подчинялся шаблону MVC.

Конечно, можно реализовать все те с помощью регулярной текстовой области только для чтения, но мне было интересно, есть ли что-то проще. Единственная необычная особенность здесь - это фильтрация, после того как вся текстовая область с возможностью поиска кажется мне общим требованием.

Могут быть также приняты Java GUI-решения (их можно использовать и для java-приложений).

BareTail похож на то, что я ищу, но, к сожалению, он не доступен как компонент.

Ответы [ 8 ]

1 голос
/ 16 июля 2009

Это хороший стартовый проект WPF, который у меня есть, он делает подсвечивание при загрузке файла журнала fly и базовом поиске. В прошлом я обнаружил, что поддержание полнотекстового индекса только для поиска в журнале слишком дорого.

http://code.google.com/p/videobrowser/source/browse/#svn/trunk/LogViewer

Для отображения сообщений журнала я использую список просмотра WPF, который является полностью виртуальным и поддерживает все ваши требования.

1 голос
/ 16 июля 2009

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

Копирование строк из сеток должно быть легко достижимо, как только у вас есть возможность выбора нескольких строк, преобразование записей обратно в «необработанные» текстовые строки в некотором методе ToString должно быть намного проще, чем наоборот ,

Поэтому, я думаю, вам действительно следует придерживаться какого-то сеточного подхода. Если это будет Xceed, Infragistics, другие поставщики или встроенный .NET-datagrid ... это другой вопрос.

1 голос
/ 15 июля 2009

Основные понятия для создания такого GUI:

  • GlazedLists ваш друг
  • Так же и JTable
  • Если ваш формат журнала фиксированный / xml, это еще проще.

Вы хотите что-то , подобное Это не совсем открытый исходный код, но я могу поделиться некоторыми его свойствами.

0 голосов
/ 17 июля 2009

Я реализовал нечто подобное, используя JFace TableViewer . Эта статья должна дать вам достойную отправную точку.

0 голосов
/ 17 июля 2009

ObjectListView (оболочка с открытым исходным кодом вокруг .NET WinForms ListView) выполняет поиск и копирование префиксов из коробки (плюс множество других полезных вещей)

Вы можете легко использовать RowFormatter, чтобы назначать цвета конкретным строкам.

Если вы используете версию виртуального списка, вы также можете без труда реализовать фильтрацию. Я использовал его, чтобы применить фильтрацию к спискам более 100 000 элементов, и производительность у меня хорошая (на моем ноутбуке среднего класса).

Полнотекстовый поиск должен быть реализован специально. Есть хуки для поиска по типу событий.

Все это предполагает, что у вас есть какой-то разумный объект модели типа LogEntry для отображения. Если у вас есть только несколько строк текста, то вы сами по себе:)

0 голосов
/ 16 июля 2009

Я бы предложил простую сетку в .NET или Java

0 голосов
/ 16 июля 2009

Просто используйте RichTextBox в .NET / C #

0 голосов
/ 15 июля 2009

Eclipse UI Framework содержит такую ​​консоль, которую вы можете улучшить с помощью текстового поиска, подсветки синтаксиса и т.п. Тем не менее, я думаю, что минимальные плагины RCP, которые вам нужны, будут слишком большими для ваших нужд.

Однако, если вы уже используете Eclipse, это было бы хорошим решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...