Pergunta

A JTextPane permite incorporar JComponents e imagens . Ao selecionar uma seção do documento o texto é realçado mas os itens incorporados não são. Você pode ter os componentes embutidos notificados por meio de um CaretListener após o evento, mas eu queria saber se havia uma maneira de tê-los destacou durante seleções do mouse?

Foi útil?

Solução 2

Instale um Highlighter personalizado na JTextPane, que pode informar os componentes incorporados quando eles precisam ser destacadas ou não:

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 ... */ 
    }
}

Outras dicas

Você pode usar um MouseMotionListener e manipular o evento mouseDragged. Você, então, precisa usar o método viewToModel () para saber qual parte do modelo estava sendo selecionado.

Bem, eu fiz algo semelhante, longo tempo de volta. Em meus casos os componentes embarcados foram smileys em um editor de chat. O que você faz é que quando uma seleção acontece, você começa a marca eo ponto (e.getMark, e.getDot). Se as mentiras sorridentes entre a marca eo ponto, em seguida, que é suposto ser destacado, assim que você definir um campo na narração componente emoticon a ser destacado, e colocar um pedido repintar. Finalmente, no método paint (g) do componente emoticon você apenas pintá-lo como destacado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top