Сделать выделенное слово жирным в тексте HTML-стиля JtextPane?

Как я могу получить выбранное слово в тексте из JTextPane а затем примените свойство Bold для выделенного текста, используя Ctrl+B Сокращенный

Строка передается 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

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

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

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); 
        });
    }
}

Когда ваш текст выделен, просто позвоните HTMLEditorKit.BoldAction.actionPerformed,

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

Другие вопросы по тегам