【问题标题】:Java Swing Storing & Rendering Text with TabsJava Swing 使用选项卡存储和呈现文本
【发布时间】:2012-05-23 10:33:57
【问题描述】:

我的 Swing 应用程序包含一个 JEditorPane,它允许用户以所见即所得的方式编辑文本,包括粗体、斜体和设置字体等的工具栏按钮。

JEditorPane 上的内容类型是 text/html

问题:用户希望能够在编辑器窗格中键入制表符,关闭编辑对话框(将 HTML 文本保存到持久存储)并查看其制表符。但是,HTML 将所有空格视为单个空格。

public class NoteTest {
    public static void main(String[] args) {
        final JEditorPane editPane1 = new JEditorPane("text/html", "Try typing some tabs");
        editPane1.setPreferredSize(new Dimension(400, 300));
        JOptionPane.showMessageDialog(null, new JScrollPane(editPane1));
        JOptionPane.showMessageDialog(null, new JScrollPane(new JEditorPane("text/html", editPane1.getText()))); // where did the tabs go?
    }
}

在第一个 JEditorPane 中键入选项卡后,我们从中获取 HTML 文本,并将其传递给第二个 JEditorPane,它将选项卡呈现为空格。

如何呈现这些选项卡?我应该将用户输入的内容保存为 RTF 而不是 HTML?我是否应该解析 HTML 并构建一个包含行和单元格的 HTML 表格(呃)。或者有什么方法可以告诉 swing 将制表符呈现为制表符?

【问题讨论】:

  • 虽然它是一个 HTML 属性..HTML 没有 tab 的东西,即使你在 html 中给出多个空格,它也会呈现为单个空格

标签: java html swing rtf jeditorpane


【解决方案1】:

为了尽快获得更好的帮助,请发布 SSCCE。此 SSCCE 未显示您描述的行为。

请注意typin gng 之间的“制表符”。

import java.awt.Dimension;
import javax.swing.*;

public class NoteTest {
    public static void main(String[] args) {
        final JEditorPane editPane1 = new JEditorPane("text/html", "Try typing some tabs");
        editPane1.setPreferredSize(new Dimension(400, 300));
        JOptionPane.showMessageDialog(null, new JScrollPane(editPane1));
        JOptionPane.showMessageDialog(null, new JScrollPane(new JEditorPane("text/html", editPane1.getText()))); // where did the tabs go?
    }
}

最后有一些标签消失了,但这是有道理的,因为 HTML 不正确支持标签,除非包含在 pre 元素中。我猜 Swing HTML 解析忽略它们是多余的。

【讨论】:

  • 感谢 Andrew,那么在用户关闭他们输入标签的初始 JEditorPane 后,如何将用户输入的标签呈现为标签(而不是空格)?
【解决方案2】:

如果你对文本和制表符使用

标签怎么办?
    

【讨论】:

  • 感谢 Stanislav,我在 HTMLDocument 中添加了一个样式表规则来执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多