Java JEditorPane заменяет выделенный текст гиперссылкой

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

Проблема в том, что я хочу, чтобы пользователь мог выбрать текст и превратить его в ссылку. Я нашел множество примеров, делающих это при щелчке правой кнопкой мыши с использованием положения мыши для выбора элемента в HTMLDocument, но я также хочу, чтобы это можно было сделать с помощью сочетания клавиш.

В результате поиска и экспериментов я пришел к следующему способу:

public void createLink() {
    HTMLEditorKit kit = new HTMLEditorKit();
    try {
        String text = jEditorPane1.getSelectedText();
        jEditorPane1.replaceSelection("");
        kit.insertHTML((HTMLDocument) jEditorPane1.getDocument(),
                       jEditorPane1.getCaretPosition(), 
                       "<a href=\"" + text + "\">" + text + "</a>", 
                       0, 0, HTML.Tag.A);
    } catch (BadLocationException | IOException ex) {
        Logger.getLogger(Editor.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Но что-то в этом просто кажется уродливым, я понятия не имею, какие угловые случаи могут вызвать проблемы, такие как попытка поместить ссылку в ссылку или перекрытие ссылок. Есть ли более разумное решение, которое сопоставляет выделенный текст с элементами в html-документе?


person BodenI    schedule 18.06.2015    source источник
comment
java-sl.com/tip_autocreate_links.html   -  person StanislavL    schedule 19.06.2015


Ответы (1)


HTMLEditorKit поддерживает только HTML 3.2, поэтому вы, вероятно, столкнетесь с несколькими проблемами. Если вы настраиваете таргетинг на HTML-теги после версии 3.2, вам лучше подойдет JavaFX HTMLEditor. Если вы не хотите использовать JavaFX, существуют альтернативные реализации Swing, такие как SHEF. Если вам нужны полные примеры с нуля, попробуйте книгу O'Reilly HTML Editor Kits (старый, но поучительный).

Из документации HTMLEditorKit:

Поддержка по умолчанию предоставляется этим классом, который поддерживает HTML версии 3.2 (с некоторыми расширениями) и переходит на версию 4.0.

Самой ранней версией HTML, которую можно было проверить по схеме XML, была XHTML 1.0, поэтому с HTMLEditorKit будет сложно найти все исключения. Возможно, вам повезет с интеграцией JTidy.

person vallismortis    schedule 18.06.2015