2012-03-15 3 views
0

У меня есть пользовательский JComponent, который выполняет много операций рисования.Как распечатать форматированную строку RTF в JLabel?

Они также включают drawStrings для текстовых абзацев, но теперь Id нравится форматировать текст (в отдельном окне с jtextpane или другим RTF-редактором) (жирный шрифт, размер шрифта, выравнивание, шрифт-цвет, списки) и показывать это форматированный текст в моем собственном компоненте.

Id хотел сделать это без bufferedimages, потому что если у меня есть большой JComponent полный с изображениями я хотел бы получить ошибку переполнения (RAM)

Что-то вроде с AttributedString могли бы работать, но как?

Я не знаю, как получить RTF-текст из JTextPane (или, если есть лучший редактор плз скажите мне) и обратить его в «paintComponent (Graphics г)» метод ,

Редактор просто используется для форматирования текста легко, а не для презентации (что делается с моим собственным компонентом)

Может кто-нибудь мне помочь, пожалуйста?


Спасибо за вашу помощь,

так я создать AttributeString, а затем применить RTF-formattings в нем?

Знаете ли вы, как я могу выдавить информацию RTF в адекватную AttributedString? например функция, которая преобразует форматированный текст в AttributedString как

public AttributedString getAttrString(String plainRTF){ 
    ... 
} 

Большое спасибо

+0

есть ссылка на мой вопрос в примере реализации такой функции. Он немного упрощен, но должен дать вам общую идею. – tenorsax

ответ

0

Вы можете разобрать структуру базового Document, чтобы добраться до реальных элементов. Каждый Element имеет набор атрибутов, с которыми вы можете получить доступ: getAttributes().

Вы можете построить AttributedString, используя document.getText() и применяя соответствующие стили, используя метод AttributedString.addAttribute().

Затем нарисуйте строку на Graphics. Проверьте это tutorial, который использует TextLayout для рендеринга AttributedString.

Посмотрите на styledDocumentToAttributedString() метод here. Возможно, он уже реализует то, что вам нужно; это зависит от сложности вашей строки. Кроме того, может оказаться полезным этот discussion.