У меня есть список объектов (модель), которые постоянно добавляются (аналогично файлу журнала), и я хотел бы отображать как форматированный текст в JEditorPane (представление). Как я могу склеить их вместе?
Какие классы используются в качестве объектов (моделей)?
- personksuralta  schedule13.03.2009
comment
У меня есть вектор проприетарных объектов, каждый из которых содержит строку и другую информацию. В идеале какой-то пользовательский рендерер будет стилизовать и добавлять к текстовой панели, но я не могу понять, как это связать.
- personPool  schedule13.03.2009
Одним из простых решений было бы преобразование каждого объекта в модели в HTML и добавление строк для создания документа HTML, который можно установить в JEditorPane.
personMarkschedule13.03.2009
comment
Да, это было бы самое простое решение, но я хотел перерисовать данные, когда пользователь хотел изменить свою цветовую схему или отфильтровать данные. Я предполагаю, что все данные могут быть повторно добавлены после любого события.
- personPool; 13.03.2009
comment
Если это так, я думаю, вам лучше использовать JTable. Было бы проще создать TableModel для ваших объектов, чем пытаться создать документ. Затем вы можете применить фильтры к своей модели таблицы и изменить настройки средства преобразования таблицы для цвета и т. д.
- personMark; 13.03.2009
Создание пользовательского Abstract Document болезненно. Вам лучше использовать промежуточную модель, которая прослушивает изменения как в вашей Object Модели, так и в документе (с DocumentListener) и обновляет либо модель, либо представление, в зависимости от. Это работает очень хорошо, если вы работаете в пользовательское время (в отличие от обновления модели Object 1000 раз в секунду).
personMike Katzschedule13.03.2009
comment
Насколько я понимаю, модели для панелей редактора должны быть документами. Если вы не реализуете документ, как можно добавить вашу пользовательскую модель?
- personPool; 13.03.2009
comment
Я хотел использовать один из стандартных StyleDocuments и просто манипулировать текстом и атрибутами.
- personMike Katz; 14.03.2009
Итак, самым простым подходом было расширение JTextPane. Расширенный класс создавал базовый список и управлял им. При изменении формата (например, новые цвета) список полностью переформатирует данные. Единственная реальная проблема заключалась в том, что автопрокрутка не надежна на 100%. Оба:
Container parent = getParent();
// get the parent until scroll pane is found
while (parent != null && !(parent instanceof JScrollPane)) {
parent = parent.getParent();
}
if (parent != null) {
JScrollPane scrollPane = (JScrollPane)parent;
scrollPane.getVerticalScrollBar().setValue(scrollPane.getVerticalScrollBar().getMaximum());
}