Java实现多文档文本编辑器

多文档文本编辑器(Qt)       废了一下午的时间,结合着课本终于把这个实例给弄出来了,中间错误百出,真是学习的过程贼痛苦。       原来写过一篇java实现的多文档编辑器,那个确实是自己写的,界面及其难看,毫无健壮性,操作稍微错一步就得崩,不过用这玩 意应付老师还可以的哈哈。       下面写的是使用C++的Qt界面设计的一个多文本编辑器,界面好看了许多,而且操作起来不存在bug,功能上可能少一点,没有添加... 阅读详情

java实现多文档文本编辑器

编辑器界面比较简单,但功能较为全面,可以保存,另存,打开文件,复制,粘贴,撤销,剪切,字体设置,部分文字的字体设置,部分文字的颜色设置,字数统计,查找,替换等功能。
这里写图片描述

package 编辑器;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;   //Date needed
import java.text.SimpleDateFormat;
import java.io.*;
import javax.swing.event.*;
import sun.audio.*;
public class FontDialog extends JDialog implements ActionListener,ItemListener
{   static final int OK=1,NO=0;public int message=-1;
    private JButton OK_but,NO_but;
    private Choice cho01,cho02,cho03,cho04;
    public String str01,str02;
    public FontDialog(JFrame f,String str,boolean b)
    {
        super(f,str,b);
        Container cont = getContentPane();

        Font []font  = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
        String []fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); 
        cho01 = new Choice();
        for(int i = fontNames.length-1;i>=0;i--)
        {
           cho01.add(fontNames[i]);
        }
        cho02 = new Choice();
        cho02.setEnabled(true);
        for(int s = 10;s<73;s=s+2)
        {
          cho02.add(Integer.toString(s));
        }
        cho02.select(5);

        cho01.addItemListener(this);
        cho02.addItemListener(this);

        cont.setLayout(new FlowLayout(FlowLayout.LEFT));
        JLabel jll = new JLabel("字体",JLabel.LEFT);
        cont.add(jll);
        cont.add(cho01);
        jll = new JLabel("大小",JLabel.LEFT);
        cont.add(jll);cont.add(cho02);

        //str01 = cho01.getItem(cho01.getSelectedIndex());
        //str02 = cho02.getItem(cho02.getSelectedIndex());

        OK_but=new JButton("确定");
        OK_but.addActionListener(this);
        NO_but=new JButton("取消");
        NO_but.addActionListener(this);

        cont.add(OK_but);
        cont.add(NO_but);
        //setSize(380,120);
        setBounds(400,200,380,120);
        setResizable(false); 
        setVisible(true);
    }
    public void actionPerformed(ActionEvent ev)
    {
        if(ev.getSource()==OK_but)
        {
            message=OK;
            setVisible(false);
        }

        if(ev.getSource()==NO_but)
        {   message=NO;
            setVisible(false);
            setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        }
    }
    public void itemStateChanged(ItemEvent e)
    {
        str01 = cho01.getItem(cho01.getSelectedIndex());
        str02 = cho02.getItem(cho02.getSelectedIndex());
    }
}
package 编辑器;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.border.EmptyBorder;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Document;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.UndoManager;
import copy.TextEditBox;
import copy1.FontDialog;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JMenu;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Rectangle;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.Icon;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.awt.event.ActionEvent;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JToolBar;
public class MainView extends JFrame implements ActionListener,FocusListener, 
MouseListener,CaretListener,UndoableEditListener {

    private JPanel contentPane;
    private UndoManager manager; 
    /**
     * Create the frame.
     */
    private JComboBox com1,com2;// 字体、字号组合框  
    String filename;
    private int key, j,count;
    private JLabel lblStatus;
    private File file01,file02;
    private JFileChooser jfc;
    private JTextPane  jta[]=new JTextPane[20],jep;//JTextArea jt;
    private int close_i = 0,i = 0,k=0,TabNum;
    private JScrollPane jsp[]=new JScrollPane[20];
    private JTabbedPane tab1,tab;
    private JButton b3,b1,b6,button_1,button3,button9,button_2,button_3,button_4,button_5,button_7,button8,btn1,btn2;
    private JMenuItem m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,mnNew3,mnNew4,mnNew2,item,item1;
    private JToolBar toolBar;
    private JTextField tf_search;  
    private JButton button_next;  
    private JMenuItem menuItem_3;
    SimpleAttributeSet set=new SimpleAttributeSet();
    SimpleAttributeSet set1=new SimpleAttributeSet();
    int start,length,start1,length1;
    public MainView() {
        setTitle("多页面文本编辑器");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 780, 509);

        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        JMenu menu = new JMenu("文件");
        menu.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        menuBar.add(menu);

        mnNew2 = new JMenuItem("\u65B0\u5EFA");
        mnNew2.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        menu.add(mnNew2);
        mnNew2.addActionListener(this);

        m1 = new JMenuItem("\u6253\u5F00");
        m1.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        menu.add(m1);
        m1.addActionListener(this);

        m2 = new JMenuItem("\u4FDD\u5B58");
        m2.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        menu.add(m2);
        m2.addActionListener(this);

        menuItem_3 = new JMenuItem("\u53E6\u5B58\u4E3A");
        menuItem_3.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        menuItem_3.addActionListener(this);
        menu.add(menuItem_3);

        mnNew3 = new JMenuItem("\u5173\u95ED\u5F53\u524D\u9875");
        mnNew3.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        menu.add(mnNew3);

        item = new JMenuItem("\u5173\u95ED\u5168\u90E8\u9875");
        item.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        menu.add(item);
        item.addActionListener(this);
        mnNew3.addActionListener(this);

        JMenu mnNewMenu = new JMenu("编辑");
        mnNewMenu.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        menuBar.add(mnNewMenu);

        m6 = new JMenuItem("\u64A4\u9500");
        m6.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        mnNewMenu.add(m6);
        m6.addActionListener(this);

        mnNew4 = new JMenuItem("\u526A\u5207");
        mnNew4.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        mnNewMenu.add(mnNew4);
        mnNew4.addActionListener(this);

        m3 = new JMenuItem("\u590D\u5236");
        m3.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        mnNewMenu.add(m3);
        m3.addActionListener(this);

        m4 = new JMenuItem("\u7C98\u8D34");
        m4.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        mnNewMenu.add(m4);
        m4.addActionListener(this);

        m7 = new JMenuItem("\u67E5\u627E");
        m7.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        mnNewMenu.add(m7);

        item1 = new JMenuItem("\u5168\u9009");
        item1.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        item1.addActionListener(this);
        mnNewMenu.add(item1);m7.addActionListener(this);

        JMenu mnNewMenu_1 = new JMenu("格式");
        mnNewMenu_1.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        menuBar.add(mnNewMenu_1);

        m8 = new JMenuItem("\u5B57\u4F53");
        m8.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        mnNewMenu_1.add(m8);
        m8.addActionListener(this);

        m9 = new JMenuItem("\u5B57\u4F53\u989C\u8272");
        m9.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        mnNewMenu_1.add(m9);
        m9.addActionListener(this);

        m10 = new JMenuItem("\u80CC\u666F\u989C\u8272");
        m10.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        mnNewMenu_1.add(m10);

        JMenu menu_1 = new JMenu("\u5DE5\u5177");
        menu_1.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 16));
        menuBar.add(menu_1);

        JMenuItem menuItem = new JMenuItem("\u5B57\u6570\u7EDF\u8BA1");
        menuItem.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        menu_1.add(menuItem);
        menuItem.addActionListener(new ActionListener() {//字数统计
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                 int count=0;  
                    for(int i=0;i<jep.getText().length();i++){  
                        if(!jep.getText().substring(i,i+1).equals(" ")){  
                            count++;  
                        }  
                    }  
                    JOptionPane.showMessageDialog(MainView.this, "文本框中一共有"+count+"个字符!"); 
            }
        });

        JMenuItem menuItem_1 = new JMenuItem("\u67E5\u627E");
        menuItem_1.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        menu_1.add(menuItem_1);

        menuItem_1.addActionListener(new ActionListener() {//查找
             public void actionPerformed(ActionEvent e) {
                    k=0;
                    new MessageJDialog();  
                    button_next.addActionListener(new ActionListener() {  
                        public void actionPerformed(ActionEvent e) {  
                            String str_search=tf_search.getText();  
                            int len = str_search.length();  
                            for (int i = key; i < jep.getText().length() - len + 1; i++) {  
                                String str_record = jep.getText().substring(i, i + len);  
                                if (str_record.equals(str_search)) {  
                                    key = i + 1;  
                                    jep.requestFocus();  
                                    jep.select(i, i + len);  
                                    return;  
                                }  
                            }  
                        }
                    });
             }
        });

        JMenuItem menuItem_2 = new JMenuItem("\u66FF\u6362");
        menuItem_2.setFont(new Font("Microsoft YaHei UI", Font.PLAIN, 14));
        menu_1.add(menuItem_2);
        menuItem_2.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {  
                    String str_replace=JOptionPane.showInputDialog(MainView.this,  
                            "请输入你要替换的字符串:" );  
                    String str_replacelater=JOptionPane.showInputDialog(MainView.this,  
                            "请输入你要用来替换的内容:" );  
                    int len=str_replace.length();  
                    for(int i=0;i<jep.getText().length()-len+1;i++){  
                        String str_record=jep.getText().substring(i, i+len);  
                        if(str_record.equals(str_replace)){  
                            Document doc=jep.getDocument();
                            try {
                                doc.remove(i, len);
                                doc.insertString(i, str_replacelater,set);
                            } catch (BadLocationException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            }


                        }  
                    }  
                }  
        });

        m10.addActionListener(this);
        contentPane = new JPanel();
        contentPane.setLayout(null);
        setContentPane(contentPane);
        ImageIcon image=new ImageIcon("D:\\eclipse-workspace\\04107204刘聪\\save.gif");
        image.setImage(image.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT));
        ImageIcon image1=new ImageIcon("D:\\eclipse-workspace\\04107204刘聪\\open.gif");
        image1.setImage(image1.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT));
        ImageIcon image11=new ImageIcon("D:\\eclipse-workspace\\04107204刘聪\\cut.gif");
        image11.setImage(image11.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT));
        ImageIcon image2=new ImageIcon("D:\\eclipse-workspace\\04107204刘聪\\copy.gif");
        image2.setImage(image2.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT));
        ImageIcon image3=new ImageIcon("D:\\eclipse-workspace\\04107204刘聪\\Font.png");
        image3.setImage(image3.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT));
        ImageIcon image4=new ImageIcon("D:\\eclipse-workspace\\04107204刘聪\\FontColor.png");
        image4.setImage(image4.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT));
        ImageIcon image5=new ImageIcon("D:\\eclipse-workspace\\04107204刘聪\\加粗.png");
        image5.setImage(image5.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT));
        ImageIcon image6=new ImageIcon("D:\\eclipse-workspace\\04107204刘聪\\new.gif");
        image6.setImage(image6.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT));
        ImageIcon image7=new ImageIcon("D:\\eclipse-workspace\\04107204刘聪\\斜体.png");
        image7.setImage(image7.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT));
        ImageIcon image8=new ImageIcon("D:\\eclipse-workspace\\04107204刘聪\\下划线.png");
        image8.setImage(image8.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT));
        TabNum=0;
        //jta=new JEditorPane[100]; 
        //jsp=new JScrollPane[100];

        for(int i=TabNum;i>0;i--)
        {   jta[TabNum-1]=new JTextPane();
            jsp[TabNum-1]=new JScrollPane(jta[TabNum-1]); 

            jta[TabNum-1].getDocument().addUndoableEditListener(manager);
            jta[TabNum-1].addCaretListener(this);
            jsp[TabNum-1].setViewportView(jta[TabNum-1]);
            if(TabNum!=0)
            {
                tab.addTab("无标题"+i,jsp[TabNum-1]);
            }               
        }

        tab = new JTabbedPane(JTabbedPane.TOP);
        tab.setBounds(24, 46, 693, 390);
        contentPane.add(tab);

        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();  
        String[] fontsName = ge.getAvailableFontFamilyNames(); // 获得系统字体  

        String sizestr[] = { "12", "14", "16", "18", "20", "22" ,"24","26","28","30","32","34","36","38","40","42","44","46","48","50"
                ,"52","54","56","58","60","62","64","66","68","70"};  

        toolBar = new JToolBar();
        toolBar.setBounds(0, 0, 774, 25);
        contentPane.add(toolBar);

        b6 = new JButton((Icon) null);
        toolBar.add(b6);
        b6.setIcon(image6);

        b1 = new JButton();
        toolBar.add(b1);
        b1.setIcon(image1);

         b3 = new JButton();
         toolBar.add(b3);
         b3.setIcon(image);

         button3 = new JButton((Icon) null);
         toolBar.add(button3);
         button3.setIcon(image11);

         button9 = new JButton((Icon) null);
         toolBar.add(button9);
         button9.setIcon(image2);

         JButton button5 = new JButton((Icon) null);
         toolBar.add(button5);
         button5.setIcon(image5);
         button5.addActionListener(new ActionListener() {//加粗
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String fontname = (String)com1.getSelectedItem();//获得字体名  
                int size =Integer.parseInt((String)com2.getSelectedItem());  
                Font font = jep.getFont();
                int style = font.getStyle(); 
                style = style ^ 1;  
                jep.setFont(new Font(fontname, style, size));  
            } 
         });

         com1 = new JComboBox(fontsName);
         toolBar.add(com1);
         com2 = new JComboBox(sizestr);  
         toolBar.add(com2);
         com2.setEditable(true);
         com1.addActionListener(new ActionListener() {//设置字体
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
               String fontname = (String)com1.getSelectedItem();//获得字体名  
               Font font = jep.getFont();     //获得文本区的当前字体对象  
               int style = font.getStyle();      //获得字形  
               int size = Integer.parseInt((String)com2.getSelectedItem());   
               jep.setFont(new Font(fontname, style, size));  
            }
         });
         com2.addActionListener(new ActionListener() {//设置字号

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                    String fontname = (String)com1.getSelectedItem();//获得字体名  
                    int size = Integer.parseInt((String)com2.getSelectedItem());  
                    Font font = jep.getFont();     //获得文本区的当前字体对象  
                    int style = font.getStyle();      //获得字形  
                    jep.setFont(new Font(fontname, style, size));  
            } 
         });

         JButton button_7_1 = new JButton((Icon) null);
         toolBar.add(button_7_1);
         button_7_1.setIcon(image7);
         button_7_1.addActionListener(new ActionListener() {//斜体
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                 String fontname = (String)com1.getSelectedItem();//获得字体名  
                    Font font = jep.getFont();     //获得文本区的当前字体对象  
                    int style = font.getStyle();      //获得字形  
                    int size = font.getSize();  
                    style = style ^ 2;  
                    jep.setFont(new Font(fontname, style, size));  
            } 
         });

         btn1 = new JButton();
         toolBar.add(btn1);
         btn1.setFont(new Font("宋体", Font.PLAIN, 12));
         btn1.setText("A+");
         btn1.addActionListener(new ActionListener() {//增加字号
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                 String fontname = (String)com1.getSelectedItem();//获得字体名  
                 int size = Integer.parseInt((String)com2.getSelectedItem())+2;   
                 com2.setSelectedItem(String.valueOf(size));
                 Font font = jep.getFont();     //获得文本区的当前字体对象  
                 int style = font.getStyle();      //获得字形  
                 jep.setFont(new Font(fontname, style, size));  
            }
         });

         JButton btn2_1 = new JButton((Icon) null);
         toolBar.add(btn2_1);
         btn2_1.setText("A-");
         btn2_1.setFont(new Font("宋体", Font.PLAIN, 12));
         btn2_1.addActionListener(new ActionListener() {//减小字号
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String fontname = (String)com1.getSelectedItem();//获得字体名  
                int size = Integer.parseInt((String)com2.getSelectedItem())-2;
                com2.setSelectedItem(String.valueOf(size));
                Font font = jep.getFont();     //获得文本区的当前字体对象  
                int style = font.getStyle();      //获得字形  
                jep.setFont(new Font(fontname, style, size));  
            }
         });
         button8 = new JButton((Icon) null);
         toolBar.add(button8);
         button8.setIcon(image4);
         button8.addActionListener(this);
         button_7_1.addActionListener(this);
         button5.addActionListener(this);
         button9.addActionListener(this);
         button3.addActionListener(this);
         b3.addActionListener(this);
        b1.addActionListener(this);
        b6.addActionListener(this);

        manager=new UndoManager();

        tab.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                p(e);
            }
            public void p(MouseEvent e) {
                for(int i=0;i<=TabNum;i++) {
                    Rectangle rect=tab.getBoundsAt(i);
                    if(rect.contains(e.getX(),e.getY())) {
                        count=i;
                    }
                }
            }
        });


    }
     public void actionPerformed(ActionEvent e) {
                   if(e.getSource()==b1||e.getSource()==m1) {//打开
                    jta[TabNum]=new JTextPane();
                    jta[TabNum].addFocusListener(this);        
                    jta[TabNum].getDocument().addUndoableEditListener(manager);
                    jta[TabNum].addCaretListener(this);    
                    // jta[TabNum].setLineWrap(true);

                    dakai(jta[TabNum]);
                    //TabNum++;
                    jsp[TabNum]=new JScrollPane(jta[TabNum],JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                            JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
                    tab.addTab(filename,jta[TabNum]);

                    jep=jta[0];
                    tab.setVisible(true);
                    j=TabNum-1;
                   }else if(e.getSource()==b6||e.getSource()==mnNew2) {//新建
                       TabNum++;
                    jta[TabNum-1]=new JTextPane();
                    jta[TabNum-1].addFocusListener(this);
                    jsp[TabNum-1]=new JScrollPane(jta[TabNum-1],JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                    JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);         
                    jta[TabNum-1].getDocument().addUndoableEditListener(manager);
                    jta[TabNum-1].addCaretListener(this);
                    //jta[TabNum-1].setLineWrap(true);
                    jsp[TabNum-1].setViewportView(jta[TabNum-1]);           
                    tab.addTab("无标题"+TabNum,jsp[TabNum-1]);
                    jep=jta[0];       
                    tab.setVisible(true);       
                    jta[TabNum-1].setFont(new Font((String) com1.getSelectedItem(),Font.PLAIN,Integer.parseInt((String)com2.getSelectedItem())));
                   }else if(e.getSource()==b3||e.getSource()==m2) {//保存
                       baocun(jep);
                   }else if(e.getSource()==menuItem_3){
                       lingcun(jep);
                   }else if(e.getSource()==mnNew3) {//关闭
                       close(jep);
                   }else if(e.getSource()==item) {//全部关闭
                       tab.setVisible(false);
                   }else if(e.getSource()==m3||e.getSource()==button9) {//复制
                       jep.copy();
                   }else if(e.getSource()==m4) {//粘贴
                       jep.paste();
                   }else if(e.getSource()==item1) {//全选
                       jep.selectAll();
                   }else if(e.getSource()==mnNew4||e.getSource()==button3) {//剪切
                       jep.cut();
                   }else if(e.getSource()==m8) {//设置文字
                       try {
                        wenzi(jep);
                    } catch (BadLocationException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                   }else if(e.getSource()==m6) {//撤销
                       Undo();
                   } else if(e.getSource()==m9||e.getSource()==button8) {
                       try {
                        color(jep);
                    } catch (BadLocationException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                   }else if(e.getSource()==m10) {
                       try {
                        backcolor(jep);
                    } catch (BadLocationException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

                   }

     }
        public void wenzi(JTextPane jep2) throws BadLocationException
        {   
            FontDialog fdg = new FontDialog(this,"文字设置",true);
            start=jep2.getSelectionStart();
            length= jep2.getSelectionEnd()-start;
            String ss=jep2.getSelectedText();
            if(fdg.message==1)
            {  

            StyleConstants.setFontSize(set, Integer.parseInt(fdg.str02));
            StyleConstants.setFontFamily(set, fdg.str01);
            Document doc=jep2.getDocument();
            doc.remove(start, length);
            doc.insertString(start, ss, set);
            }   
        }
     public void backcolor(JTextPane jep2) throws BadLocationException {
         Color newColor=JColorChooser.showDialog(this,"文字颜色选择器",m9.getBackground());
            int start=jep2.getSelectionStart();
            int length= jep2.getSelectionEnd()-start;
            String ss=jep2.getSelectedText();
            StyleConstants.setBackground(set, newColor);
            Document doc=jep2.getDocument();
            doc.remove(start, length);
            doc.insertString(start, ss, set);
     }
     public void color(JTextPane jep2) throws BadLocationException {
            Color newColor=JColorChooser.showDialog(this,"文字颜色选择器",m9.getBackground());
            start1=jep2.getSelectionStart();
            length1= jep2.getSelectionEnd()-start1;
            String ss=jep2.getSelectedText();
            if(start1==start&&length==length1) {
                StyleConstants.setForeground(set, newColor);
                Document doc=jep2.getDocument();
                doc.remove(start, length);
                doc.insertString(start, ss, set);
            }else {
                Font font=jep2.getFont();
                StyleConstants.setFontFamily(set1, font.getFontName());
                StyleConstants.setFontSize(set1, font.getSize());
                StyleConstants.setForeground(set1, newColor);
                Document doc=jep2.getDocument();
                doc.remove(start, length);
                doc.insertString(start, ss, set1);
            }

     }
    private void dakai(JTextPane jta2)//打开
    {   
        jfc = new JFileChooser();
            int se = jfc.showOpenDialog(this);
            if(se==JFileChooser.APPROVE_OPTION)
            {
                try
                {
                    file01=jfc.getSelectedFile();
                    filename =file01.getName();  
                    FileReader fr = new FileReader(file01);
                    BufferedReader rd = new BufferedReader(fr);
                    String s = null;
                    Byte []buf = new Byte[64];
                    String open = null;
                    while((s=rd.readLine())!=null)
                    {
                        jta2.replaceSelection(s+"\n");
                    }
                }
                catch(IOException exx)
                {
                    exx.printStackTrace();
                }

            }
    }
    private void lingcun(JTextPane jep2)//另存
    {
        jfc = new JFileChooser();
            int se = jfc.showSaveDialog(this);
            if(se==JFileChooser.APPROVE_OPTION)
            {
                try
                {
                    String sr_s = jfc.getSelectedFile().getAbsolutePath();
                    FileOutputStream fos = new FileOutputStream(new File(sr_s));
                    OutputStreamWriter osw = new OutputStreamWriter(fos);
                    String saveString=jep2.getText().replaceAll("\n","\r\n"); 
                    osw.write(saveString);
                    osw.flush();
                    osw.close();   
                }
                catch(IOException es)
                {
                    es.printStackTrace();
                }       
            }
    }
    private void baocun(JTextPane jep2)//保存
    {
            try
            {
                String sr_s = jfc.getSelectedFile().getAbsolutePath();
                FileOutputStream fos = new FileOutputStream(new File(sr_s));
                OutputStreamWriter osw = new OutputStreamWriter(fos);
                String saveString=jep2.getText().replaceAll("\n","\r\n"); 
                osw.write(saveString);
                osw.flush();
                osw.close();   
            }
            catch(IOException es)
            {
                es.printStackTrace();
            }   
    }
    public void close(JTextPane jep2) {
           tab.remove(count);
    }
    private void Undo()
    {
        try
        {
            manager.undo();

        }
        catch(CannotRedoException e1)
        {

        }   
    }

    public static void main(String []args) {
        MainView v=new MainView();
        v.setVisible(true);
    }
    @Override
    public void undoableEditHappened(UndoableEditEvent arg0) {
        // TODO Auto-generated method stub

    }
    @Override
    public void caretUpdate(CaretEvent arg0) {
        // TODO Auto-generated method stub

    }
    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }
    @Override
    public void mouseEntered(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }
    @Override
    public void mouseExited(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }
    @Override
    public void mousePressed(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }
    @Override
    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }
    @Override
    public void focusGained(FocusEvent et) {
        // TODO Auto-generated method stub
        if(et.getSource()==jta[0])
            jep=jta[0];
        if(et.getSource()==jta[1])
            jep=jta[1];
        if(et.getSource()==jta[2])
            jep=jta[2];
        if(et.getSource()==jta[3])
            jep=jta[3];
        if(et.getSource()==jta[4])
            jep=jta[4];         
        if(et.getSource()==jta[5])
            jep=jta[5];
        if(et.getSource()==jta[6])
            jep=jta[6];
        if(et.getSource()==jta[7])
            jep=jta[7];
        if(et.getSource()==jta[8])
            jep=jta[8];
        if(et.getSource()==jta[9])
            jep=jta[9];  
    }
    private class MessageJDialog extends JDialog {  
        private JLabel lable_tip;  
        private JPanel panel_next = new JPanel();  
        private JPanel panel_search = new JPanel();  
        private JPanel panel_tip = new JPanel();  

        public MessageJDialog() {  
            super(MainView.this, "查找");  
            this.setSize(300, 170);  
            this.setLocation(MainView.this.getX() + 200,  
                    MainView.this.getY() + 200);  
            getContentPane().setLayout(new GridLayout(3, 1));  
            //  
            ImageIcon imageIcon = new ImageIcon("img/search.png");  
            lable_tip = new JLabel("请输入你要查找的字符串:", imageIcon, JLabel.LEFT);  
            panel_tip.add(lable_tip);  
            getContentPane().add(panel_tip);  
            tf_search = new JTextField(20);  
            panel_search.add(tf_search);  
            getContentPane().add(panel_search);  
            button_next = new JButton("查找下一个");  
            panel_next.add(button_next);  
            getContentPane().add(panel_next);  
            this.setVisible(true);  
        }  
    }
    public void focusLost(FocusEvent arg0) {
        // TODO Auto-generated method stub

    }
}
专为Java开发优化的多功能文本编辑器uedit32c实战应用 作为一款专为程序员和系统管理员打造的轻量级高级文本编辑器,uedit32c以“高效、稳定、低资源占用”为核心设计理念,致力于在复杂开发环境中提供流畅的文本处理体验。其原生支持大文件快速加载(如超过1GB的日志文件),结合内存映射技术,避免传统编辑器常见的卡顿问题。# 典型应用场景示例:- 实时查看并搜索服务器日志(access.log, error.log)- 编辑多编码格式配置文件(UTF-8, GBK, ANSI混合)- 批量修改注册表脚本或Shell部署模板。 阅读详情

相关推荐

Notepad++ - 强大的免费Windows文本编辑器

尽管Notepad++已经内置了许多编程语言的语法高亮支持,但在面对特殊文件类型或自定义的编程语言时,可能没有现成的语法文件。在这种情况下,自定义语法高亮就显得尤为重要。自定义可以帮助开发者根据具体需求创建新的语法高亮规则,使得编辑特定类型的文件更加高效。自定义语法高亮的设置步骤如下:打开Notepad++。点击菜单栏的“设置” -> “首选项”。在“首选项”对话框中,选择“语言”标签页。点击“定义新的语言”按钮,打开“定义新的语言”对话框。

weixin_42309599的博客 1955

如何实现多人在线编辑文档?

关于这个问题,我想很多办公或者做项目的小伙伴都遇到过,很多时候想在线编辑一个文档,却发现很多都不支持,更别说多人在线编辑了,那么如何实现这一系列功能,可以看以下操作: 个人在线编辑 1.登录云竹协作(支持网页在线版、PC桌面版、移动版本),找到云盘栏。 2.选择右上角的上传文件,单次上传文件不能大于500M,内存总量不限制。 3.选中上传的文档,上方会出现一排选项,选择编辑即可...

Im_seven的博客 4万+

全面掌握EditPlus:程序员专用多语言文本编辑器

本文还有配套的精品资源,点击获取 简介:EditPlus是一款专为程序员和高级用户设计的多功能文本编辑器,集成了多种编程语言特性。它不仅支持多种编程语言,还具备代码高亮、自动完成、正则表达式搜索、多文档编辑、FTP/SSH支持等强大功能。此外,EditPlus允许用户自定义快捷键和安装插件,从而提升编辑效率和个性化工作空间。这款软件以其高效、稳定和易用性在IT行业内受到好评...

weixin_28931507的博客 1329

Springboot2.x+Websocket+js实现实时在线文本协同编辑,并展示协同用户

展示当前用户以及同时编辑文本的人员名称。编写WebSocketConfig和WebSocketHandler配置类,实现对WebSocket的配置。实现页面实时在线文本协同编辑,且显示当前同时编辑文本的用户。同时打开多个页面,当编辑信息时会显示到同时编辑的用户列表。上面实现为简易实现,仅供参考,可能并不适用一些业务场景。当前用户点击保存时推出当前同时编辑的用户列表。//可以选择没人编辑的时候隐藏当前列表。好久没写前端了,写起来有点费劲!//获取当前文本同时编辑的用户。//点击保存后输入框变为只读。

龙飞的博客 5246

Notepad++:程序员专用的全能文本编辑器

在当今的IT行业中,高效、灵活的文本编辑器对于开发者来说是必不可少的工具。Notepad++是众多编辑器中的佼佼者,它以小巧、功能全面、免费开源而深受欢迎。Notepad++不仅提供了基础的文本编辑功能,还集成了高级特性,如语法高亮、代码折叠、宏记录、正则表达式搜索和替换等,使得它成为处理代码和脚本的强大伙伴。Notepad++支持多种编程语言的语法高亮显示,为用户提供一个清晰的工作环境。其用户友好的界面隐藏着强大的功能,即使是经验丰富的开发者也可以从中找到提高工作效率的新方法。

weixin_35987118的博客 1003

EmEditor7文本编辑器绿色版实战解析

EmEditor7是一款专为程序员和高级用户打造的轻量级文本编辑器,具备强大的功能集与高效的文本处理能力。它支持多文档界面(MDI)、语法高亮、宏录制与执行、正则表达式查找替换等特性,适用于代码编写、日志分析、配置文件编辑等多种场景。其绿色版设计使得用户无需安装即可运行,便于携带与快速部署,特别适合开发人员在不同环境中保持一致的编辑体验。同时,EmEditor7具备良好的扩展性,通过插件机制和自定义配置,用户可以按需增强其功能。

weixin_42576410的博客 1089

java文本编辑器用的什么代码_文本编辑器代码,java版

import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import javax.swing.text.*;//简单的文本编辑器public class EditorDemo extends JFrame {JTextPane textPane = new JTextPane(); //文本窗格...

weixin_39718006的博客 155

全面探索EmEditor文本编辑器的功能特性

EmEditor 是一款流行的文本编辑器,由日本的 YoshihiroاغForEachagForEachAgForEach开发,专为编程设计,同时兼顾了对普通文本编辑的需求。它以高度的可定制性、强大的插件系统以及对大文件的出色支持著称。EmEditor 允许用户根据个人喜好进行语法高亮的自定义设置。这包括颜色、字体、背景等选项。通过“工具”菜单下的“语法高亮设置”,用户可以对支持的编程语言进行个性化的编辑。用户可以根据语言包的默认设置进行修改,也可以完全创建一个新的语法高亮方案。

weixin_42576467的博客 508

【JAVA程序设计教程 第三版 雍俊海】8.8 编写多文档文本编辑器

题目: 请编写一个简单的多文档文本编辑器。要求可以输入文件名,从指定文件中读取数据,并显示在图形界面上。可以编辑显示在图形界面上的数据,而且可以将显示在图形界面上数据写入指定文件中。 思路: ①:首先需要构建一个多文档界面,我采取的是书本8.4.3节讲过的通过 “桌面窗格” 和 “内部框架” 实现多文档界面的方法。具体操作是先从顶层容器A(框架)中获取内容窗格a,然后将桌面窗格B添加到内容窗格a中...

weixin_44197056的博客 829

EditPlus:程序员必备的多功能文本编辑器

EditPlus是Windows平台下一款功能强大的文本编辑器,它为软件开发者提供了一系列便捷的编辑功能。从代码编写到文本处理,EditPlus的多用途性使其成为许多IT专业人士的首选工具。语法高亮能够使代码结构一目了然,尤其当代码量较大时,不同的颜色高亮可以方便开发者快速定位和理解代码逻辑。EditPlus 允许用户进行语法高亮的自定义,以适应不同的编码习惯或公司编码标准,主要操作包括:在菜单栏选择 “Tools” -> “Preferences”。

weixin_28913879的博客 702

EditPlus:高效文本编辑器全面解析与实战应用

EditPlus由韩国开发者Sangil Kim打造,自2000年代初发布以来,始终秉持“轻量、高效、专注”的设计哲学。不同于功能臃肿的集成开发环境(IDE),EditPlus聚焦于文本编辑本质,通过极简界面和高度可定制性,满足开发者对速度与灵活性的双重需求。其核心优势在于启动迅速、资源占用低,即便在老旧硬件上也能流畅运行。虽然 EditPlus 内置了数十种常见语言的语法高亮支持,但在面对新兴语言(如 Go、Rust、TypeScript)或特定领域 DSL(领域专用语言)时,原生支持往往不足。

weixin_35414484的博客 1162

python 文本编辑器推荐win10_程序员最喜欢的15款文本编辑器推荐

很多时候比如编程查看代码或者打开各种文档下我们都会用到文本编辑器,Windows自带的记事本功能很简陋并且打开大文件很慢,因此很多童鞋都会有自己喜欢的一款文本编辑器。在这里,西西挑选前15个最佳的文本编辑器,这些编辑器实际上主要适合程序员!如果觉得这些文本编辑器足够您的使用,欢迎点赞,如果还有更好的,可以给我们推荐哦。1.Notepad++中文版:这是 Windows 记事本一个最好的替换产品,...

weixin_39967120的博客 2274

Java文本编辑器(记事本)完整代码

上传的代码为完成代码,该记事本实现了windows系统中记事本的全部功能,代码清晰,下载即可使用。

EdtiPlus-最好用的文本编辑器+使用技巧集萃

EditPlus是一套功能非常强大的文字编辑器,拥有无限制的Undo/Redo(撤销)、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴簿的功能,能够同步于剪贴簿自动将文字贴进EditPlus的编辑窗口中,让你省去做贴上的步骤。另外它也是一个好用的程序代码编辑器,除了支持HTML, CSS, PHP, ASP, Perl, C/C

autofei的专栏 3306

可用于JAVA实现编辑word,excel文档

实用的工具sdfsfsdfsdfdsfdsfssssssssssssssssssssssss

学好超几何分布的核心公式,破解双色球!

彩票本质是概率游戏,不存在"必中公式"科学投注的核心是风险收益比管理长期投注的期望值始终为负(理论回报率约47%-63%)数学维度:运用概率工具优化策略经济维度:控制投注成本在可承受范围人文维度:将彩票视为社会公益的参与方式通过本文构建的数学模型,彩民可以在概率框架内实现更理性的投注决策。但最终能否收获幸运,仍取决于那个永恒的未知数——概率女神的眷顾。一、超几何分布的核心公式。

weixin_44904675的博客 1万+

JFrame实现连续多文档的读入

JFrame实现连续多文档的读入,JFileChooser.APPROVE_OPTION多选后打印多选的所有路径 啥也不多说了,直接上代码 JFrame实现连续多文档的读入 import java.awt.Button; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.eve...

天妈行空的博客 193

单细胞专题(1) | 单细胞转录组研究样本准备指南(上)

单细胞RNA测序(scRNA-seq)是目前最前沿,能进行大规模实验的转录组研究技术,为理解细胞组成和动态生物学过程提供了很多新的见解。单细胞研究已经为我们理解发育过程,老化和疾病(如癌症)等提供了大量数据。在这里,小编主要就前期的样本准备与保存需注意问题给大家进行讲解,以备大家在不同的研究场景和研究背景下,走好单细胞转录组学研究的第一步。

bioyigene的博客 4231

全功能文本编辑器 Kate 中文绿色版

Kate是KDE桌面环境下的文本编辑器,它是一个开源软件,使用C++编写而成。Kate的目标是成为一个强大、灵活和易于使用的文本编辑器。它支持多个文档同时编辑,可以在同一个窗口中打开多个文档,方便用户进行编辑和比较。Kate还支持多种编程语言的语法高亮,包括C、C++、Java、Python、Perl等等。

fty33333xaio3的博客 608

Rockchip平台之RK3566/3568 OS02N10

文章摘要 本文主要介绍了200W摄像头传感器OS02N10在RK3566平台上的兼容与适配过程。作者基于之前的400W摄像头兼容经验,针对200W摄像头进行了类似的适配工作。文章详细阐述了RK3566芯片的特性和OS02N10传感器的技术参数,包括分辨率、接口和功耗等。适配过程分为三个关键部分:DTS设备树文件配置(定义I2C地址、电源域和GPIO控制等)、驱动文件开发(寄存器初始化和操作)以及XML和JSON配置文件调整(图像参数设置)。作者特别强调了初始化数组中空寄存器终止条件的重要性,并分享了兼容过程

different_xzh的博客 2412

Mac Pro M2芯片成功安装麒麟银河高级服务器虚拟机

本人用的是1、Macbook m2pro芯片 16G+5123、安装homebrew、wegt、qemu。

vagatable_XX的博客 3298
上一篇: Java实现四则运算计算器
下一篇: Java实现XML文件学生通讯录
刺破黎明
博客等级 码龄9年 42粉丝 12原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值