Je travaille actuellement sur une application qui lit un gros texte et met en évidence une sous-chaîne spécifique à l'intérieur de ce texte. Et ça fonctionne un peu ...DefaultHighlightPainter continue de se décaler dans JTextPane
Mais il semble que (et je ne sais pas pourquoi) le highligt continue à se déplacer chaque fois qu'il met en évidence la chaîne.
public List<int[]> findString(String text) {
text = text.toLowerCase();
List<int[]> highlightPositions = new ArrayList<int[]>();
JTextPane pane = getTextPane();
String paneText = pane.getText().toLowerCase();
int end = 0;
while (paneText.indexOf(text, end) != -1) {
int start = paneText.indexOf(text, end);
end = start + text.length();
highlightPositions.add(new int[] {start, end});
}
try {
highlight(highlightPositions);
} catch (Exception ex) {
}
return null;
}
ce qui est le code qui fait la réelle soulignant
public void highlight(List<int[]> highlightPositions) throws BadLocationException {
DefaultHighlighter.DefaultHighlightPainter highlightPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
JTextPane textPane = getTextPane();
for (int[] position : highlightPositions) {
System.out.println("Highlight: " + position[0] + " : " + position[1]);
textPane.getHighlighter().addHighlight(position[0], position[1], highlightPainter);
}
}
Est-ce que quelqu'un sait comment résoudre ce problème?
EDIT: Voici à quoi cela ressemble lorsque j'essaie de mettre en évidence le mot "Device".
Qu'entendez-vous par * "le highligt continue de changer" *? De plus, lorsque j'essaie de reproduire cela, cela fonctionne pour moi - S'il vous plaît envisager de fournir un runnable [mcve]. –
Je viens de mettre à jour mon poste avec une photo. Voilà à quoi cela ressemble lorsque j'essaie de mettre en évidence le mot "Device". – stackmonkey