用JAVA编写的文档编辑器源代码

来源:互联网 发布:黄金分析软件哪个好 编辑:程序博客网 时间:2024/04/20 01:03

//简单的类似记事本的文档编辑器

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import java.awt.font.*;
import javax.swing.undo.UndoManager;
public class MyTxt

 public static void main(String[] args)
 
 Aframe frame = new Aframe();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.show();
 }
}
class Aframe extends JFrame
{
 public Aframe()
 {
  setTitle("我的记事本");
  setSize(WIDTH, HEIGHT);
       Container contentPane = getContentPane();
       JPanel txtPanel = new JPanel();
       JPanel comboxPanel = new JPanel();
       JPanel textPanel = new JPanel();
       txtArea=new JTextArea("",17,40);
       JScrollPane scrollPane =new JScrollPane(txtArea);
       txtPanel.add(scrollPane);
       contentPane.add(comboxPanel,BorderLayout.NORTH);
       contentPane.add(txtPanel);
  contentPane.add(textPanel,BorderLayout.SOUTH);
  //Caidan lan:添加主菜单并设置快捷键
  JMenuBar menuBar =newJMenuBar();
  setJMenuBar(menuBar);
  fileMenu=newJMenu("文件(F)");
  editMenu=newJMenu("编辑(E)");
  typeMenu=newJMenu("格式(O)");
  viewMenu=newJMenu("查看(V)");
  helpMenu=newJMenu("帮助(H)");
  aboutMenu=newJMenu("关于(A)");
  fileMenu.setMnemonic('F');
  editMenu.setMnemonic('E');
  typeMenu.setMnemonic('O');
  viewMenu.setMnemonic('V');
  helpMenu.setMnemonic('H');
  aboutMenu.setMnemonic('A');
  menuBar.add(fileMenu);
  menuBar.add(editMenu);
  menuBar.add(typeMenu);
  menuBar.add(viewMenu);
    menuBar.add(aboutMenu);
  menuBar.add(helpMenu);
  //wenjian“文件”菜单的子菜单添加以及设置加速器,监听器
  aa=fileMenu.add(newShowAction("新建"));
  aa.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
  ab=fileMenu.add(newShowAction("打开"));
  ab.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
  ac=fileMenu.add(newShowAction("保存"));
  ac.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
  ad=fileMenu.add(newShowAction("另存为"));
  ad.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
  fileMenu.addSeparator();
  ae=fileMenu.add(newShowAction("页面设置"));
  ae.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK));
  af=fileMenu.add(newShowAction("打印"));
  af.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
  fileMenu.addSeparator();//分割线
  ag=fileMenu.add(newShowAction("退出"));
  ag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
  //bianji“编辑”菜单的子菜单添加以及设置加速器,监听器
  ah=editMenu.add(newShowAction("撤消"));
  editMenu.addSeparator();
  ah.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK));
  ai=editMenu.add(newShowAction("剪切"));
  ai.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
  aj=editMenu.add(newShowAction("复制"));
  aj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
  an=editMenu.add(newShowAction("粘贴"));
  an.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
  ak=editMenu.add(newShowAction("删除"));
  ak.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK));
  editMenu.addSeparator();
  al=editMenu.add(newShowAction("查找"));
  al.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
  am=editMenu.add(newShowAction("全选"));
  am.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
  //geshi“格式”菜单的子菜单添加以及设置加速器,监听器
  zdhh=newJMenu("自动换行(L)");
  zdhh.setMnemonic('L');
  typeMenu.add(zdhh);
  ButtonGroup group =newButtonGroup();
  xz=newJRadioButtonMenuItem("选择");
  xz.addActionListener(newShowAction("选择"));
  xz.setSelected(true);
    qxxz=new JRadioButtonMenuItem("取消");
  qxxz.addActionListener(newShowAction("取消"));
  qxxz.setSelected(true);
  group.add(xz);group.add(qxxz);
  zdhh.add(xz);zdhh.add(qxxz);
  bj=typeMenu.add(newShowAction("背景颜色"));
  bj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
  zt=typeMenu.add(newShowAction("字体"));
  zt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
   //字体弹出框中的“确定”按钮
   que=new Button("确定");
        que.addActionListener(newboxlistener());  
  //chakan“查看”菜单的子菜单添加以及设置加速器,监听器
  ztl=viewMenu.add(newShowAction("状态栏"));
  ztl.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
  //guanyu“关于”菜单的子菜单添加以及设置加速器,监听器
  zzxx=aboutMenu.add(newShowAction("作者信息"));
  zzxx.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
  bq=aboutMenu.add(newShowAction("版权"));
  bq.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B,InputEvent.CTRL_MASK));
  sm=aboutMenu.add(newShowAction("声明"));
  sm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
  //bangzhu“帮助”菜单的子菜单添加以及设置加速器,监听器
  shm=helpMenu.add(newShowAction("说明"));
  shm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
  //文本框底部工具栏的设置
   toolbar2=new JToolBar();
   textPanel.add(toolbar2);
   text1=new JTextField("就绪",10);
   text2=new JTextField("欢迎使用该记事本!",10);
   text3=new JTextField("",10);
   text4=new JTextField("",10);
   textPanel.setLayout(newGridLayout(1, 4));
   toolbar2.add(text1);
        toolbar2.add(text2);
        toolbar2.add(text3);
        toolbar2.add(text4);
        text1.setEditable(false);
        text2.setEditable(false);
        text3.setEditable(false);
        text4.setEditable(false);
       //组合框的设置
  //字体
  zitiLabel=newJLabel("字体");comboxPanel.add(zitiLabel);
  Stringzit[]={"宋体","华文行楷","楷体","黑体","幼圆"};
  zitibox=newJComboBox(zit);
  comboxPanel.add(zitibox);
  //颜色
    yanseLabel=new JLabel("颜色");comboxPanel.add(yanseLabel);
    String yans[]={"黑色","蓝色","绿色","红色","黄色","蓝绿色","浅灰色"};
    yansebox=new JComboBox(yans);
    comboxPanel.add(yansebox);
    //大小
    daxiaoLabel=new JLabel("大小");comboxPanel.add(daxiaoLabel);
    String dax[]={"15","10","5","20","25","30","35","40","..."};
    daxiaobox=new JComboBox(dax);
    comboxPanel.add(daxiaobox);
    zitibox.setEditable(true);
    yansebox.setEditable(true);
    daxiaobox.setEditable(true);
    comboxPanel.setLayout(new FlowLayout(FlowLayout.LEFT));//靠左排列
    //组合框注册监听器
    yansebox.addActionListener(new boxlistener());
    zitibox.addActionListener(new boxlistener());
  daxiaobox.addActionListener(newboxlistener());
  txtPanel.setLayout(newGridLayout(1, 1));
  //实例化“撤销”
  um= new UndoManager ();
  txtArea.getDocument().addUndoableEditListener(um);
 }
 //菜单栏的接口实现
 private class ShowAction extendsAbstractAction
 {
  public ShowAction(Stringname){super(name);}
  public voidactionPerformed(ActionEvent e)
  {
   Objects=e.getSource();
   //新建
   if(s==aa)
   {
               if(txtArea.getText().equals(""))
                {
                           txtArea.setText("");
                   }
              else{
                            int n=JOptionPane.showConfirmDialog(Aframe.this,"无标题记事本已改变。\n想要保存吗?","记事本",JOptionPane.YES_NO_CANCEL_OPTION);
                            if(n==JOptionPane.NO_OPTION){
                                 txtArea.setText("");
                                  setTitle("无标题"+"——"+"记事本");
                                                             
                             else if(n==JOptionPane.YES_OPTION)
                              {
                            save.setVisible(true);  
                          String name=save.getDirectory()+save.getFile();
                           try
                         {
                           FileOutputStream out=new FileOutputStream(name);
                           out.write(txtArea.getText().getBytes());
                           out.close();
                           }
                              catch(IOException a)
                                {
                                System.err.println("保存失败。。!");
                                }
                         
                  }
         

   //打开
   if(s==ab)
   {
    open.setVisible(true);
    Stringname=open.getDirectory()+open.getFile();
    Stringname2=open.getFile();
    setTitle(name2);
    try
    {
     FileInputStreamin=new FileInputStream(name);
     byte[]ia=new byte[in.available()];
     in.read(ia);
     txtArea.setText(newString(ia));
     in.close();
    }
    catch(IOExceptiona)
    {
     System.err.println("获取文件失败!");
    }
     }
   //另存为
   if(s==ad)
    {
    save.setVisible(true);  
    Stringname=save.getDirectory()+save.getFile();
    try
    {
     FileOutputStreamout=new FileOutputStream(name);
     out.write(txtArea.getText().getBytes());
     out.close();
    }
    catch(IOExceptiona)
    {
     System.err.println("保存失败。。!");
    }
    shifulingcun=1;
    }
    //保存
   if(s==ac)
   {
    if(shifulingcun!=1)
    {save.setVisible(true);}
    Stringname=save.getDirectory()+save.getFile();
    try
    {
     FileOutputStreamout=new FileOutputStream(name);
     out.write(txtArea.getText().getBytes());
     out.close();
    }
    catch(IOExceptionb)
    {
     System.err.println("保存文件失败");
    }
   
           
           
    
   //退出
   if(s==ag)
   {
    intselection = JOptionPane.showConfirmDialog(
    Aframe.this,
    "确定退出么?","退出?",
    JOptionPane.OK_CANCEL_OPTION,
    JOptionPane.WARNING_MESSAGE);
 
      if (selection == JOptionPane.OK_OPTION)
      {
       System.exit(0);
      }
     }
     //选择自动换行
     if(s==xz)
     {
      txtArea.setLineWrap(true);
     }
     //取消自动换行
     if(s==qxxz)
     {
      txtArea.setLineWrap(false);
     }
     //背景颜色
   if(s==bj)
   {
          Color color=JColorChooser.showDialog(Aframe.this, "调色板",txtArea.getBackground());
          if(color!=null)
           txtArea.setBackground(color);
           }
     //作者信息
     if (s==zzxx)
   {intselection = JOptionPane.showConfirmDialog(
    Aframe.this,
    "“我的记事本”编写小组成员:刘悦,王征,沈光辉","作者信息",
    JOptionPane.DEFAULT_OPTION);
   }
   //版权
   if(s==bq)
   {intselection = JOptionPane.showConfirmDialog(
    Aframe.this,
    "版权所有,盗版必究!","版权",
    JOptionPane.DEFAULT_OPTION);
   }
   //声明
   if(s==sm)
   {intselection = JOptionPane.showConfirmDialog(
    Aframe.this,
    "该程序仅用于实践交流","声明",
    JOptionPane.DEFAULT_OPTION);
   }
   //说明
   if(s==shm)
   {intselection = JOptionPane.showConfirmDialog(
    Aframe.this,
    "由于种种原因,该版本记事本还存在很多缺陷,我们将在以后的工作中予以改进","说明",
    JOptionPane.DEFAULT_OPTION);
   }
   //剪切复制粘贴
   if (s==ai||s==cutTtem)
   {
    txtArea.cut();
   }
   if(s==aj)
   {
    txtArea.copy();
   }
   if(s==an)
   {
    txtArea.paste();
   }
   //删除
   if(s==ak)   
             
               txtArea.replaceRange("", txtArea.getSelectionStart(),txtArea.getSelectionEnd());   
             
           //全选
   if(s==am)  
   {
    txtArea.selectAll();
   }
   //撤销
   if(s==ah)
     {
        um.undo();
     }
     //字体
         if (s==zt)
           {
               
            tishi.setFont(new Font("华文行楷",1,15));
               tanchu.setLocation(300,250);
             tanchu.setSize(200,150);
            tanchu.setTitle("字体设置"); 
            tanchu.setLayout(new GridLayout(2,2,2,2));
            tanchu.add(tishi);
            tanchu.add(daxiaobox);
            tanchu.add(que);
            tanchu.add(zitibox);
            tanchu.setVisible(true);
             }
             //状态栏
             aaaaa.setText("当前字体是"+ff+"颜色是"+zzz+"大小是"+kk);
             if (s==ztl)
           {
               tanchu.setLocation(300,250);
             tanchu.setSize(300,150);
            tanchu.setTitle("当前状态"); 
            tanchu.setLayout(new GridLayout(2,2,2,2));
            aaaaa.setEditable(false);
            tanchu.add(aaaaa);
            tanchu.add(que);
            tanchu.setVisible(true);
               }
     //查找
     


 

  }
 }
 //组合框的接口实现
 private class boxlistener implementsActionListener
 {
  public voidactionPerformed(ActionEvent ee)
  {
   Objectss=yansebox.getSelectedItem();
   Objectzz=zitibox.getSelectedItem();
   Objectdx=daxiaobox.getSelectedItem();
   Stringtr=(String)ss;
   Stringtz=(String)zz;
   Stringtd=(String)dx;
   //字体菜单中弹出菜单“确定”的响应
   if(ee.getSource()==que){
         tanchu.dispose();
        }
   //颜色
   if(tr=="红色"){
    txtArea.setForeground(Color.red);
    zzz="红色";
   }
   if(tr=="黑色"){
    txtArea.setForeground(Color.black);
    zzz="黑色";
   }
   if(tr=="绿色"){
    txtArea.setForeground(Color.green);
    zzz="绿色";
   }
   if(tr=="蓝色"){
    txtArea.setForeground(Color.blue);
    zzz="蓝色";
   }
   if(tr=="黄色"){
    txtArea.setForeground(Color.yellow);
    zzz="黄色";
   }
   if(tr=="蓝绿色"){
    txtArea.setForeground(Color.cyan);
    zzz="蓝绿色";
   }
   if(tr=="浅灰色"){
    txtArea.setForeground(Color.lightGray);
    zzz="浅灰色";
   }
   //字体
   if(tz=="华文行楷"){
   
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont("华文行楷",f.getStyle(),f.getSize()));
    ff="华文行楷";
   }
   if(tz=="楷体"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont("楷体",f.getStyle(),f.getSize()));
    ff="楷体";
   }
   if(tz=="宋体"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont("宋体",f.getStyle(),f.getSize()));
    ff="宋体";
   }
   if(tz=="黑体"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont("黑体",f.getStyle(),f.getSize()));
    ff="黑体";
   }
   if(tz=="幼圆"){ 
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont("幼圆",f.getStyle(),f.getSize()));
    ff="幼圆";
   }
   //大小
   if(td=="5"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont(f.getName(),f.getStyle(),5));
    kk="5";
   }
   if(td=="10"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont(f.getName(),f.getStyle(),10));
    kk="10";
   }
   if(td=="15"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont(f.getName(),f.getStyle(),15));
    kk="15";
   }
   if(td=="20"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont(f.getName(),f.getStyle(),20));
    kk="20";
   }
   if(td=="25"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont(f.getName(),f.getStyle(),25));
    kk="25";
   }
   if(td=="30"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont(f.getName(),f.getStyle(),30));
    kk="30";
   }
   if(td=="35"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont(f.getName(),f.getStyle(),35));
    kk="35";
   }
   if(td=="40"){
    Fontf=txtArea.getFont();
    txtArea.setFont(newFont(f.getName(),f.getStyle(),40));
    kk="40";
   }
           
     
  }
  
 
    publicstatic final int WIDTH = 550;
 public static final int HEIGHT = 450;
 JTextArea txtArea;
 JMenufileMenu,editMenu,typeMenu,viewMenu,helpMenu,aboutMenu;
 JMenuItemaa,ab,ac,ad,ae,af,ag,ah,ai,aj,ak,al,am,an,zdhh,zt,ztl,zzxx,bq,sm,shm,bj,cutTtem;
 JComboBox zitibox,yansebox,daxiaobox;
 JLabel zitiLabel,yanseLabel,daxiaoLabel;
 FileDialog open=newFileDialog(this,"打开..");
 FileDialog save=newFileDialog(this,"另存为..",FileDialog.SAVE);
 JRadioButtonMenuItem xz,qxxz;
 JFileChooser fileChooser;
 int shifulingcun;
 JToolBar toolbar2;
 JTextField text1,text2,text3,text4;
 public JTextField aaaaa=new JTextField("");
 UndoManager um;
 Dialog tanchu=new Dialog(this);
 public Button que;
 Label tishi=new Label("字体和大小:");
 String ff="",kk="",zzz="";
}
界面:

用JAVA编写的文档编辑器源代码

0 0
原创粉丝点击