我正在尝试创建一个简单的WYSIWYG编辑器,允许用户选择文本和粗体/下划线/斜体。目前,用户可以选择文本,右键单击它并从弹出菜单中选择粗体,最终将粗体样式应用于所选文本,如下所示:
this.getStyledDocument().setCharacterAttributes(this.getSelectionStart(), this.getSelectionEnd()-this.getSelectionStart(), boldStyle, false);
大胆的风格设置如下:
boldStyle = this.addStyle("Bold", null);
StyleConstants.setBold(boldStyle, true);
我想知道的是,是否可以获取当前所选文本的样式,以便如果用户尝试“加粗”某些已经是粗体的文本,我可以检测到这一点并将代码写入不加粗体这个文字,而不是简单地再次应用粗体样式?
类似的东西:
if(!this.getStyledDocument().getStyleForSelection(this.getSelectionStart(), this.getSelectionEnd()-this.getSelectionStart()).isBold()){
//do bold
}
else{
//un-bold
}
梦想成真,但我对此毫无希望。我实际上希望的是要么被告知我做错了,要么被证明是“方式”,要么指向实现这一目标的圆形方法。
非常感谢你的时间。
答案 0 :(得分:4)
最简单的方法是通过StyledEditorKit:
JTextPane text = new JTextPane();
JButton button = new JButton("bold");
button.addActionListener(new StyledEditorKit.BoldAction());
JFrame frame = new JFrame("Styled");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(button, BorderLayout.NORTH);
frame.add(text, BorderLayout.CENTER);
frame.setSize(600, 400);
frame.setVisible(true);
答案 1 :(得分:2)
从JTextPane的Selectedtext中获取粗体和斜体样式
int start = jTextpane.getSelectionStart();
int end = jTextpane.getSelectionEnd();
String selectedText = jTextpane.getSelectedText();
应用样式
StyledDocument doc = (StyledDocument) jTextpane.getDocument();
Style logicalStyle = doc.getLogicalStyle(jTextpane.getSelectionStart());
Element element = doc.getCharacterElement(start);
AttributeSet as = element.getAttributes();
Checking the Text,which is Bold and Italic
boolean isBold = StyleConstants.isBold(as) ? false : true;
boolean isItalic = StyleConstants.isItalic(as);
System.out.println("selected value is isItalic?"+isItalic);
System.out.println("selected value is isBold?"+isBold);