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+"\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)便实现了组合判断。







posted on 2016-05-18 20:41  岚之山  阅读(673)  评论(0编辑  收藏  举报

导航