AJTextPane
让您嵌入JComponents
和图像。当您选择文档的一部分时,文本会突出显示,但嵌入的项目不会。您可以通过CaretListener
事件后的方式通知嵌入式组件,但我想知道是否有办法在鼠标选择期间突出显示它们?
问问题
621 次
3 回答
0
您可以使用 MouseMotionListener 并处理 mouseDragged 事件。然后,您需要使用 viewToModel() 方法来了解选择了模型的哪个部分。
于 2009-10-23T15:52:17.043 回答
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 ... */
}
}
于 2009-10-28T12:37:50.510 回答
-1
好吧,我做了类似的事情,很久很久以前。在我的情况下,嵌入式组件是聊天编辑器中的笑脸。What you do is that when a selection happens, you get the mark and the dot(e.getMark, e.getDot). 如果笑脸位于标记和点之间,那么它应该被突出显示,所以你在笑脸组件中设置一个字段,告诉它被突出显示,并提出重绘请求。最后,在笑脸组件的paint(g) 方法中,您只需将其绘制为突出显示即可。
于 2009-10-26T14:33:27.217 回答