Я занимаюсь разработкой простого редактора WYSIWYG RTF на Java, и у меня возникла небольшая проблема. Мне нужно иметь возможность синхронизировать переключатели выбора стиля (например, полужирный, курсив, подчеркнутый) с выбором текста пользователя. Например, если текущим выделенным текстом является простой текст, кнопки переключения жирным шрифтом, курсивом и подчеркиванием не выбираются, но когда пользователь выбирает какой-либо текст, выделенный жирным шрифтом и подчеркиванием, выбираются кнопки переключения жирным шрифтом и подчеркнутые.
Теперь я совершенно уверен, что JTextPane.getInputAttributes()
дает мне нужные атрибуты выбора, но есть проблема с прослушиванием событий обновления каретки. Проблема заключается в том, что слушатель каретки, подключенный к JTextPane
, кажется, вызывается ПОСЛЕ того, как произойдет изменение входного атрибута. Так что выбор всегда на шаг позади. То есть я должен дважды выделить текст, прежде чем переключать кнопки!
Важный код здесь:
textPane.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
syncAttributesWithUI(textPane.getInputAttributes());
}
});
И
private void syncAttributesWithUI(AttributeSet attributes) {
boldButton.setSelected(StyleConstants.isBold(attributes));
italicButton.setSelected(StyleConstants.isItalic(attributes));
underlineButton.setSelected(StyleConstants.isUnderline(attributes));
}
Заранее спасибо!