A JTextPane
позволяет вам embed JComponents
and images. Когда вы выбираете раздел документа, текст выделяется, а встроенные элементы - нет. Вы можете добавить встроенные компоненты через CaretListener
после события, но мне было интересно, есть ли способ выделить их во время выбора мыши?Выбор встроенных элементов в JTextPane
ответ
Установка пользовательских Highlighter
в JTextPane
, которые могут информировать встроенные компоненты, когда они должны быть выделены или нет:
textPane.setHighlighter(new CustomHighlighter());
// ...
private final class CustomHighlighter extends DefaultHighlighter {
@Override
public Object addHighlight(int p0, int p1, HighlightPainter p) throws BadLocationException {
Object tag = super.addHighlight(p0, p1, p);
/* notify embedded components ... */
return tag;
}
@Override
public void removeHighlight(Object tag) {
super.removeHighlight(tag);
/* notify embedded components ... */
}
@Override
public void removeAllHighlights() {
super.removeAllHighlights();
/* notify embedded components ... */
}
@Override
public void changeHighlight(Object tag, int p0, int p1) throws BadLocationException {
super.changeHighlight(tag, p0, p1);
/* notify embedded components ... */
}
}
YOu может использовать MouseMotionListener и обрабатывать событие mouseDragged. Затем вам нужно будет использовать метод viewToModel(), чтобы узнать, какая часть модели была выбрана.
Хорошо, я сделал что-то подобное, долгое долгое время назад. В моих случаях встроенные компоненты были смайликами в редакторе чата. Что вы делаете, так это то, что когда выбор происходит, вы получаете метку и точку (e.getMark, e.getDot). Если смайлик лежит между меткой и точкой, то он должен быть выделен, поэтому вы устанавливаете поле в компоненте смайлика, указывающее на выделение, и отправляете запрос на перерисовку. Наконец, в методе paint (g) компонента смайлика вы просто рисуете его как выделенное.
«У вас могут быть встроенные компоненты, которые были уведомлены через CaretListener после события, но мне было интересно, есть ли способ выделить их во время выбора мыши» –
- 1. Вставка встроенных JComponents в JTextPane?
- 2. Отключить выбор диапазона в JTextPane
- 3. Java- "Циркулярный" выбор в JTextPane?
- 4. Выбор/просмотр управления в JTextPane
- 5. Выберите несколько элементов в JTextPane
- 6. Выполнение встроенных элементов
- 7. CSS: ясно встроенных элементов
- 8. Защита пользовательских встроенных элементов в WPF RichTextBox
- 9. JS: Обнаружение обернутых встроенных элементов?
- 10. Позиционирование встроенных элементов с CSS
- 11. Использование ScrollWidth для встроенных элементов
- 12. MongoDB - получить список встроенных элементов
- 13. CSS перезаказа двух встроенных элементов
- 14. Tridion: изменение значений встроенных элементов
- 15. Проблема с группировкой встроенных элементов
- 16. Выберите текст в JTextPane
- 17. Выбор элементов в Jquery
- 18. Выбор элементов в JEditorPane
- 19. Включение встроенных элементов управления в FlowDocument
- 20. Нумерация атрибутов элементов встроенных в свободном тексте
- 21. Создание встроенных элементов управления в jQuery mobile
- 22. Переполнение встроенных элементов CSS в ячейке таблицы
- 23. Повторный выбор текста в JTextPane после нажатия на другой компонент
- 24. Выбор цели события из встроенных функций
- 25. Выбор отличительных встроенных объектов по их свойствам
- 26. Выбор последней записи из встроенных внутренних записей
- 27. Выбор Сортировка Python без встроенных вложений
- 28. Flex 4 Редактор встроенных элементов Удаление данных
- 29. Для соседних встроенных элементов внутри блока элемента
- 30. Элементы уровня блока внутри встроенных элементов
Я сделал немного больше копать, и я сильно подозреваю, что путь заключается в установке пользовательского Highlighter на JTextPane. Я попробую это завтра и добавлю ответ, если я смогу заставить его работать. –