我试图确保带有HTMLEditorKit的HTMLEditorKit使用<强>标记,而不是使用<b>标记。下面的代码用一个JFrame加载一个JEditorPane。试着选择文本的一部分,然后单击按钮,将所选内容变为粗体。System.out显示粗体是由标记引起的。
我如何设置它,使它符合XHTML并使用标记呢?
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.StyledEditorKit;
import javax.swing.text.html.HTMLEditorKit;
public class BStrongTest extends JPanel {
/**
* @param args
*/
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new BStrongTest());
frame.setSize(300, 200);
frame.setVisible(true);
}
public BStrongTest() {
setLayout(new BorderLayout());
final JEditorPane pane = new JEditorPane();
pane.setEditorKit(new HTMLEditorKit());
pane.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent bibendum.");
add(pane, BorderLayout.NORTH);
JButton boldButton = new JButton();
boldButton.setAction(new StyledEditorKit.BoldAction());
boldButton.setText("Boldify");
add(boldButton, BorderLayout.SOUTH);
pane.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent e) {
System.out.println(pane.getText());
}
@Override
public void insertUpdate(DocumentEvent e) {
}
@Override
public void removeUpdate(DocumentEvent e) {
}
});
}
}发布于 2013-08-08 12:24:35
这个答案是不完整的,我是用它作为记事本,当我回来继续。
javax.swing.text.html.HTML包含一个类Tag,它还包含大量表示每个Tag标记的最终Tag实例。
我们对这条线感兴趣;
public static final Tag STRONG = new Tag("b");javax.swing.text.html.HTMLDocument包含一个存储所有这些标记的HashTable tagMap。
我们对台词感兴趣;
tagMap.put(HTML.Tag.STRONG, ca);其中ca是TagAction ca = new CharacterAction();和;
protected void registerTag(HTML.Tag t, TagAction a) {
tagMap.put(t, a);
}我还没有找到用于TagAction的包,也没有找到访问/更改HTMLEditorKit使用的HTML的方法。
我已经找到了我认为标记被写出来的点(用//here标记;
javax.swing.java.text.html.HTMLWriter.java
protected void writeEmbeddedTags(AttributeSet attr) throws IOException {
// translate css attributes to html
attr = convertToHTML(attr, oConvAttr);
Enumeration names = attr.getAttributeNames();
while (names.hasMoreElements()) {
Object name = names.nextElement();
if (name instanceof HTML.Tag) {
HTML.Tag tag = (HTML.Tag)name;
if (tag == HTML.Tag.FORM || tags.contains(tag)) {
continue;
}
write('<');
write(tag.toString());//Here
Object o = attr.getAttribute(tag);
if (o != null && o instanceof AttributeSet) {
writeAttributes((AttributeSet)o);
}
write('>');
tags.addElement(tag);
tagValues.addElement(o);
}
}
}因此,我们似乎需要更改正在编写的文档中的任何attributeSet构建。
https://stackoverflow.com/questions/18124842
复制相似问题