java - Java/Swing 中的高级 RTFEditorKit

标签 java swing rtf jtextpane

我已经使用 JTextPane 和 AdvancedRTFEditorKit 在 java/swing 中创建了一个编辑器,我从这里找到了它(使用它而不是 RTFEditorKit,因为它已过时),但是如果你可以说这是一个问题,那么我有一个“问题”,使用 AdvancedRTFEditorKit 我只能打开我用它创建的文件,例如我无法打开 .txt、.java、.cpp、.c,我只能打开我使用创建的文件我的编辑。这正常吗?或者我做错了什么?还有其他人使用过 AdvancedRTFEditorKit 吗?

谢谢大家, 很高兴很快就能看到答案!

我使用过这个 RTF 编辑器套件:click here!

这里是 SSCCE...

 package sscceeditor;
    import java.io.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.text.BadLocationException;
    import rtf.AdvancedRTFDocument;
    import rtf.AdvancedRTFEditorKit;

class ExampleFrame extends JFrame{
    private JMenuBar bar = new JMenuBar();
    private JMenu fileMenu = new JMenu("File");
    private JMenuItem saveItem = new JMenuItem("Save");
    private JMenuItem loadItem = new JMenuItem("Load");
    private JTextPane txtPane = new JTextPane(new AdvancedRTFDocument());;
    private JScrollPane scroller = new JScrollPane(txtPane);
    private JFileChooser chooser = new JFileChooser();
    private AdvancedRTFEditorKit rtfKit = new AdvancedRTFEditorKit();

    //ctor begins...
    public ExampleFrame(){
        super("Example Editor");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(500, 400);
        this.setLocationRelativeTo(null);

        saveItem.addActionListener(new SaveHandler());
        loadItem.addActionListener(new LoadHandler());


        //set the kit...
        txtPane.setEditorKit(rtfKit);

        //create the menu...
        fileMenu.add(saveItem);
        fileMenu.add(loadItem);
        bar.add(fileMenu);
        this.setJMenuBar(bar);

        //create the main panel...
        JPanel mainPane = new JPanel();
        mainPane.setLayout(new BorderLayout());
        mainPane.add(BorderLayout.CENTER , scroller);

        this.setContentPane(mainPane);

    }//end of ctor.

    //inner event handler classes...
    class SaveHandler implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            int response = chooser.showSaveDialog(ExampleFrame.this);

            if(response == JFileChooser.APPROVE_OPTION){

                try(BufferedWriter bw = new BufferedWriter(
                        new FileWriter(chooser.getSelectedFile().getPath())))
                {
                    txtPane.setText("");

                    rtfKit.write(bw, txtPane.getDocument() , 0 , txtPane.getDocument().getLength());

                    bw.close();
                }catch(IOException | BadLocationException ex){
                    System.err.println(ex);
                }


            }
        }//end of method.

    }

    class LoadHandler implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            int response = chooser.showOpenDialog(ExampleFrame.this);

            if(response == JFileChooser.APPROVE_OPTION){

                try(BufferedReader bw = new BufferedReader(
                        new FileReader(chooser.getSelectedFile().getPath())))
                {
                    txtPane.setText("");

                    rtfKit.read(bw, txtPane.getDocument() , 0 );

                    bw.close();
                }catch(IOException | BadLocationException ex){
                    System.err.println(ex);
                }


            }
        }//end of method.

    }


}//end of class ExampleFrame.


public class SSCCEeditor {

    public static void main(String... args) {
        SwingUtilities.invokeLater(new Runnable(){

            @Override
            public void run() {
                new ExampleFrame().setVisible(true);
            }

        });
    }
}

最佳答案

要打开常用的 txt 文件,您可以使用

getDocument().remove(0, getDocument().getLength());
getDocument().insertString(0,theFileContent, new SimpleAttributeSet());

关于java - Java/Swing 中的高级 RTFEditorKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16902611/

相关文章:

Java JFileChooser 后退按钮

java - Android 消息/处理程序机制 - 安全吗?

java - java中如何触发静态代码的执行?

java - Activity A 调用 B,B 调用 C,需要 C 将数据发送回 A

wpf - 将 WPF RichTextBox 序列化为 XAML 与 RTF

c# - 从 RTF 文本中获取纯文本

ms-word - 如何在 Microsoft Word 2010 查看的 RTF 文档中居中对齐页脚和页眉?

java - 为具有非默认构造函数和依赖注入(inject)的类创建 Mockito 测试

java - 通过 ezjcom 在 swing 中运行 flash swf 时缺少 dll

java - 如何使用netbeans 7在java swing中选择当前组合框中的值时使另一个组合框可见