zoukankan      html  css  js  c++  java
  • Java图形界面开发—简易记事本

        

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







  • 相关阅读:
    MySQL 快速删除大量数据(千万级别)的几种实践方案——附源码
    Elasticsearch 通过Scroll遍历索引,构造pandas dataframe 【Python多进程实现】
    MySQL LOAD DATA INFILE—从文件(csv、txt)批量导入数据
    【Java】 NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、ArrayIndexOutOfBoundsException、ArrayStoreException、ArithmeticException等没有异常堆栈信息
    技术人“结构化思维”训练的一点想法和实践
    gitlab内存消耗大,频繁出现502错误的解决办法
    Tesseract-OCR 4.1.0 安装和使用— windows及CentOS
    Tika结合Tesseract-OCR 实现光学汉字识别(简体、宋体的识别率百分之百)—附Java源码、测试数据和训练集下载地址
    记一次Elasticsearch OOM(内存溢出)的优化过程—基于segments force merge 和 store type 转为 hybridfs
    ElasticSearch如何一次查询出全部数据——基于Scroll
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467325.html
Copyright © 2011-2022 走看看