Доброе утро, дорогие, У меня есть JTextPane с типом контента 'text/html'. В этой JTextPane я загружаю Библию, где стихи разделяются тегом. Я хочу, чтобы определить выбранный вариант, когда пользователь нажимает на часть документа. С этого момента я могу получить выделенный текст с помощью метода getSelectedText(). Но результат не содержит теги исходного документа, которые могут помочь мне определить начало или конец стикета, в котором содержится выделенный текст.Получить теги выделенного текста в JTextPane
Я не могу сделать простой поиск, потому что метод getSelectedText() возвращает текст без тега. Например, результат
Abraham eut pour descendant <g v=\"Isaac\">Isaac</g>.
будет «Авраамский эвр, потопите потомка Исаака». Итак, если я сделаю простой поиск, я ничего не найду. Итак, я хочу знать, как получить тег выделенного текста, чтобы я мог определить стили выбранного текста.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
public class VersetBibliques {
Rectangle[] rects = new Rectangle[2];
HTMLEditorKit kit;
HTMLDocument htmlDoc;
private JPanel getContent() {
rects[0] = new Rectangle();
rects[1] = new Rectangle();
JPanel panel = new JPanel(new GridLayout(1, 0, 10, 0));
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
panel.add(new JScrollPane(getTextPane()));
return panel;
}
private JTextPane getTextPane() {
JTextPane textPane = new JTextPane();
kit = new HTMLEditorKit();
htmlDoc = new HTMLDocument();
textPane.setEditable(false);
textPane.setEditorKit(kit);
textPane.setDocument(htmlDoc);
textPane.setContentType("text/html");
textPane.setBackground(Color.WHITE);
textPane.setFont(new Font("Arial Bold", Font.ITALIC, 38));
try {
kit.insertHTML(htmlDoc, 0, text, 0, 0, null);
} catch (BadLocationException e) {
System.out.println("bad location: " + e.getMessage());
} catch (Exception ex) {
ex.printStackTrace();
}
textPane.addMouseListener(selector);
Style s = htmlDoc.addStyle("logical", null);
StyleConstants.setFontFamily(s, "georgia");
StyleConstants.setFontSize(s, 58);
s = htmlDoc.addStyle("lineSpace", null);
StyleConstants.setLineSpacing(s, 0.25f);
htmlDoc.setLogicalStyle(0, htmlDoc.getStyle("logical"));
return textPane;
}
public static void main(String[] args) {
VersetBibliques test = new VersetBibliques();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(test.getContent());
f.setSize(600, 400);
f.setLocation(200, 200);
f.setVisible(true);
}
private MouseListener selector = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
try {
JTextPane textPane = (JTextPane) e.getComponent();
int start = textPane.getSelectionStart() - 10;
int end = textPane.getSelectionEnd() + 10;
textPane.setSelectionEnd(end);
textPane.setSelectionStart(start);
String selectedText = textPane.getSelectedText();
System.out.println("text content : " + selectedText);//Il faudra faire le test avec Jean 11:35
System.out.println("start: "+start+"- end:"+end);
} catch (Exception ex) {
ex.printStackTrace();
}
}
};
String text = "<mt>Évangile selon Matthieu</mt>\n"
+ "<c><cn>1</cn>\n"
+ "<mt>Naissance et enfance de Jésus</mt><s>La généalogie de Jésus</s><r>(<ref v=\"LUK3.23-38\">Lc 3.23-38</ref>)</r><v><vn>1</vn>Voici la généalogie de Jésus-Christ, de la descendance de <g v=\"David\">David</g> et d'<g v=\"Abraham\">Abraham</g>. </v>"
+ "<p/><v><q><vn>2 </vn>Abraham eut pour descendant <g v=\"Isaac\">Isaac</g>.<br/>Isaac eut pour descendant <g v=\"Jacob\">Jacob</g>.<br/>Jacob eut pour descendant <g v=\"Juda\">Juda</g> et ses frères.</q></v>"
+ "<v><q><vn>3 </vn>De Thamar, Juda eut pour descendant Péretz et Zérah.<br/>Péretz eut pour descendant Hetsrom.<br/>Hetsrom eut pour descendant Aram.</q></v>"
+ "<v><q><vn>4 </vn>Aram eut pour descendant Aminadab.<br/>Aminadab eut pour descendant Nahchôn,<br/>Nahchôn eut pour descendant Salma.</q></v>"
+ "<v><q><vn>5 </vn>De Rahab, Salma eut pour descendant Booz.<br/>De Ruth, Booz eut pour descendant Obed.</q></v></c>";
}
Заранее спасибо
Большое спасибо. Это именно то, что я хочу. А что касается использования моей собственной разметки, не могли бы вы дать мне хорошую ссылку на управление ViewFactory и XMLVievFactory. – Doukya
http://java-sl.com/xml_editor_kit.html – StanislavL
Как только проблема решена, выберите ответ. Это важно для того, чтобы это место работало. ;) – Sharcoux