Frage

A JTextPane können Sie einbetten JComponents und Bilder . Wenn Sie einen Abschnitt des Dokuments auszuwählen, ist der gewünschte Text markiert, aber die eingebetteten Elemente sind nicht. Sie können die eingebetteten Komponenten mittels eines CaretListener nach der Veranstaltung mitgeteilt haben, aber ich habe mich gefragt, ob es einen Weg, um sie während der Maus Auswahl hervorgehoben zu haben war?

War es hilfreich?

Lösung 2

Installieren Sie eine benutzerdefinierte Highlighter in die JTextPane, die die eingebetteten Komponenten informieren können, wenn sie hervorgehoben werden müssen oder nicht:

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

Andere Tipps

könnten Sie ein Mouse verwenden und das mouseDragged Ereignis behandeln. Sie würden dann die viewToModel () Methode verwendet werden müssen, um zu wissen, welcher Teil des Modells ausgewählt wurde.

Nun habe ich etwas Ähnliches, lange, lange zurück. In meinen Fällen waren die eingebetteten Komponenten Smileys in einem Chat-Editor. Was Sie tun, ist, dass, wenn eine Auswahl geschieht, können Sie die Markierung erhalten und den Punkt (e.getMark, e.getDot). Wenn der Smiley zwischen der Marke und dem Punkt liegt, dann wird angenommen, hervorgehoben werden, so setzen Sie ein Feld in der Smiley-Komponente zu sagen hervorgehoben werden, und legte ein Repaint Anfrage. Schließlich wird in der Farbe (g) -Methode des Smiley Komponente, die Sie gerade malen wie hervorgehoben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top