【问题标题】:JEditorPane and custom editor kitJEdi​​torPane 和自定义编辑器工具包
【发布时间】:2011-09-23 09:27:40
【问题描述】:

我有一个小问题。我需要使用自定义编辑器工具包将现有文件加载到JEditorPane。 我有一个编辑器工具包,一个带有一些扩展名的文件,我需要强制JEditorPane 识别我的文件并使用我的编辑器工具包。我发现只有,这是可能的,但无处可寻。

该工具包也基于 HTML 和文件。如果文件具有.html 扩展名,它可以工作,但是当我将文件重命名为.xhtbm 时,它会以纯文本形式打开。内容类型设置为text/plain,但我无法为该类型注册我的编辑器工具包,因为已经为该内容类型注册了另一个编辑器工具包。

实际上的问题是:真的可以将某些编辑器工具包与某些文件类型相关联吗?

【问题讨论】:

  • 正如我在您之前的问题stackoverflow.com/questions/7525737/… 中已经提到的: file 名称与它无关!问题出在其他地方...
  • 但这很奇怪。如果文件是 test.html,它可以工作,如果文件已重命名为 test.htmx,它就不能工作。 (内容类型始终为 text/plain。HTML 的事件。)

标签: java swing jeditorpane


【解决方案1】:

设置您的 EditorKit 并使用该套件的 read() 方法将文件传递到那里。

read 方法中使用的阅读器应该了解如何解析内容。

【讨论】:

  • 不幸的是,这是不可能的。无论如何,您都需要将您的编辑器工具包与适当的 mime 相关联。然后它以相同的方式工作:您更改扩展名,然后看到包含标记的纯文本。
  • 你能粘贴示例代码吗?它对我不起作用。 HTML 文件已加载,但仅使用标签。文本显示在一个博客中,将所有段落和表格的内容合并在一起。
  • 内容类型用于从剪贴板获取正确的内容。例如。当您在 MS Word 中复制时,剪贴板中会放置多种不同的类型(纯文本、html、rtf 和二进制内容)。当您使用 read() 方法时,它只有一个可以处理特定内容的阅读器(为此开发的工具包)。
【解决方案2】:

非常感谢斯坦尼斯拉夫。在他的例子中(见the last page of article,方法initEditor())我找到了正确的方法。错误在于命令的顺序。这行得通:

public void openFile(String fileName) throws IOException {
    editor.setEditorKit(new ModifiedHTMLEditorKit());
    ModifiedHTMLDocument doc = (ModifiedHTMLDocument)editor.getDocument();
    try {
        editor.getEditorKit().read(new FileReader(fileName), doc, 0);
    }
    catch (BadLocationException b) {
        throw new IOException("Could not fill data into editor.", b);
    }
}

然后我打电话给openFile("test.xhtbm"),一切顺利。

【讨论】:

    【解决方案3】:

    你可以:

    static{
        // register EditorKit for plaintext content
        JEditorPane.registerEditorKitForContentType( "text/plain", "HtmlEditorKit" );
    }
    

    在你之前:

    public static void main(String[] args){...}

    抱歉回复晚了!

    【讨论】:

      猜你喜欢
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 2012-03-14
      相关资源
      最近更新 更多