2015-08-27 5 views
2

Comment puis-je obtenir le mot sélectionné dans le texte à partir d'un JTextPane, puis appliquer la propriété Gras pour le texte sélectionné en utilisant le raccourci Ctrl+B.Rendre un mot sélectionné gras dans le texte d'un JtextPane de style HTML?

Les chaînes sont attribuées au JTextpane à partir des fichiers xml. String sont obtenir des éléments d'étiquette et mis à la JTextpane:

String selectedText = ta_textpane.getSelectedText(); 
int getselectedtextstart = ta_textpane.getSelectionStart(); 
int getselectedtextend = ta_textpane.getSelectionEnd(); 

String textbef = text.substring(0, getselectedtextstart); 
String textaft = text.substring(getselectedtextend, text.length()); 
String textinbet = "<b>" + text.substring(getselectedtextstart,getselectedtextend) + "</b>"; 

String settoxmlfiletag = textbef + textinbet + textaft 

Après concat le bold(<b>), écrire la chaîne à la balise gras xml. J'ai un problème en obtenant la dernière position d'index et la première position d'index parce que j'emploie la langue tamil dans le

Le gras est appliqué mais ne peut pas être appliqué dans la position correcte.

+1

'JTextPane' n'est pas vraiment destiné à afficher html, vous devriez plutôt utiliser un' JEditorPane' ou définir le style pour 'StyledDocument' – MadProgrammer

+0

Certaines balises (<>) ne peuvent pas être affichées par JEditorpane, donc seulement je utilisera le JTextPane. –

+0

s'il vous plaît dites la suggestion pour moi d'obtenir l'affichage en gras pour les valeurs sélectionnées –

Répondre

2

Une bonne solution consiste à utiliser la méthode insertHTML() de HTMLEditorKit:

public class Bold extends JTextPane {  

    public Bold(){ 
     super(); 

     setEditorKit(new HTMLEditorKit()); 
     setText("<html><h1>Example</h1><p>Just a test</p></html>"); 
     getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_B, KeyEvent.CTRL_MASK), "bold"); 
     getActionMap().put("bold", new AbstractAction(){ 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JTextPane bold = (JTextPane) e.getSource(); 
       int start = bold.getSelectionStart(); 
       int end = bold.getSelectionEnd(); 
       String txt = bold.getSelectedText(); 
       if(end != start) 
        try { 
         bold.getDocument().remove(start, end-start); 
         HTMLEditorKit htmlkit = (HTMLEditorKit) bold.getEditorKit(); 
         htmlkit.insertHTML((HTMLDocument) bold.getDocument(), start, "<b>"+txt+"</b>", 0, 0, HTML.Tag.B); 
        } catch (Exception e1) { 
         e1.printStackTrace(); 
        } 
      } 

     }); 
    } 

    public static void main(String[] args){ 
     SwingUtilities.invokeLater(()->{ 
      JFrame f = new JFrame(); 
      f.setContentPane(new Bold()); 
      f.setPreferredSize(new Dimension(640,480)); 
      f.pack(); 
      f.setVisible(true); 
     }); 
    } 
} 
+1

Ne convient pas si vous sélectionnez un fragment de texte avec des attributs différents. Par exemple. il y a 2 mots et l'un d'entre eux est souligné. Vous les sélectionnez tous les deux et essayez de le rendre gras. Votre approche supprime les attributs existants – StanislavL

2

Lorsque votre texte est sélectionné, il suffit d'appeler HTMLEditorKit.BoldAction.actionPerformed.

InsertHTML est également une bonne solution, mais les paramètres peuvent être problématiques dans certaines circonstances.