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