Я пытаюсь выяснить, как получить атрибуты выбранного текста в JTextPane. Я нашел, что лучшее решение - это делать с getInputAttributes() и CaretListener. Но у меня есть некоторые проблемы с этой реализацией.Получить атрибуты выделенного текста в JTextPane
Мое решение, показывающее атрибуты текста в последнем положении каретки, но не на фактическом положении каретки. Что я делаю неправильно? Пожалуйста.
Существует мой SSCCE:
public class Testovani{
static JTextPane pane;
static JLabel label;
public static void main(String[] args) throws BadLocationException {
JFrame frame = new JFrame();
frame.setSize(350, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
pane = new JTextPane();
label = new JLabel();
pane.addCaretListener(new SelectionListener());
MutableAttributeSet attrs = new SimpleAttributeSet();
StyleConstants.setBold(attrs, true);
pane.getDocument().insertString(0, "\n", null);
pane.getDocument().insertString(0, "This is first row non bold", null);
pane.getDocument().insertString(0, "\n", null);
pane.getDocument().insertString(0, "This is second row bold", attrs);
pane.getDocument().insertString(0, "\n", null);
pane.getDocument().insertString(0, "This is third row bold", attrs);
pane.getDocument().insertString(0, "\n", null);
frame.add(pane);
frame.add(label, BorderLayout.SOUTH);
frame.setVisible(true);
}
private static class SelectionListener implements CaretListener{
@Override
public void caretUpdate(CaretEvent e) {
AttributeSet attrs =((StyledEditorKit)pane.getEditorKit()).getInputAttributes();
label.setText("Is bold: " + String.valueOf(StyleConstants.isBold(attrs)));
}
}}
И у меня есть два бонус вопрос. Является ли этот подход функциональным для выбора или просто для позиции каретки? И что возвращается, если есть выбор текста, одна часть которого выделена жирным шрифтом, а вторая - нет?
Определенно полезный ответ, я буду использовать его позже. Но сначала мне нужно знать, почему метод getInputAttributes() в моем CaretListener возвращает атрибуты предыдущей позиции каретки. –
Это потому, что обычно это ожидаемое поведение: если вы разместите свой текст после жирного текста, вы, как правило, ожидаете, что ваш ввод будет полужирным, а также – Sharcoux
Ответ был обновлен – StanislavL