2016-05-19 6 views
1

J'ai cette classe sur laquelle j'ai travaillé. J'ai deux problèmes que je suis face à ce moment:Comment utiliser un surligneur dans JTextArea

1: Gras et italique texte spécifique

J'ai deux icônes dans ma barre d'outils qui rendent le texte ou en gras italique lorsque vous cliquez dessus. Tout cela fonctionne bien, cependant, Il sélectionne toujours tout le texte dans le document plutôt que du texte spécifiquement sélectionné. Est-il possible d'utiliser la surbrillance bleue d'un clic gauche sur une souris pour mettre en gras ou en italique un texte spécifique? C'est le code pour l'action abstraite bolding. Les italiques sont exactement les mêmes, sauf en italique.

Action Bold = new AbstractAction("Bold", new ImageIcon("bold.png")) 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     if(bolded == false) 
     { 
      area.setFont(area.getFont().deriveFont(Font.BOLD)); 
      bolded = true; 
     } 
     else 
     { 
      area.setFont(area.getFont().deriveFont(Font.PLAIN)); 
      bolded = false; 
     } 

    } 
}; 

2 surligneur sur le texte

Je veux ajouter une surligneur réelle qui va juste peindre certains groupes de mots que l'utilisateur sélectionne jaune. J'ai lu la page Oracle à ce sujet, et je ne suis toujours pas sûr de l'utiliser. Je vois beaucoup d'exemples de personnes qui recherchent des mots précis et les soulignent de cette façon, mais je ne cherche pas à mettre en évidence ces mots spécifiques. Je veux que l'utilisateur décide du texte à mettre en évidence.

Action Highlight = new AbstractAction("Highlight", new ImageIcon("highlighter.png")) 
{ 
    public void actionPerformed(ActionEvent e) throws BadLocationException 
    { 
     Highlighter highlighter = area.getHighlighter(); 
     HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.RED); 
     highlighter.addHighlight(0 , 6, painter); 
    } 
}; 

Le code ci-dessus est ce que je réussi à tirer ensemble de quelques autres tutoriels en ligne, cependant, le BadLocationException ne compile pas juste quand il se trouve dans l'action abstraite, donc ce ne cherche pas comme une option viable .

Toute aide est appréciée!

+1

Avec un 'JTextArea', changer la police affectera tout le texte. Consultez ce didacticiel sur les composants de texte et choisissez-en un plus pertinent: http://docs.oracle.com/javase/tutorial/uiswing/components/text.html – Berger

Répondre

1

actionPerformed ne renvoie aucune exception vérifiée. Supprimez simplement l'exception et attrapez-la dans la méthode.

public void actionPerformed(ActionEvent e) 
{ 
    try { 
    Highlighter highlighter = area.getHighlighter(); 
    HighlightPainter painter = new DefaultHighlighter.DefaultHighlightPainter(Color.RED); 
    highlighter.addHighlight(0 , 6, painter); 
    catch(throws BadLocationException ex) { 
    ex.printStackTrace(); 
    } 
} 

}