Java 在JTextPane中选择嵌入项
一个Java 在JTextPane中选择嵌入项,java,swing,jtextpane,Java,Swing,Jtextpane,一个JTextPane让您可以。当您选择文档的某个部分时,文本将高亮显示,但嵌入的项目不会高亮显示。事件发生后,您可以通过CaretListener通知嵌入式组件,但我想知道是否有办法在选择鼠标时突出显示它们?您可以使用MouseMotionListener并处理mouseDragged事件。然后,您需要使用viewToModel()方法来知道选择了模型的哪个部分。您可以使用MouseMotionListener并处理mouseDragged事件。然后,您需要使用viewToModel()方法来
JTextPane
让您可以。当您选择文档的某个部分时,文本将高亮显示,但嵌入的项目不会高亮显示。事件发生后,您可以通过CaretListener
通知嵌入式组件,但我想知道是否有办法在选择鼠标时突出显示它们?您可以使用MouseMotionListener并处理mouseDragged事件。然后,您需要使用viewToModel()方法来知道选择了模型的哪个部分。您可以使用MouseMotionListener并处理mouseDragged事件。然后,您需要使用viewToModel()方法来知道选择了模型的哪个部分。我很久以前也做过类似的事情。在我的例子中,嵌入式组件是聊天编辑器中的笑脸。你要做的是,当选择发生时,你会得到标记和点(e.getMark,e.getDot)。如果笑脸位于标记和点之间,那么它应该高亮显示,因此您在笑脸组件中设置了一个字段,告知要高亮显示,并提出重新绘制请求。最后,在smiley组件的paint(g)方法中,您只需将其绘制为高亮显示。我做了类似的事情,很久以前。在我的例子中,嵌入式组件是聊天编辑器中的笑脸。你要做的是,当选择发生时,你会得到标记和点(e.getMark,e.getDot)。如果笑脸位于标记和点之间,那么它应该高亮显示,因此您在笑脸组件中设置了一个字段,告知要高亮显示,并提出重新绘制请求。最后,在smiley组件的绘制(g)方法中,您只需将其绘制为高亮显示。在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 ... */
}
}
在
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 ... */
}
}
“事件发生后,您可以通过CaretListener通知嵌入式组件,但我想知道是否有办法在选择鼠标时突出显示它们”“事件发生后,您可以通过CaretListener通知嵌入式组件,但我想知道是否有办法在选择鼠标时突出显示它们“我已经做了更多的挖掘工作,我强烈怀疑应该在JTextPane上安装一个定制的荧光灯。我明天会试试这个,如果我能让它工作的话,我会添加一个答案。我已经做了更多的挖掘,我强烈怀疑接下来的方法是在JTextPane上安装一个定制的荧光灯。我明天会试试这个,如果我能让它工作的话,我会添加一个答案。