Java图形界面开发之简易记事本
程序员文章站
2024-03-11 21:53:07
在学习了java事件之后,自己写了一个极其简单的记事本。用到了menubar,menu,menuitem等控件,事件包括actionlistener以及keylistene...
在学习了java事件之后,自己写了一个极其简单的记事本。用到了menubar,menu,menuitem等控件,事件包括actionlistener以及keylistener。
代码如下:
package com.package3; /* * 功能:简易记事本的开发,可以保存文件,打开文件,退出记事本 * author:ywq */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class menutext { //定义组件: jframe f; menubar mb; //菜单栏 menu mu; //菜单 jtextarea jta; menuitem openitem, saveitem, closeitem; //子菜单 filedialog opendia,savedia; //弹出的保存和打开框 file file; //构造函数 public menutext() { //调用初始化函数 init(); } //对组件进行初始化操作 public void init() { f=new jframe("简易记事本"); mb=new menubar(); mu=new menu("文件"); openitem=new menuitem("打开"); saveitem=new menuitem("保存"); closeitem=new menuitem("退出"); jta=new jtextarea(); f.add(jta); //添加 mu.add(openitem); mu.add(saveitem); mu.add(closeitem); mb.add(mu); f.setmenubar(mb); opendia=new filedialog(f, "打开", filedialog.load); savedia=new filedialog(f, "保存", filedialog.save); //设置jframe属性 f.setbounds(200, 300, 500, 400); f.setdefaultcloseoperation(jframe.exit_on_close); f.setvisible(true); //调用事件函数 event(); } //事件函数,对事件进行处理 public void event() { //打开选项 openitem.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { //调用打开文件的方法 openfile(); } }); //保存选项 saveitem.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { //调用保存文件的方法。 savefile(); } }); //添加一个文本区域的事件,即按下ctrl+s可以保存 //因为键盘监听事件有多种方法,而我们只需要其中的一种,所以可以使用适配器keyadapter, //从而只需要实现一种方法即可 jta.addkeylistener(new keyadapter() { //键盘按下方法 public void keypressed(keyevent e){ if(e.iscontroldown() && e.getkeycode() == keyevent.vk_s) { //调用保存文件的方法。 savefile(); //joptionpane.showmessagedialog(null, "对啦"); } } }); //关闭选项 closeitem.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent e) { //退出系统 system.exit(0); } }); } //打开文本的方法 public void openfile() { opendia.setvisible(true); //设置其显示出来 //获取路径和文件名 string dirpath=opendia.getdirectory(); string filename=opendia.getfile(); //防止点击取消报错 if(dirpath==null || filename==null) return ; jta.settext(""); //将文本区域清空 file=new file(dirpath,filename); //建立文件对象 //按照行来读取数据,显示在文本区域 try { bufferedreader br = new bufferedreader(new filereader(file)); string line = null; while((line=br.readline())!=null) { jta.append(line+"\r\n"); } br.close(); } catch (ioexception ex) { throw new runtimeexception("读取失败"); } } //保存文本的方法。 public void savefile() { //先判断文件是否存在 if(file==null) { savedia.setvisible(true); string dirpath = savedia.getdirectory(); string filename = savedia.getfile(); //防止点击取消报错 if(dirpath==null || filename==null) return ; //因为文件不存在。所以需要建立file对象 file = new file(dirpath,filename); } //将数据写入文件 try { bufferedwriter bw=new bufferedwriter(new filewriter(file)); string info=jta.gettext(); //得到文本区域的信息 bw.write(info); //写入操作 bw.flush(); bw.close(); } catch (ioexception e1) { throw new runtimeexception(); } } public static void main(string[] args) { //创建对象 new menutext(); } }
运行结果如图所示:
本程序实现的功能有:
(1)可以打开某个文件,并且可以编辑。
(2)可以保存编辑后的文件。
(3)可以使用ctrl+s来保存文本
(4)可以点击closeitem来退出程序。
在实现功能3时,对文本区域添加了keylistener,利用了适配器keyadapter来实现监听。但是现在需要的时一种组合监听,即ctrl和s都被按下时才会触发保存操作。
关于组合监听,java api中有提供相应方法。
找到keyevent类的直接父类即inputevent类。如图所示:
查看inputevent类中的方法,如下所示:
做为inputevent类的子类keyevent类的对象e可以直接调用上边方法来进行判断。iscontroldown()方法用来判断ctrl键是否被按下。如程序中的if(e.iscontroldown() && e.getkeycode() == keyevent.vk_s)便实现了组合判断。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。