Как зачеркнуть выделенный текст в 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());
применить свою логику в расщеплении строки.