我不知道这是否可能,但我想要做的是保存样式文档(用户可以更改文本:粗体,下划线,斜体和3种大小的字体).doc文件 - 所以他可以在以后用任何其他支持样式文本的文本编辑器打开它。
我编写了下面的代码...编辑器工作,我可以在文本上应用样式,但是当我保存时,它将文本保存为黑色,没有样式。我无法弄清问题在哪里。也许这些行动不会拯救。我试着和作家以及缓冲的作家一起尝试但是没有用。我也尝试使用HTML编辑器套件,它根本不起作用 - 它保存了一个空白文档。
也许有人知道如何保存样式?感谢帮助:)
public class EditFrame extends javax.swing.JFrame {
JFrame frameEdit = this;
File file; //A file I would like to save to -> fileName.doc
StyledDocument doc;
HashMap<Object, Action> actions;
StyledEditorKit kit;
public EditFrame() {
super();
initComponents();
JMenu editMenu = createEditMenu();
}
protected JMenu createEditMenu() {
JMenu menu = editMenu;
Action action = new StyledEditorKit.BoldAction();
action.putValue(Action.NAME, "Bold");
menu.add(action);
action = new StyledEditorKit.ItalicAction();
action.putValue(Action.NAME, "Italic");
menu.add(action);
//...
return menu;
}
//I'm guessing this doesn't work correctly too (doesn't read styles), but this is another subject :)
public void readFile(File f) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(f), "windows-1250"));
textPane.read(reader, null);
textPane.requestFocus();
} catch (IOException ex) {
Logger.getLogger(EditFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
//SAVE METHOD
private void save(java.awt.event.ActionEvent evt) {
try {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
kit = (StyledEditorKit) textPane.getEditorKit();
doc = (StyledDocument) textPane.getDocument();
kit.write(out, doc, 0, doc.getLength());
} catch (FileNotFoundException ex) {
Logger.getLogger(EditFrame.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedEncodingException | BadLocationException ex) {
Logger.getLogger(EditFrame.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(EditFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new EditFrame().setVisible(true);
}
});
}
}
答案 0 :(得分:2)
您可以使用支持RTFEditorKit
(RTF)的Rich Text Format。许多文字处理器,包括MS Word,都可以使用这种格式。坚持write()
到OutputStream
,写出“适合这种内容处理程序的格式”。另一个使用Writer
的“将”作为纯文本写入给定的流。“
为什么
StyledEditorKit
无效?
StyledEditorKit
从DefaultEditorKit
获取write()
实现,“将文本视为纯文本。” StyledEditorKit
在内部存储样式文本,但它不知道任何外部格式。您必须转到其中一个子类HTMLEditorKit
或RTFEditorKit
,才能获得覆盖默认write()
的内容。重写的方法知道如何将内部格式转换为外部格式,如RTF。