【问题标题】:JTextPane .getText() not preserving whitespace for HTML?JTextPane .getText() 不为 HTML 保留空格?
【发布时间】:2014-10-27 17:00:48
【问题描述】:

如果我有一个内容类型设置为 text/html 的可编辑 JTextPane,我看不到保留空白。 IE:如果我运行以下命令:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.html.*;
public class HtmlPasteTest extends JFrame implements ActionListener {
    JTextPane PANE;
    public static void main(String[] args) {
        new HtmlPasteTest();
    }
    public HtmlPasteTest() {        
        HTMLEditorKit KIT = new HTMLEditorKit();
        HTMLDocument DOC = (HTMLDocument)(KIT.createDefaultDocument());
        PANE = new JTextPane();
        PANE.setContentType("text/html");
        PANE.setEditorKit(KIT);
        PANE.setDocument(DOC);
        JButton dump = new JButton("DUMP");
        dump.addActionListener(this);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(dump, BorderLayout.NORTH);
        getContentPane().add(PANE, BorderLayout.CENTER);
        setSize(600, 600);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void actionPerformed(ActionEvent e) {
                System.out.println(PANE.getText());     
    }
}

...然后输入“a   b”并点击 DUMP 按钮,我希望看到如下内容:

      a     b

...但是我看到以下内容:

      a     b

...我在这里错过了某种设置吗?

【问题讨论】:

  • 您为什么希望将空间转换为不可破坏的空间?毕竟U+0020U+00A0 是完全不同的字符。
  • 好点 - 没想到那样。但是我无法输入  通过键盘,所以最终结果是用户输入的并发空格无法被检索到。
  • ... 我不能假设文档中的并发空格是由客户端输入的,因为他们可以从其他页面粘贴 HTML,并且在很多情况下,这里的空格是为了 HTML 源代码可读性。 ..
  • 也许你问错问题了?在我看来,Swing 一开始就不应该将相邻的空白渲染为多个空格(在white-space: pre 上下文之外)。但根据我的经验,思考 Swing 做对或错的事情并没有帮助,Swing 编程是变通编程……所以最好的办法可能是编写自己的操作,插入不可破坏的空格或 <pre> 部分进入文档并将其绑定到空格键。
  • Swing 编程是变通编程 - 确实:-)

标签: java html swing whitespace jtextpane


【解决方案1】:

但是我无法通过键盘输入 

当输入“空格”时,您有几个不同的选项来翻译它:

  1. 您可以使用DocumentFilter 过滤输入到文档中的字符。 .每当您输入“空格”时,您只需将  插入到文档中。阅读 Implementing a DocumentFilter 上的 Swing 教程中的部分以获取更多信息和示例。
  2. 您可以使用KeyBindings 创建自定义操作以在使用空格键时插入 。阅读 How to Use Key Bindings 上的 Swing 教程中的部分以获取更多信息。您应该扩展 TextAction 以实现 Action

【讨论】:

  • DocumentFilter 确实是这里的最佳选择。非常感谢您的建议。
猜你喜欢
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2019-01-03
  • 2012-04-24
  • 2012-06-19
  • 2018-05-18
相关资源
最近更新 更多