如何在JTextPane中获取所选文本的样式?

时间:2009-10-11 12:54:12

标签: java swing jtextpane

我正在尝试创建一个简单的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
}

梦想成真,但我对此毫无希望。我实际上希望的是要么被告知我做错了,要么被证明是“方式”,要么指向实现这一目标的圆形方法。

非常感谢你的时间。

2 个答案:

答案 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);