首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在HTMLEditorKit/JEditorPane中执行<strong>而不是<b>

在HTMLEditorKit/JEditorPane中执行<strong>而不是<b>
EN

Stack Overflow用户
提问于 2013-08-08 11:27:56
回答 1查看 203关注 0票数 2

我试图确保带有HTMLEditorKit的HTMLEditorKit使用<>标记,而不是使用<b>标记。下面的代码用一个JFrame加载一个JEditorPane。试着选择文本的一部分,然后单击按钮,将所选内容变为粗体。System.out显示粗体是由标记引起的。

我如何设置它,使它符合XHTML并使用标记呢?

代码语言:javascript
复制
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) {
            }
        });
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-08-08 12:24:35

这个答案是不完整的,我是用它作为记事本,当我回来继续。

javax.swing.text.html.HTML包含一个类Tag,它还包含大量表示每个Tag标记的最终Tag实例。

我们对这条线感兴趣;

代码语言:javascript
复制
public static final Tag STRONG = new Tag("b");

javax.swing.text.html.HTMLDocument包含一个存储所有这些标记的HashTable tagMap

我们对台词感兴趣;

代码语言:javascript
复制
tagMap.put(HTML.Tag.STRONG, ca);

其中caTagAction ca = new CharacterAction();和;

代码语言:javascript
复制
protected void registerTag(HTML.Tag t, TagAction a) {
    tagMap.put(t, a);
}

我还没有找到用于TagAction的包,也没有找到访问/更改HTMLEditorKit使用的HTML的方法。

我已经找到了我认为标记被写出来的点(用//here标记;

javax.swing.java.text.html.HTMLWriter.java

代码语言:javascript
复制
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构建。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18124842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档