用Java编写的一个小记事本

本文介绍了一个使用Java编写的简易记事本程序。该程序实现了基本的文件操作功能,如新建、打开、保存等,并提供了查找替换等功能。通过本文可以了解如何利用Java的GUI组件和文件I/O操作实现一个简单的文本编辑器。

   这是在学校做的一个小记事本,在网上看过一些记事本的代码,大多是一些比较有经验的前辈所编写的,算法比较精妙,精简。对于Java初学者来说,我有一个比较简单的思想。用Java编写的一个小记事本

   要编写出一个记事本,至少需要拥有两方面的知识:1.图形用户界面(GUI)程序设计 2.文件的输入和输出

    用Java编写的一个小记事本

  我的基本思想就是;"先把记事本的框架先做好,再逐步添加监听。"

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;//以上是导入各种所用到的包

public class  Mynotebook
{
 
public static  void  main(String args[]){
MyFrame frame=new   MyFrame();//这个主函数是框架
frame.setTitle("我的记事本");
frame.setSize(300,350);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}
}

class MyFrame extends JFrame
{
 JTextArea jt1=new JTextArea();//设置文本域对象
       File f;
        String result="";
        boolean  flag=true;
        String value;
        
 JButton jbt=new JButton("替换为");//按钮
 JButton jba=new JButton("全部替换");
 JTextField jtf=new JTextField(15);
 JTextField jt=new JTextField(15);
 int start=0;
       JFrame frame=new  JFrame();

 
 
 //以上是添加
 JPanel textPanel=new JPanel();//面板

JMenu jmu1=new JMenu("文件");//菜单主项
 JMenuItem jmi1=new JMenuItem("新建");//以下是在菜单项里加入目录
   JMenuItem jmi2=new JMenuItem("打开");
   JMenuItem jmi3=new JMenuItem("保存");
   JMenuItem jmi4=new JMenuItem("另存为");
  JMenuItem jmi5=new JMenuItem("退出");
  
 JMenu  jmu2=new JMenu("编辑");
   JMenuItem jmi6=new JMenuItem("复制");
   JMenuItem jmi7=new JMenuItem("粘贴");
   JMenuItem jmi8=new JMenuItem("查找替换");
  
 
 JMenu  jmu3=new JMenu("帮助");
 final  JMenuItem jmi9=new JMenuItem("关于编辑器");
 JMenuItem jmi10=new JMenuItem("帮助主题");
 
 
 public MyFrame(){
  
  textPanel.setLayout(new BorderLayout());//设置布局
   jmi2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));//设置快捷键
   jmi3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));
   jmi5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,ActionEvent.CTRL_MASK));
   jmi6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));
   jmi7.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK));
  
 JMenuBar jmb=new  JMenuBar();//菜单条
   setJMenuBar(jmb);
   jmb.add(jmu1);//将设置的对象,添加到对应的地方才能实现功能。添加就如“大盒子里面套小盒子...”
   jmb.add(jmu2);
   jmb.add(jmu3);
   jmu1.add(jmi1);
   jmu1.add(jmi2);
   jmu1.add(jmi3);
   jmu1.add(jmi4);
   jmu1.add(jmi5);
   jmu2.add(jmi6);
   jmu2.add(jmi7);
   jmu2.add(jmi8);
   jmu3.add(jmi9);
   jmu3.add(jmi10);
 Container  contentPane=getContentPane();//内容窗口
  contentPane.add(textPanel,BorderLayout.CENTER);
  textPanel.add(jt1); 

 

 

jmi1.addActionListener (new ActionListener(){  //第一个监听,“新建”
  
  public void actionPerformed(ActionEvent e)
  {
   if(e.getSource()==jmi1);
   jt1.setText(null);
   
   }
  
  );
  jmi5.addActionListener (new ActionListener(){ //“退出”(我是由简单到难,所以监听顺序不一样)
  
  public void actionPerformed(ActionEvent e)
  {
   if(e.getSource()==jmi5);
   System.exit(0);
   
   }
  
  );
  jmi9.addActionListener (new ActionListener(){ //监听,“关于编辑器”,设置的一个标签
  
  public void actionPerformed(ActionEvent e)
  {
   if(e.getSource()==jmi9);
   JFrame jd=new JFrame("关于编辑器");
   jd.setSize(100,100);
   JLabel a=new JLabel("WINGS-旗下开发产品-"+"周忠华制作");
   jd.add(a,BorderLayout.CENTER);
   jd.setLocation(100,200);
   jd.setSize(300,300);
   jd.setVisible(true);
   jd.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
   

   
   }
  
  );
  jmi10.addActionListener (new ActionListener(){//监听,“帮助主题”,设置一个文本域,再不可编辑
  
  public void actionPerformed(ActionEvent e)
  {
  textPanel.setLayout(new BorderLayout());
    JFrame frame=new  JFrame("帮助主题");
  
    Container  contentPane=getContentPane();//内容窗口
   contentPane.add(textPanel,BorderLayout.CENTER);
   JPanel textPanel=new JPanel();//面板
  
    
  
  
  String help="WINGS-旗下帮助:\n"
  +"新建:重新开始一个文本框\n"
  +"打开:打开一个指定文件\n"
  +"保存:保存当前你所修改\n"
  +"另存为:保存在一个指定文件中\n"
  +"退出:退出记事本\n"
  +"复制:复制你想要的信息\n"
  +"粘贴:把你所剪贴或复制的信息拷贝下来\n"
  +"查找替换:找到你想要找到的信息并替换所有相同的信息\n"
  +"关于记事本:产品出处\n"
  +"帮助主题:当前所打开的文本框";
  JTextArea jt2=new JTextArea();
  jt2=new JTextArea(30,20);
   jt2.setEditable(false);//不可编辑
   textPanel.add(jt2);
   jt2.setText(help);
   frame.add(textPanel,BorderLayout.CENTER);
  frame.setSize(350,250);
  frame.setVisible(true);
  frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

 

   
   }
  
  );
  jmi6.addActionListener (new ActionListener(){ //监听,“复制”,一个函数搞定
  
  public void actionPerformed(ActionEvent e)
  {
   if(e.getSource()==jmi6);
   
   jt1.copy();
   
   }
  
  );
  jmi7.addActionListener (new ActionListener(){ //监听,“粘贴”
  
  public void actionPerformed(ActionEvent e)
  {
   if(e.getSource()==jmi7);
   
   String b;
   b=jt1.getText();
   jt1.paste();
   
   }
  
  );
jmi2.addActionListener (new ActionListener(){ //监听,“打开”
 
  public void actionPerformed(ActionEvent e)
  {
     if(e.getSource()==jmi2);
          MyFrame frame=new  MyFrame();
     
    
                   JFileChooser jfc=new JFileChooser();
                   jfc.setDialogType(JFileChooser.OPEN_DIALOG);
                   jfc.showOpenDialog(null);
                    f=jfc.getSelectedFile();
                    frame.setTitle(f.getName());
                     flag=false;
                    jt1.setText(read());
  
                 
   
   }

  });
  jmi3.addActionListener (new ActionListener(){ //监听,“保存”
  
  public void actionPerformed(ActionEvent e)
  {
   if(e.getSource()==jmi3);
      JFileChooser jfc=new JFileChooser();
      if(flag){
        jfc.showOpenDialog(null);
        f=jfc.getSelectedFile();
        flag=false;
        write();
      }else{
     write();
     }
   
   
   }
  
  );
  
  jmi4.addActionListener (new ActionListener(){//监听,“另存为”
  
  public void actionPerformed(ActionEvent e)
  {
   if(e.getSource()==jmi4);
      JFileChooser jfc=new JFileChooser();
        jfc.showOpenDialog(null);
        f=jfc.getSelectedFile();
        flag=false;
        write();
   
   
   }
  
  );
jmi8.addActionListener(new ActionListener(){ //查找替换
   public void actionPerformed(ActionEvent e) {
    if(e.getSource()==jmi8){
    JFrame thjf=new JFrame("替换");
    value=jt1.getText();
    GridLayout gl=new GridLayout(3,2);
    JLabel jl1=new JLabel("查找内容:");
      JLabel jl2=new JLabel("替换为:");
    thjf.setLayout(gl);
    thjf.add(jl1);
    thjf.add(jtf);
    thjf.add(jl2);
    thjf.add(jt);
    thjf.add(jbt);
    thjf.add(jba);
    
    thjf.setLocation(300,300);
    thjf.pack();
    thjf.setVisible(true);
    thjf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
    
  }});

 

 

  jbt.addActionListener(new ActionListener(){ //替换按钮的监听
   public void actionPerformed(ActionEvent e) {
    if (e.getSource()==jbt){
      String value=jt1.getText();
      String temp=jtf.getText();
     int s=value.indexOf(temp,start);
     if(value.indexOf(temp,start)!=-1){
      jt1.setSelectionStart(s);
      jt1.setSelectionEnd(s+temp.length());
      jt1.setSelectedTextColor(Color.GREEN);
      start=s+1;
      jt1.replaceSelection(jt.getText());
     }else {
      JOptionPane.showMessageDialog(frame, "替换完毕!", "提示", 0);
      frame.dispose();
     }
     }
    
  }});
  jba.addActionListener(new ActionListener(){ //全部替换按钮的监听
   public void actionPerformed(ActionEvent e) {
    if (e.getSource()==jba){
     String temp=jt1.getText();
     temp=temp.replaceAll(jtf.getText(), jt.getText());
     jt1.setText(temp);
     JOptionPane.showMessageDialog(frame, "替换完毕!", "提示", 0);
     frame.dispose();
     }
    
  }});

  


  
}
public  String read(){ //读方法
           String temp="";
            try{
             FileInputStream  fis=new FileInputStream(f.getAbsolutePath());
             byte[]b=new byte[1024];
             while(true){
             int num=fis.read(b);
              if(num==-1)break;
            temp=temp+new String(b,0,num);
            
}
fis.close();


} catch(Exception e1) {

e1.printStackTrace();
 
return temp;
}
public void write(){  //写方法
 try{
 FileOutputStream fos=new FileOutputStream(f);
 fos.write(jt1.getText().getBytes());
 fos.close();
 
 }catch(Exception e){
 
 e.printStackTrace();
 }

}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值