首页 > 编程 > Java > 正文

Java图形界面开发之简易记事本

2019-11-26 13:38:57
字体:
来源:转载
供稿:网友

在学习了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)便实现了组合判断。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表