문제

JTextPane 당신을 할 수 있습니다 포함시키다 JComponents 및 이미지.문서의 한 섹션을 선택하면 텍스트가 강조 표시되지만 포함된 항목은 강조 표시되지 않습니다.내장된 구성 요소에 대해 알림을 받을 수 있습니다. CaretListener 이벤트가 끝난 후 마우스 선택 중에 강조 표시할 수 있는 방법이 있는지 궁금합니다.

도움이 되었습니까?

해결책 2

관습을 설치하십시오 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 ... */ 
    }
}

다른 팁

MouseMotionListener를 사용하여 mouseDragged 이벤트를 처리할 수 있습니다.그런 다음 모델의 어느 부분이 선택되었는지 확인하려면 viewToModel() 메서드를 사용해야 합니다.

글쎄, 나는 비슷한 일을했고, 오래 걸렸다. 내 경우에는 내장 된 구성 요소가 채팅 편집기의 스마일이었습니다. 당신이하는 일은 선택이 일어날 때 마크와 점 (e.getmark, e.getDot)을 얻는다는 것입니다. 스마일이 마크와 도트 사이에있는 경우 강조 표시되어야하므로 스마일 구성 요소에 필드를 설정하여 강조 표시를하고 다시 Repaint 요청을합니다. 마지막으로, 스마일 구성 요소의 페인트 (G) 방법에서 강조대로 페인트 칠합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top