Domanda

Un JTextPane ti consente di incorporare JComponents e immagini . Quando si seleziona una sezione del documento, il testo viene evidenziato ma gli elementi incorporati no. Puoi avere i componenti incorporati notificati tramite un CaretListener dopo l'evento, ma mi chiedevo se c'era un modo per evidenziarli durante le selezioni del mouse?

È stato utile?

Soluzione 2

Installa un evidenziatore personalizzato nel JTextPane , che può informare i componenti incorporati quando devono essere evidenziati o meno:

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

Altri suggerimenti

È possibile utilizzare un MouseMotionListener e gestire l'evento mouseDragged. Dovresti quindi utilizzare il metodo viewToModel () per sapere quale parte del modello è stata selezionata.

Beh, ho fatto qualcosa di simile, molto tempo fa. Nel mio caso i componenti incorporati erano emoticon in un editor di chat. Quello che fai è che quando si verifica una selezione, ottieni il segno e il punto (e.getMark, e.getDot). Se lo smiley si trova tra il segno e il punto, allora dovrebbe essere evidenziato, quindi si imposta un campo nel componente smiley che dice di essere evidenziato e si inserisce una richiesta di ridipingere. Infine, nel metodo paint (g) del componente smiley lo dipingi come evidenziato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top