2009-10-23 54 views
2

A JTextPane让你embed JComponents and images。当您选择文档的某个部分时,文本会突出显示,但嵌入的项目不会显示。事件发生后,您可以通过CaretListener通知嵌入式组件,但我想知道在鼠标选择期间是否有方法让它们突出显示?在JTextPane中选择嵌入项目

+0

我已经做了一点挖掘,我强烈怀疑的路要走是在JTextPane上安装一个自定义的荧光笔。我明天会试试这个,如果我可以得到它的话就添加一个答案。 – 2009-10-27 09:47:12

回答

0

安装定制HighlighterJTextPane,可通知嵌入式组件时,他们需要强调与否:

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通知嵌入式组件,但我想知道是否有方法在鼠标选择期间突出显示它们” – 2009-10-27 09:44:27