![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
В данный момент я пишу свой небольшой редактор HTML. Меня удивило то, что часть стилизации сделать можно легко (шрифт и его размер, например), а остальные теги не пойми как надо добавлять. Точнее, доступна стилизация от StyledEditorKit, а HTMLEditorKit почти ничего нового, похоже, не добавил.
В связи с этим вопрос: как можно по уму добавлять теги в документ и/или проставлять атрибуты выделенному тексту (как я понимаю, теги PRE, H1 и им подобные должны устанавливаться через атрибуты). -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Почему то я сейчас не нахожу, но точьно был тут очень удачный пример на эту тему.
Поройся, наверняка найдёшь ещё кучу интересных примеров. Добавлено через 2 минуты и 48 секунд Попробуй вот эти две ссылки: http://www.java2s.com/Code/Java/Swing-JFC/...-EditorPane.htm http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/Editor.htm |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Я вчерась там рылся и нифига найти не смог. :(
По ссылкам сейчас посмотрю. С некоторыми вещами разобрался самостоятельно, но это в основном стили от StyledEditorKit (например, выравнивание). Плюс умудрился-таки приделать вставку тэга HR. А вот что посложнее - пока никак. Добавлено через 4 минуты и 33 секунды Вторая ссылка не подходит. JFace от Eclipse неприемлем по двум причинам - работаю на IDEA и, что важнее, надо обойтись стандартным JDK плюс свои классы, если потребуется. Добавлено через 8 минут и 10 секунд Первую ссылку я вчера смотрел и сейчас на всякий глянул. Там нет (практически) редактирования. Отображение и в основном с загрузкой по урлу. Добавлено через 11 минут и 28 секунд HR вставляется так:
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Прикольно, спасибо что поделился |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Всегда пожалуйста.
Небольшой оффтоп: если уж начал тему и нашёл решение, то надо им поделиться, чтобы и другие могли его использовать и не начинали новых дублирующих тем. Жаль, что пока не всё поборол. Если надо, могу выложить методу вставки стилизации текста, зашитую внутрях StyledEditorKit, но по каким-то причинам не выведенную наружу для нормального пользования. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
||||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Без проблем, только немного позже (я систему переставил и сейчас ставлю и настраиваю весь софт). Думаю, или сегодня вечером, или завтра выложу описание и пример кода.
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| nornad |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
В принципе, всё довольно просто. У эдиторкитов есть встроенные классы Action'ов. Часть из них уже реализована в виде статических полей эдиторкита. Не знаю, почему, но не всем Action'ам соответствуют статичные поля. Может, на то есть веские причины, а может обычная лень разработчиков... Суть не в этом.
Кроме того, как оказывается, не для всех статичных полей Action'ов есть соответствующие им имена действий, по которым их можно идентифицировать. Вернёмся к тому, как же всё-таки добраться до нужного нам Action'а. У текстовых компонентов JTextPane и JEditorPane есть (у всех, кто наследует JTextComponent) метод getActions(), с помощью которого можно получить массив доступных действий. Если мы собираемся использовать множество различных действий, то имеет смысл запихать содержимое этого массива в мапу. Если нет - ищем нужный и пользуем его.
Теперь покажем, как использовать что-либо из наших замапленных действий (на примере кнопки для тулбара):
Вместо DefaultEditorKit.pasteAction может потребоваться указать свою строковую константу, обозначающую действие (если таковая не объявлена в классе эдиторкита или недоступна снаружи). Узнать значения констант можно, если при добавлении Action'ов в мапу выводить их константы в консоль или любое другое удобное место (я, например, смотрел в дебаге на содержимое мапы). К примеру, для выравнивания по центру надо использовать константу "center-justify". Ещё веселее ситуация, если есть класс для несольких однородных Action (например, для установки стиля шрифта (имени шрифта) или размера текста). В этом случае подобные действия в мапу не попадают. Чтобы можно было использовать эти действия, потребуется самостоятельно создать соответствующие Action'ы (хранить можно хоть отдельно, хоть в той же общей мапе - кому как удобнее). При создании потребуется указать некоторые специфичные для конкретного Action'а параметры. Пример:
P.S. Блин, почти на туториал тянет. Добавлено через 1 минуту и 58 секунд Ещё могу поставить тэг PRE, но это опишу уже позже (там свои заморочки). Добавлено через 4 минуты и 37 секунд Первый и второй примеры не мои - нарыл где-то в сети и подсмотрел. А вот до изврата (третий кусочек и тэг PRE) самому пришлось доходить. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
||||||
|
|||||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Как оказалось, этот способ имеет существенный недостаток. Попробуйте вставить линию. Вставили? Теперь ещё раз. Ничего не видно. Теперь нажмите Enter. Снова ничего не видно. Ещё раз Enter - появилась вторая линия. А теперь самое весёлое - жмите Enter сколько влезет ;) Жуть. Надо бы как-то исправить. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Так-с... с HR разобрался:
Теперь будем думать над остальным. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
А как на счёт выставлать style а не теги HTML? |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Ты имеешь в виду bold/italic или шрифт/его размер?
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: 2 Всего: 3 |
Но не size="" внутри тега font a style="font-size: 14 px". |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Такого я пока не умею. Но постепенно кое-что откапывается.
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Так-с... Вот как можно поставить тэги PRE/Hn (или font style="font-size: 14 px"):
Метод имеет свои недостатки, т.к. необходимо вручную определять наложение тэгов и разруливать коллизии. Хотя, я не уверен, что в официальной реализации тех же болд-италик коллизии уже разруливаются. Надо будет как-нибудь проверить. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| malah |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 28.10.2006 Репутация: нет Всего: нет |
Я вас приветствую!
Прочитал тему и заинтересовался, ведь скоро самому бакалавра сдавать, суть похожа, но конь не валялся Есть вот такая статейка тут . А вот у меня какой вопрос: редактору передается HTML код, но не простой.... а именно в нем есть не простой тег(специальная конструкция), который запрещает редактировать текст внутри себя. Т.Е. необходимо чтобы этот текст отображался в JTextPane, но его нельзя было изменять, а все остальное можно... Кроме этого требуется ввести свой атрибут, с той же целью, но чтоб его можно было добавлять в обычные теги. Как сделать ума не приложу, может кто сможет мне помочь... С JAVA пока очень слабо знаком, читать в инсте будут только осенью :( |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
На форумах на Sun'е я находил что-то про то, как добавить парсеру свой тэг. Я там до сих пор копаюсь, так что ежели снова увижу - дам ссылку.
Суть теории - сделать объект своего тэга на основе неизвестного, добавить в парсер и зарегистрировать его там. Насчёт перехвата обработки тэга не скажу, но возможность должна быть. P.S. Вообще у меня сложилось впечатление, что визуальный редактор HTML на жабе делать почти никто не умеет. Ну практически совершенно нет в сети информации. Добавлено через 2 минуты и 2 секунды На бакалавра сдавать в конце будущего учебного года? Время, в принципе достаточно, чтобы нормально разобраться. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| malah |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 28.10.2006 Репутация: нет Всего: нет |
Если бы, десятого мая (ЭТОГО ГОДА) нужно сдать в деканат тему и план... |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
malah, посмотри тут - что-то про нестандратные тэги.
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| nornad |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Два способа вставки гиперссылки:
1. используя insertHTML()
2. используя механизм стандартных тэгов эдиторкита (предпочтительнее)
P.S. Не сочтите гиперссылки за рекламу - просто я у себя тестил так, а придумывать что-то другое лень. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
||||
|
|||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Пока что не могу победить закавыку с добавлением гиперссылки (или другого тэга со схожей структурой).
Заключается закавыка в том, что если перед добавлением курсор стоял в конце документа, то после добавления тэга не получается написать ничего за ним. Всё, что будете вводить, будет добавляться внутрь этого тэга. А вот как выйти за его пределы?.. Кстати, при добавлении списков схожая проблема - новый текст будет добавляться в первый и единственный элемент списка. Сейчас пытаюсь сделать так, чтобы по нажатию Enter добавлялся новый элемент списка, но потом будет проблема определения, надо ли завершить список. И снова вернёмся к проблеме выхода за пределы последнего тэга. В общем, как-то странно Сановцы реализовали эту поделку... То ли они хтмл не любят, то ли лень им было нормально всё сделать... -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
С установкой фона в редакторе интересная история.
Можно, конечно, утсановить с помощью setBackground(), но тогда цвет установится у компонента, а не в хтмле. Попытки установить при помощи задания атрибутов ни к чему хорошему не приводят - либо не ставится, либо внутрь body вставляется параграф, содержащий ещё один body, у которого и будет проставлен цвет фона. Сегодня нашёл на форумах Sun вариант установки фона через внутренности документа. Фон устанавливается прекрасно. Одна проблема - "отваливается" остальное, например, отображение списков. В конце концов, я решил проблему радикально при помощи топора, зубила и напильника:
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| nornad |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Сегодня я расскажу, как работать с ненумерованными списками.
Вот как можно добавить список в редактор:
bulAction нужен для того, чтобы вставлять список на уровне тэга BODY, а ulAction - на уровне тэга LI (чтобы была возможность делать вложенные списки). Если вам потребуется иметь возможность вставлять списки в другие тэги (например, в P), то потребуются соответствующие экшены. Вообще, на мой взгляд, реализовали сановцы это дело довольно отвратно. Идея, может быть, изначально и была великолепной, но вот реализация... Если вы ещё не догадались о чём, я - поясню. Допустим, у нас есть хтмл вида
и мы желаем вставить список в текущую позицию, которая соответствует пробелу внутри тэга Р. Используем "стандартный" вариант экшена с указанием в качестве родительского тэга BODY. И что же мы получаем? Вот что:
Несколько неожиданно, не правда ли? Но это ещё не всё. Мало просто добавить список в JTextPane. Для того, чтобы по нажатию Enter добавлялся новый элемент списка ("умолчальное" поведение сановской поделки - перевод строки), надо отлавливать нажатие клавиши, проверять, где мы находимся (в каком тэге) и производить магические пассы. Вот пример, который приближает работу списка к том, что мы привыкли видеть в большинстве редакторов:
-------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
||||||||
|
|||||||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
С отступами нашёл способ через стиль атрибута, но есть загвоздка - работает это дело на уровне стилей текста в компоненте, а в хтмл не попадает.
Если у кого-нибудь есть идеи, как сделать нормально - милости просим. Я пытался делать через хтмл-атрибут style, но ничего не вышло - компонент просто проигнорировал установку атрибута. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 6 Всего: 31 |
Вот код для организации отступов. Жаль, что нормального способа (чтобы он отражался в хтмле) я пока не нашёл.
Добавлено через 3 минуты и 58 секунд Думаю, на этом пока и закончу. Вопрос помечу решённым, т.к., в принципе, основные цели достигнуты. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
| jecl |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 12.10.2007 Репутация: нет Всего: нет |
Привет!
Есть такой вопрос. Как сказать JTextPane игнорировать незнакомые теги? Например, сохранил я из опен офиса свой дукумент в хтмл, и пытаюсь отобрахить его в JTextPane. При запуске машина пишит и ничего не выводится. А загвоздка в теге типа <META HTTP-EQUIV='CONTENT-TYPE' CONTENT='text/html; charset=utf-8'>. После их удаления, все ок. спс. Это сообщение отредактировал(а) jecl - 19.3.2008, 19:09 |
|||
|
||||
| filipp76 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 4.4.2007 Где: Украина, Киев Репутация: 1 Всего: 1 |
Меня интересует добавление гиперссылок, использовал первый метод из двух предложенных, все хорошо но при клике на гиперссылку ничего не открываеться )), как сделать чтоб ссылка открывалась в браузере по умолчанию? (Сафари, Опера и т.д.)
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |