JTextPane文本背景颜色不起作用

我正在尝试使用JTextPane创建一个小的HTML-wysiwyg,但我无法使BackgroundAction工作。 我在JTextPaneStyledDocument上使用JTextPane但它似乎有问题。 视图没问题,但Document没有。

这是一个显示问题的小型演示代码。 有两个JTextPane

  1. 我在第一个文本中设置了文本的背景颜色
  2. 我检索第一个JTextPane的文本并将其设置在第二个

– >虽然它们具有相同的文本,但它们不会显示相同的内容。

有没有办法在当前选定的文本上设置背景颜色,并让JTextPane报告更新的HTML文本?

 import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextPane; import javax.swing.SwingUtilities; import javax.swing.text.SimpleAttributeSet; import javax.swing.text.StyleConstants; import javax.swing.text.StyledDocument; public class TestDifferentStyles { private void initUI() { JFrame frame = new JFrame(TestDifferentStyles.class.getSimpleName()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JTextPane textPane = new JTextPane(); final JTextPane textPane2 = new JTextPane(); textPane2.setEditable(false); textPane.setContentType("text/html"); textPane2.setContentType("text/html"); textPane.setText("

Hello world

"); SimpleAttributeSet set = new SimpleAttributeSet(); StyleConstants.setForeground(set, Color.GREEN); StyleConstants.setBackground(set, Color.BLACK); ((StyledDocument) textPane.getDocument()).setCharacterAttributes(0, textPane.getDocument().getLength(), set, false); JPanel panel = new JPanel(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.weightx = 1.0; gbc.weighty = 1.0; panel.add(textPane, gbc); panel.add(textPane2, gbc); frame.add(panel); frame.setSize(500, 400); frame.setVisible(true); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { System.err.println(textPane.getText()); textPane2.setText(textPane.getText()); } }); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new TestDifferentStyles().initUI(); } }); } }

输出结果(黑色边框围绕每个JTextPane ): 输出结果

以下是可以设置背景颜色的Action的代码:

 public class BackgroundColorAction extends StyledEditorKit.StyledTextAction { private Color color; public BackgroundColorAction(Color color) { super(StyleConstants.Background.toString()); this.color = color; } @Override public void actionPerformed(ActionEvent ae) { JEditorPane editor = getEditor(ae); if (editor == null) { return; } //Add span Tag String htmlStyle = "background-color:" + Util.getHTMLColor(color); SimpleAttributeSet attr = new SimpleAttributeSet(); attr.addAttribute(HTML.Attribute.STYLE, htmlStyle); MutableAttributeSet outerAttr = new SimpleAttributeSet(); outerAttr.addAttribute(HTML.Tag.SPAN, attr); //Next line is just an instruction to editor to change color StyleConstants.setBackground(outerAttr, this.color); setCharacterAttributes(editor, outerAttr, false); } } 

我在设置背景颜色方面遇到了很多麻烦。 但最后,我设法破解它。抱歉,我忘了发布子程序。 干得好:

 /** * Convert a Java Color to equivalent HTML Color. * * @param color The Java Color * @return The String containing HTML Color. */ public static String getHTMLColor(Color color) { if (color == null) { return "#000000"; } return "#" + Integer.toHexString(color.getRGB()).substring(2).toUpperCase(); }