Java Swing пользовательский текст JEditorPane

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

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

4 голоса | спросил Pool 13 MaramFri, 13 Mar 2009 03:03:25 +03002009-03-13T03:03:25+03:0003 2009, 03:03:25

4 ответа


0

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

SimpleAttributeSet attr = new SimpleAttributeSet();
StyleConstants.setBold(attr , true);
StyleConstants.setForeground(attr, Color.RED); 
document.insertString(document.getLenght(),"yourstring", attr))
ответил ordnungswidrig 13 MarpmFri, 13 Mar 2009 17:59:17 +03002009-03-13T17:59:17+03:0005 2009, 17:59:17
0

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

ответил Mark 13 MarpmFri, 13 Mar 2009 12:39:18 +03002009-03-13T12:39:18+03:0012 2009, 12:39:18
0

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

ответил Mike Katz 13 MarpmFri, 13 Mar 2009 14:27:51 +03002009-03-13T14:27:51+03:0002 2009, 14:27:51
0

Хорошо, поэтому самым простым подходом было расширение 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));

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

ответил Pool 19 MarpmThu, 19 Mar 2009 17:01:47 +03002009-03-19T17:01:47+03:0005 2009, 17:01:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132