2015-08-27 5 views
2

Как получить выбранное слово в тексте из JTextPane, а затем применить свойство Bold для выделенного текста, используя Ctrl+B Short Cut.Сделать выделенное слово полужирным в тексте JtextPane в стиле HTML?

Строка присваивается JTextpane из xml-файлов. Струна получить из элементов тегов и установить в 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 

После CONCAT bold(<b>), записать строку в жирный XML-тег. у меня есть проблема в получении последней позиции индекса и первой позиции индекса, потому что я использую язык tamil в JTextPane

Полужирный шрифт применяется, но не может быть применен в правильном положении.

+1

'JTextPane' на самом деле не предназначен для отображения html, вместо этого вы должны использовать' JEditorPane' или установить стиль для 'StyledDocument' – MadProgrammer

+0

Некоторые теги (<>) не могут быть показаны JEditorpane, поэтому только i будет использовать JTextPane. –

+0

, пожалуйста, сообщите мне, чтобы мне было выделено жирным шрифтом для выбранных значений. –

ответ

2

Хорошим решением является использование метода insertHTML() из 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

Не хорошо, если вы выберете фрагмент текста с различными атрибутами. Например. есть 2 слова, и один из них подчеркнут. Вы выбираете их обоих и пытаетесь сделать его жирным. Вы приближаетесь к удалению существующих атрибутов – StanislavL

2

При выборе текста, просто вызовите HTMLEditorKit.BoldAction.actionPerformed.

InsertHTML также является хорошим решением, но в некоторых случаях параметры могут быть проблематичными.