⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 notepad3.java

📁 用JAVA编的仿WINDOWS的记事本源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
//file name : NotePad3.java

/*package note;*/

import java.io.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import java.text.*;
import javax.swing.border.BevelBorder;

public class NotePad3 extends JFrame implements ActionListener,WindowListener,CaretListener,KeyListener,MouseListener
//继承JFrame类
//同时实现接口ActionListener,WindowListener来检测用户事件,和窗体事件 
//CaretListener接口表示文本框有新输入等操作进发生 
//..................                
{
 NotePad3()
 {
  super("No Tiltle-----NotePad");
  setBounds(200,150,550,350);  //初始化运行时窗体大小
  
  Text();    //添加记事本程序主体--文本框
  MenuBar();   //为窗体添加菜单
  ToolBar();  //为窗体添加工具栏
  StatusBar();  //为窗体添加状态栏
  
  java.util.Timer timer = new java.util.Timer(); 
  timer.schedule(new java.util.TimerTask() 
      {
       public void run() 
       {  
          lab_statusBar3.setText(time());  //调用方法更新状态栏时间
       } 
      }, 0, 1000);   //一秒(=1000ms)钟更新一次

  Image image1=java.awt.Toolkit.getDefaultToolkit().getImage("pic/icon.gif");
  //this.setUndecorated(true);
        //this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);   //以上两行设置独特的窗体风格
  this.setDefaultLookAndFeelDecorated(true);//获得当前平台窗体风格
  this.setIconImage(image1);
  this.addWindowListener(this);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setVisible(true);
 }
 private void Text()
 {
  //添加文本框,并对其进行设置
  text=new JTextPane();  
  text.setFont(ft);
  text.setBorder(BorderFactory.createLineBorder(Color.white));
  text.addCaretListener(this);
  text.addKeyListener(this);
  text.setCaretColor(Color.red);  //设置文本框内光标颜色红色
  scr=new JScrollPane(text);
  this.add(scr,BorderLayout.CENTER);
 }
 private void StatusBar() 
 {
  //添加状态栏,并设置状态栏
  panStatusBar=new JPanel(new GridLayout(1,8));  
  
  //label_1.setBorder(new BevelBorder(BevelBorder.RAISED));
  //lab_statusBar2=new JLabel("行 "+row+" 列 "+colum+"  字节数: "+text.getText().length(),JLabel.LEFT);
  lab_statusBar2=new JLabel(BytesTotal(),JLabel.LEFT);  //调用方法:BytesTotal()实现文件字节数统计
  lab_statusBar1.setBorder(BorderFactory.createLineBorder(Color.white));  
  panStatusBar.add(lab_statusBar1);
  panStatusBar.add(lab_statusBar2);
  panStatusBar.add(lab_statusBar3);
  panStatusBar.add(lab_statusBar4);
  //PopupMenu(1);
  this.getContentPane().add(panStatusBar, BorderLayout.SOUTH);
 }
 private void MenuBar()
 {
  //为窗体添加菜单
  this.setJMenuBar(menubar);
  
  menu1.add(menuitem11);
     menu1.add(menuitem12);
     menu1.add(menuitem13);
     menu1.add(menuitem14);
  menu1.addSeparator();
     menu1.add(menuitem15);
     menu1.addSeparator();
     menu1.add(menuitem16);
     
     menu2.add(menuitem21);
     menu2.add(menuitem22);
     menu2.addSeparator();
     menu2.add(menuitem23);
     menu2.add(menuitem24);
     menu2.add(menuitem25);
     menu2.add(menuitem26);
     menu2.addSeparator();
     menu2.add(menuitem27);
     menu2.add(menuitem28);
     menu2.addSeparator();
     menu2.add(menuitem29);
     
     menu3.add(menuitem31);
     menu3.add(menuitem32);
     menu3.add(menuitem33);
     
     menu4.add(menuitem41);
     menu4.add(menuitem42);
     menu4.add(menuitem43);
     menu4.addSeparator();
     menu4.add(menuitem44);
     menu4.add(menuitem45);
     menu4.addSeparator();
     menu4.add(menuitem46);
     
     menu5.add(menuitem51);
     
     menubar.add(menu1);
     menubar.add(menu2);
     menubar.add(menu3);
     menubar.add(menu4);
     menubar.add(menu5);
     
     menu1.addMouseListener(this);
     menu2.addMouseListener(this);
     menu3.addMouseListener(this);
     menu4.addMouseListener(this);
     menu5.addMouseListener(this);
     
     //给各菜项单添加事件监听
     menuitem11.addActionListener(this);
     menuitem12.addActionListener(this);
     menuitem13.addActionListener(this);
     menuitem14.addActionListener(this);
     menuitem15.addActionListener(this);
     menuitem16.addActionListener(this);
     
     menuitem21.addActionListener(this);
     menuitem22.addActionListener(this);
     menuitem23.addActionListener(this);
     menuitem24.addActionListener(this);
     menuitem25.addActionListener(this);
     menuitem26.addActionListener(this);
     menuitem27.addActionListener(this);
     menuitem28.addActionListener(this);
     menuitem29.addActionListener(this);
     
     menuitem31.addActionListener(this);
     menuitem32.addActionListener(this);
     menuitem33.addActionListener(this);
     
     menuitem41.addActionListener(this);
     menuitem42.addActionListener(this);
     menuitem43.addActionListener(this);
     menuitem44.addActionListener(this);
     menuitem45.addActionListener(this);
     menuitem46.addActionListener(this);
     
     menuitem51.addActionListener(this);
     
     //以下为各菜单项的  快捷键
     menuitem11.setAccelerator(KeyStroke.getKeyStroke("ctrl N"));  //新建
     menuitem12.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));  //打开
     menuitem13.setAccelerator(KeyStroke.getKeyStroke("ctrl S"));  //保存
     menuitem14.setAccelerator(KeyStroke.getKeyStroke("ctrl shift S"));  //另存为
     menuitem15.setAccelerator(KeyStroke.getKeyStroke("ctrl E"));  //浏览<-->编辑  模式转换
     menuitem16.setAccelerator(KeyStroke.getKeyStroke("ctrl Q"));  //退出
     
     menuitem21.setAccelerator(KeyStroke.getKeyStroke("ctrl Z"));  //撤销
     menuitem22.setAccelerator(KeyStroke.getKeyStroke("ctrl R"));  //重复
     menuitem23.setAccelerator(KeyStroke.getKeyStroke("ctrl X"));  //剪切
     menuitem24.setAccelerator(KeyStroke.getKeyStroke("ctrl C"));  //复制
     menuitem26.setAccelerator(KeyStroke.getKeyStroke("ctrl V"));  //粘贴
     menuitem29.setAccelerator(KeyStroke.getKeyStroke("ctrl A"));  //全选
     
     menuitem41.setAccelerator(KeyStroke.getKeyStroke("ctrl T"));
     
     menu1.setBorder(BorderFactory.createLineBorder(Color.white));
     menu2.setBorder(BorderFactory.createLineBorder(Color.white));
     menu3.setBorder(BorderFactory.createLineBorder(Color.white));
     menu4.setBorder(BorderFactory.createLineBorder(Color.white));
     menu5.setBorder(BorderFactory.createLineBorder(Color.white));
 }
 private void ToolBar()
 {
  //添加并设置工具栏
  Cursor cursor=new Cursor(Cursor.HAND_CURSOR);
  bt_new.setToolTipText("新建");
  bt_open.setToolTipText("打开");
  bt_save.setToolTipText("保存");
  bt_expler.setToolTipText("浏览");
  bt_back.setToolTipText("撤销");
  bt_foward.setToolTipText("重复");
  bt_cut.setToolTipText("剪切");
  bt_copy.setToolTipText("复制");
  bt_paste.setToolTipText("粘贴");
  bt_left.setToolTipText("左对齐");
  bt_center.setToolTipText("居中");
  bt_right.setToolTipText("右对齐");
  bt_font.setToolTipText("字体");
  bt_color.setToolTipText("颜色");
  
  //以下为设置光标样式
  bt_new.setCursor(cursor);
  bt_open.setCursor(cursor);
  bt_save.setCursor(cursor);
  bt_expler.setCursor(cursor);
  bt_back.setCursor(cursor);
  bt_foward.setCursor(cursor);
  bt_cut.setCursor(cursor);
  bt_copy.setCursor(cursor);
  bt_paste.setCursor(cursor);
  bt_left.setCursor(cursor);
  bt_right.setCursor(cursor);
  bt_font.setCursor(cursor);
  bt_color.setCursor(cursor);
  
  toolBar=new JToolBar();
  
  toolBar.add(bt_new);
  toolBar.add(bt_open);
  toolBar.add(bt_save);
  toolBar.add(bt_expler);
  toolBar.add(bt_split1);
  toolBar.add(bt_back);
  toolBar.add(bt_foward);
  toolBar.add(bt_split2);
  toolBar.add(bt_cut);
  toolBar.add(bt_copy);
  toolBar.add(bt_paste);
  toolBar.add(bt_split3);
  toolBar.add(bt_left);
  toolBar.add(bt_center);
  toolBar.add(bt_right);
  toolBar.add(bt_split4);
  toolBar.add(bt_font);
  toolBar.add(bt_color);
  
  bt_split1.setEnabled(false);
  bt_split2.setEnabled(false);
  bt_split3.setEnabled(false);
  bt_split4.setEnabled(false);
  
  bt_new.addActionListener(this);
  bt_open.addActionListener(this);
  bt_save.addActionListener(this);
  bt_expler.addActionListener(this);
  bt_back.addActionListener(this);
  bt_foward.addActionListener(this);
  bt_cut.addActionListener(this);
  bt_copy.addActionListener(this);
  bt_paste.addActionListener(this);
  bt_left.addActionListener(this);
  bt_center.addActionListener(this);
  bt_right.addActionListener(this);
  bt_font.addActionListener(this);
  bt_color.addActionListener(this);
  
  toolBar.setBorder(BorderFactory.createLineBorder(Color.white));
  toolBar.setVisible(true);
  this.add(toolBar,BorderLayout.NORTH);
 }
 //以下为文本框内的内容发生变化时引发的事件
 private String time()
 {
  //获得系统时间
  int h,m,s; 
  String str,time,hh=null,mm=null,ss=null;
  Calendar cal=Calendar.getInstance(); 
  h=cal.get(Calendar.HOUR_OF_DAY); 
  m=cal.get(Calendar.MINUTE); 
  s=cal.get(Calendar.SECOND); 
  if(h<10)
  {
   hh="0"+ h;
  }
  else
  {
   hh=""+h;
  }
  if(m<10)
  {
   mm="0"+m;
  }
  else 
  {
   mm=""+m;
  }
  if(s<10)
  {
   ss="0"+s;
  }
  else
  {
   ss=""+s;
  }
  time=hh+":"+mm+":"+ss;
  DateFormat d = DateFormat.getDateInstance(); 
  str = d.format(new Date())+" "+time; 
  return str;  //返回当前时间
 }
 private String BytesTotal()
 {
  float BytesTotal=text.getText().length();
  String total=null;
  if(BytesTotal<1024)
  {
   total=""+BytesTotal+" B";
  }
  else if(BytesTotal<1024*1024)
  {
   BytesTotal=BytesTotal/1024;
   total=""+BytesTotal+" KB";
  }
  else
  {
   BytesTotal=BytesTotal/(1024*1024);
   total=""+BytesTotal+" M";
  }
  return total;
 }
 
 private void openFile()
 {
 //打开文件操作
  chooser=new JFileChooser();
  chooser.showOpenDialog(this);
  path=chooser.getSelectedFile().getPath();
  this.setTitle(path);
  try
  {
   BufferedReader bf=new BufferedReader(new FileReader(path));
   String strTemp="",str=""; 
   while((strTemp=bf.readLine())!=null)
   {
    str=str+strTemp+"\n";
   }
   text.setText(str);
  }
  catch(IOException io)
  {
   JOptionPane.showMessageDialog(null,"不能读取此文件");
  } 
  //FileFilter filter = new FileFilter();
  //chooser.setFileFilter(filter);

  //打开文件后,判断文件类型,设置状态栏的值
  if(path.toLowerCase().endsWith(".c"))
  {
   lab_statusBar4.setText("C Source Code");
  }
  else if(path.toLowerCase().endsWith(".cpp"))
  {
   lab_statusBar4.setText("C++ Source Code");
  }
  else if(path.toLowerCase().endsWith(".java"))
  {
   lab_statusBar4.setText("Java Source Code");
  }
  else
  {
   lab_statusBar4.setText("Default Text");
  }
 }
 private void saveFile()
 {
  //保存文件操作
  chooser=new JFileChooser();
  chooser.showSaveDialog(this);
  path=chooser.getSelectedFile().getPath();
  try   
        {   
   BufferedWriter buff=new BufferedWriter(new FileWriter(path)); 
   String str = text.getText(); 
   buff.write(str, 0, text.getText().length());
   buff.close();  
   this.setTitle(path);
        }   
        catch(FileNotFoundException e1)
        {
            JOptionPane.showMessageDialog(null,"保存失败!");
        }   
        catch(IOException e2)
        {
   JOptionPane.showMessageDialog(null,"保存失败!");
        }
        
        //保存文件后,判断文件类型,设置状态栏的值
  if(path.toLowerCase().endsWith(".c"))
  {
   lab_statusBar4.setText("C Source Code");
  }
  else if(path.toLowerCase().endsWith(".cpp"))
  {
   lab_statusBar4.setText("C++ Source Code");
  }
  else if(path.toLowerCase().endsWith(".java"))
  {
   lab_statusBar4.setText("Java Source Code");
  }
  else
  {
   lab_statusBar4.setText("Default Text");
  } 
 }


/********************************************************************************************/

public void caretUpdate(CaretEvent e)
 {
  //统计当前文本内有字数
  lab_statusBar2.setText(BytesTotal()); 
 }
 
 //以下为窗体操作引发的事件
 public void windowOpened(WindowEvent e)
 {
 
 }
 public void windowClosing(WindowEvent e)   //当窗口关闭时检查当前文本是否为空,若为空则提示用户保存当前文档,否则退出当前程序
 {
  if(text.getText().length()>0)  //当文本非空时,做如下处理
   {
    Object[] options = { "OK", "CANCEL" };
    int option=JOptionPane.showOptionDialog(null, "是否保存当前文档", "提示", 
            JOptionPane.YES_OPTION, JOptionPane.WARNING_MESSAGE,
            null, options, options[0]);
            
    if(option==0)  //若用户单击了保存,则弹出保存对话框让用户保存当前文档,然后退出当前程序
    {
     saveFile();
     System.exit(0); 
    }
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -