2

我正在尝试创建一个简单的所见即所得编辑器,它允许用户选择文本并将其加粗/下划线/斜体。目前,用户可以选择文本,右键单击它并从弹出菜单中选择粗体,最终将粗体样式应用于所选文本,如下所示:

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
}

梦想成真,但我对此没有希望。我真正希望的是要么被告知我做错了并被展示“道路”,要么被指向实现这一目标的循环方法的方向。

非常感谢您的宝贵时间。

4

2 回答 2

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);
于 2009-10-11T13:44:15.570 回答
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);
于 2015-09-02T09:43:04.930 回答