2011-09-23 111 views
1

我有一个微不足道的问题。我需要使用自定义编辑器工具将现有文件加载到JEditorPane。 我有一个编辑工具包,一个扩展名的文件,我需要强制JEditorPane识别我的文件并使用我的编辑工具包。我只发现,这是可能的,但没有任何方法。JEditorPane和自定义编辑器套件

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

其实问题是:是否真的有可能将一些编辑器套件与某种文件类型关联?

+1

正如我已经在您的上一个问题中提到http://stackoverflow.com/questions/7525737/how-to-open-html-file-having-another-extension-in-in-jtextpane:_file_名称没有什么用它来做!问题在别的地方... – kleopatra

+0

但它很奇怪。如果文件是test.html,则它可以工作,如果文件已被重命名为test.htmx,则不起作用。 (内容类型始终是text/plain。HTML的事件。) –

回答

2

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

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

+0

不幸的是,这是不可能的。无论如何,您需要将编辑器套件与适当的MIME关联。然后它以相同的方式工作:更改扩展名,然后看到包含标记的纯文本。 –

+0

可以粘贴示例代码吗?它不适合我。该HTML文件被加载,但标签只消耗。文本显示在一个博客中,将所有段落和表格的内容合并在一起。 –

+0

内容类型用于从剪贴板获取正确的内容。例如。当您在MS Word中复制时,会将多种不同类型放置在剪贴板(纯文本,html,rtf和二进制内容)中。当你使用read()方法时,它只有一个可以与特定内容一起工作的Reader(开发套件)。 – StanislavL

0

非常感谢斯坦尼斯拉夫。在他的例子中(见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")和一切都没有摩擦。

0

,你可以:

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

你的面前:

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

对不起,反应迟缓!