gpt4 book ai didi

java - 在 HTMLEditorKit/JEditorPane 中强制使用 而不是

转载 作者:行者123 更新时间:2023-11-30 11:29:48 24 4
gpt4 key购买 nike

我试图确保带有 HTMLEditorKit 的 JEditorPane 使用 <strong> 标签而不是 <b> 标签。下面的代码加载了一个带有 JEditorPane 的 JFrame。尝试选择文本的一部分并单击按钮将选择变为粗体。 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) {
}
});
}
}

最佳答案

这个答案不完整,当我不断回来继续时,我将它用作记事本。

javax.swing.text.html.HTML包含一个类Tag,它还包含大量的final Tag实例,代表每个 HTML 标签。

我们对该行感兴趣;

public static final Tag STRONG = new Tag("b");

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

我们对线条感兴趣;

tagMap.put(HTML.Tag.STRONG, ca);

其中 caTagAction 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 的任何内容。

关于java - 在 HTMLEditorKit/JEditorPane 中强制使用 <strong> 而不是 <b>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18124842/

24 4 0