문제
ㅏ JTextPane
당신을 할 수 있습니다 포함시키다 JComponents
및 이미지.문서의 한 섹션을 선택하면 텍스트가 강조 표시되지만 포함된 항목은 강조 표시되지 않습니다.내장된 구성 요소에 대해 알림을 받을 수 있습니다. CaretListener
이벤트가 끝난 후 마우스 선택 중에 강조 표시할 수 있는 방법이 있는지 궁금합니다.
해결책 2
관습을 설치하십시오 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 ... */
}
}
다른 팁
MouseMotionListener를 사용하여 mouseDragged 이벤트를 처리할 수 있습니다.그런 다음 모델의 어느 부분이 선택되었는지 확인하려면 viewToModel() 메서드를 사용해야 합니다.
글쎄, 나는 비슷한 일을했고, 오래 걸렸다. 내 경우에는 내장 된 구성 요소가 채팅 편집기의 스마일이었습니다. 당신이하는 일은 선택이 일어날 때 마크와 점 (e.getmark, e.getDot)을 얻는다는 것입니다. 스마일이 마크와 도트 사이에있는 경우 강조 표시되어야하므로 스마일 구성 요소에 필드를 설정하여 강조 표시를하고 다시 Repaint 요청을합니다. 마지막으로, 스마일 구성 요소의 페인트 (G) 방법에서 강조대로 페인트 칠합니다.
제휴하지 않습니다 StackOverflow