Привет, у меня есть несколько вопросов/проблем.
Мне нужно создать небольшую программу для редактирования текста. (Выбранный) текст должен быть стилем. Жирный, курсив, подчеркнутый, выравнивание по центру справа-слева. Это прекрасно работает. Я использовал определенные действия StyleEditorKit.
Моя проблема в том, что эти действия запускаются с помощью кнопок на панели jtoolbar и jmenuitems в jmenu/jmenubar.
Таким образом, есть два элемента click для выделения текста жирным шрифтом, два элемента для выделения текста курсивом и так далее. Если щелкнуть один элемент (например, кнопку на панели инструментов), элемент jmenui также должен быть выбран/активирован. Но как я могу это осознать?
Моя идея состоит в том, чтобы проверить выделенный текст (реализован CaretListener). Если текст выделен жирным шрифтом => установите кнопку и пункт меню активными. Но как я могу получить, если selectedText выделен жирным/курсивом и т. д.?
Я думаю, что для этого есть дерево StyledDocument с листьями. Но как я могу получить это дерево? как я могу получить листья?
Это мои первые шаги:
jTextPane1.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
Highlight[] h = jTextPane1.getHighlighter().getHighlights();
for(int i = 0; i < h.length; i++) {
System.out.println(h[i].getStartOffset());
System.out.println(h[i].getEndOffset());
String selectedText = jTextPane1.getSelectedText();
StyledDocument styleddoc = (StyledDocument) jTextPane1.getDocument();
System.out.println(styleddoc);
}
}
});
Но я получаю только javax.swing.text.DefaultStyledDocument@5098cb76
Как я могу перебрать дерево и получить элементы листьев/жирным или курсивом?
Спасибо
But if i select my whole text it returns false...
— я думаю, вы можете перебирать каждый отдельный символ выделенного текста. Все символы должны быть жирными. Ну, если он не включен, то вы не сможете нажать кнопку. Вы не делаете кнопку включенной или выбранной. Вы меняете Действие. 11.05.2016it returns false if the caret ends up after the last character.
Верно, потому что курсор предназначен для следующего символа, а не для предыдущего символа. Как я уже несколько раз предлагал, теперь нужно проверять каждый символ в выделенном тексте по отдельности! Поэтому вам нужно получить информацию из документа. Сначала вы получаете Элемент для конкретного персонажа, затем вы получаете Атрибуты от Элемента. 11.05.2016