Как зачеркнуть выделенный текст в JTextPane? (Джава)

Название говорит обо всем. Допустим, у меня есть контекстное меню с опцией "Зачеркнутый текст". Когда я выделю текст в jtextpane, щелкните правой кнопкой мыши -> "Зачеркнутый выделенный текст", и выделенный текст будет зачеркнут.

Есть идеи?

2 ответа

Решение

Swing текстовые компоненты используют Actions обеспечить различные возможности форматирования текстовой панели.

Ниже приведен код для UnderlineAction из StyledEditorKit,

public static class UnderlineAction extends StyledTextAction {

    /**
     * Constructs a new UnderlineAction.
     */
    public UnderlineAction() {
        super("font-underline");
    }

    /**
     * Toggles the Underline attribute.
     *
     * @param e the action event
     */
    public void actionPerformed(ActionEvent e) {
        JEditorPane editor = getEditor(e);
        if (editor != null) {
            StyledEditorKit kit = getStyledEditorKit(editor);
            MutableAttributeSet attr = kit.getInputAttributes();
            boolean underline = (StyleConstants.isUnderline(attr)) ? false : true;
            SimpleAttributeSet sas = new SimpleAttributeSet();
            StyleConstants.setUnderline(sas, underline);
            setCharacterAttributes(editor, sas, false);
        }
    }
}

Таким образом, в основном вам нужно будет создать собственный StrikeThroughAction, заменив методы StyleConstants с подчеркиванием на методы StyleConstants с зачеркиванием.

Создав действие, вы можете использовать его, создав JMenuItem или JButton с действием. Если щелкнуть компонент, атрибут зачеркивания будет добавлен к выделенному тексту.

В вашем действии правой кнопкой мыши

objJTextPane.setContentType( "text/html" );
String[] args = objJTextPane.getText().split(objJTextPane.getSelectedText());
objJTextPane.setText("<strike>" + objJTextPane.getSelectedText() + "</strike>"+ args[1].toString());

применить свою логику в расщеплении строки.

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