Я пишу программу, которая использует 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-документе?