Java Swing пользовательский текст JEditorPane - PullRequest
4 голосов
/ 13 марта 2009

У меня есть список Объектов (модель), к которым постоянно добавляются (аналогично файлу журнала), и я хотел бы отображать как расширенный текст в JEditorPane (представление). Как я могу склеить их вместе?

http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html#document не дает достаточно информации для использования.

Ответы [ 4 ]

2 голосов
/ 13 марта 2009

Вы можете использовать DefaultStyledDocument вместе с AttributeSet:

SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBold(attr , true);
StyleConstants.setForeground(attr, Color.RED); 
document.insertString(document.getLenght(),"yourstring", attr))
2 голосов
/ 13 марта 2009

Одним из простых решений было бы преобразование каждого объекта в модели в HTML и добавление строк для создания документа HTML, который можно установить в JEditorPane.

0 голосов
/ 19 марта 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());
}

и

scrollRectToVisible(new Rectangle(0, getHeight() - 2, 1, 1));

Предоставление противоречивых результатов с текстовой панелью, иногда с прокруткой не полностью.

0 голосов
/ 13 марта 2009

Создание кастома Abstract Document больно. Вам лучше использовать промежуточную модель, которая прислушивается к изменениям как вашей Object модели, так и документа (с DocumentListener) и обновляет либо модель, либо вид, в зависимости Это работает очень хорошо, если вы работаете во время пользователя (в отличие от обновления Object модели 1000 раз в секунду).

...