2009-10-23 2 views
2

A JTextPane позволяет вам embed JComponents and images. Когда вы выбираете раздел документа, текст выделяется, а встроенные элементы - нет. Вы можете добавить встроенные компоненты через CaretListener после события, но мне было интересно, есть ли способ выделить их во время выбора мыши?Выбор встроенных элементов в JTextPane

+0

Я сделал немного больше копать, и я сильно подозреваю, что путь заключается в установке пользовательского Highlighter на JTextPane. Я попробую это завтра и добавлю ответ, если я смогу заставить его работать. –

ответ

0

Установка пользовательских 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 ... */ 
    } 
} 
0

YOu может использовать MouseMotionListener и обрабатывать событие mouseDragged. Затем вам нужно будет использовать метод viewToModel(), чтобы узнать, какая часть модели была выбрана.

-1

Хорошо, я сделал что-то подобное, долгое долгое время назад. В моих случаях встроенные компоненты были смайликами в редакторе чата. Что вы делаете, так это то, что когда выбор происходит, вы получаете метку и точку (e.getMark, e.getDot). Если смайлик лежит между меткой и точкой, то он должен быть выделен, поэтому вы устанавливаете поле в компоненте смайлика, указывающее на выделение, и отправляете запрос на перерисовку. Наконец, в методе paint (g) компонента смайлика вы просто рисуете его как выделенное.

+0

«У вас могут быть встроенные компоненты, которые были уведомлены через CaretListener после события, но мне было интересно, есть ли способ выделить их во время выбора мыши» –

Смежные вопросы