2013-07-25 6 views
1

J'ai un JEditoPane dans un JScrollPane. J'ai du contenu textuel qui contient des jetons prédéfinis. Je stocke l'emplacement de ces jetons dans la base de données. Lorsque je définis le contenu du texte dans JEditorPane, j'insère les jetons avec HTML. J'ajoute aussi des lignes de rupture HTML pour formater le contenu.Définir la position du curseur sur JScrollPane

Maintenant, le problème vient lorsque je veux faire défiler jusqu'à l'un des jetons en surbrillance. Il semble que la position de départ des jetons, que j'ai stockée dans la base de données, ne correspond pas lors de l'utilisation de setCaretPosition (int). Je sais que c'est probablement parce que mon contenu dans JEditorPane Document est mélangé avec HTML.

Y a-t-il un moyen de rechercher une chaîne dans le contenu JEditorPane, puis d'obtenir la position du curseur où la chaîne a été trouvée?

Répondre

0

Est-ce que les chaînes ont des points communs? Si c'est le cas, vous pouvez essayer d'utiliser une combinaison de java.util.scanner ou de java.util.regex.Matcher. Assurez-vous d'obtenir la bonne expression rationnelle pour ce dont vous avez besoin. Une fois que vous avez trouvé une chaîne, obtenez l'index de la première lettre et placez-y la position du curseur.

Java Scanner

Java Matcher

1

Voilà comment vous le faites (pas ignorer en utilisant les meilleures pratiques;)) -

public static void main(String[] args) { 

    final JEditorPane jEditorPane = new JEditorPane("text/html", "<h1>This is some header</h1>After this text would be the CARRET<br>This is some more text<br>And more"); 
    final JScrollPane jScrollPane = new JScrollPane(jEditorPane); 

    final JFrame jframe = new JFrame("HHHHHH"); 
    jframe.add(jScrollPane); 
    jframe.setSize(new Dimension(200, 200)); 
    jframe.setVisible(true); 

    final String text = jEditorPane.getText(); 
    final int index = text.indexOf("T"); 
    jEditorPane.setCaretPosition(index + 1); 

    while (true) { 
     try { 
      Thread.sleep(1000000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Et c'est le résultat:

enter image description here

Tu devrais d stocke le résultat de indexof dans la base de données.

Questions connexes