⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 noteactionlistener.java

📁 这是一个自编的记事本程序
💻 JAVA
字号:
package cn.com.csuinfosoft;

import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.text.JTextComponent;

import cn.com.csuinfosoft.io.FileStreamException;
import cn.com.csuinfosoft.io.FileStreamOper;
import cn.com.csuinfosoft.io.impl.FileStreamReaderWriterImpl;
import cn.com.csuinfosoft.util.IConstants;
import cn.com.csuinfosoft.util.LogWriter;

/**
 * 事件监听实现类
 * @author 
 *
 */
public class NoteActionListener implements ActionListener {
	
	/**
	 * 文件操作的状态
	 * 1 --- 打开一个文件没有做修改
	 * 2 --- 打开一个文件已经修改
	 */
	public static int fileState = 0;	
	
	/**
	 * 文件内容处理容器
	 */
	private JTextComponent fileText = null;
	
	/**
	 * 运行窗口
	 */
	private JFrame jframe = null;
	
	/**
	 * 文件选择框对象
	 */
	private JFileChooser fileChooser = null;
	
	/**
	 * 文件操作
	 */
	private FileStreamOper fileStreamOper = null;
	
	/**
	 * 文件路径名称
	 */
	private String fileName = null;
	private PrintWriter pw;
	private LogWriter logWriter;	

	/**
	 * 记事本监听器的构造函数
	 * @param argCon Container
	 * @param argJFrame JFrame
	 */
	public NoteActionListener(Container argCon, JFrame argJFrame,PrintWriter pw,LogWriter logWriter) {
		fileText = (JTextComponent) argCon;
		jframe = argJFrame;
		this.pw = pw;
		this.logWriter = logWriter;
		fileChooser = new JFileChooser();
		fileStreamOper = new FileStreamReaderWriterImpl();
	}
	
	/**
	 * 事件处理方法
	 * @param ActionEvent e
	 */
	public void actionPerformed(ActionEvent e) {
		String actionComd = e.getActionCommand();// 操作命令名称
		//如果是创建一个新文件
		if(IConstants.FILE_NEW.equals(actionComd)) {
			fileText.setText("");
			fileName = null;
			NoteActionListener.fileState = 1;
            logWriter.log("No URL specified for " + IConstants.FILE_NEW,
                    LogWriter.INFO);

		} else if(IConstants.FILE_OPEN.equals(actionComd)) {
            logWriter.log("开始打开文件 " + IConstants.FILE_OPEN,
                    LogWriter.INFO);
			//打开硬盘上一个文件
			fileText.setText(getFileContent());
			NoteActionListener.fileState = 1;
            logWriter.log("文件打开成功 " + IConstants.FILE_OPEN,
                    LogWriter.INFO);
		} else if(IConstants.FILE_SAVE.equals(actionComd)) {
			//将当前的文件内容进行保存
			switch (fileState) {
				case 2:
					return;
				case 1:
					saveFileContent();
			}
		} else if(IConstants.FILE_CLOSE.equals(actionComd)) {
			//关闭文件操作
			int showState = JOptionPane.NO_OPTION;
			if(NoteActionListener.fileState == 1) {
				showState = setOptionMessage("是否需要将该文件保存!");
				if(showState == JOptionPane.OK_OPTION) {
					saveFileContent();
				}
			}
			fileText.setText("");
			fileName = null;
			NoteActionListener.fileState = 0;
		} else if(IConstants.FILE_QUIT.equals(actionComd)) {
			//退出文件操作
			int showState = JOptionPane.NO_OPTION;
			if(NoteActionListener.fileState == 1) {
				showState = setOptionMessage("是否需要将该文件保存!");
				if(showState == JOptionPane.OK_OPTION) {
					saveFileContent();
				}
			}
			if(showState != JOptionPane.CANCEL_OPTION) {
				System.exit(0);
			}
		} else if(IConstants.FONT_BOLD.equals(actionComd)) {
			//设置字体粗细
			Font font = fileText.getFont();	//文本域中当前字体
			
			if(font.getStyle() != Font.BOLD) {
				fileText.setFont(new Font("宋体", Font.BOLD, font.getSize()));
			} else {
				fileText.setFont(new Font("宋体", Font.PLAIN, font.getSize()));
			}
		}  else if(IConstants.FONT_ITALIC.equals(actionComd)) {
			//设置字体斜
			Font font = fileText.getFont();	//文本域中当前字体
			
			if(font.getStyle() != Font.ITALIC) {
				fileText.setFont(new Font("宋体", Font.ITALIC, font.getSize()));
			} else {
				fileText.setFont(new Font("宋体", Font.PLAIN, font.getSize()));
			} 
		}
	}
	
	/**
	 * 保存记事本文件信息
	 */
	private void saveFileContent() {
		int result = 0;
		if(fileName == null) {
			result = fileChooser.showSaveDialog(jframe);
			if(result == JFileChooser.APPROVE_OPTION) {
					fileName = fileChooser.getSelectedFile().getAbsolutePath();
			}
			
		}
		if(fileName != null) {
			try {
				//调用文件流操作实现类对文件进行保存操作
				fileStreamOper.saveFile(fileName, fileText.getText());
//				将文件处理操作状态设置为已经保存标识
				NoteActionListener.fileState = 2;
				//设置一个提示框操作信息
				this.setOptionPane("文件保存成功!", JOptionPane.INFORMATION_MESSAGE);
	            logWriter.log("save success",LogWriter.INFO);
			} catch (FileStreamException e) {
				//设置一个错误提示信息
				this.setOptionPane("保存文件出错!", JOptionPane.ERROR_MESSAGE);
				//将文件处理操作状态设置为未保存标识
				NoteActionListener.fileState = 1;
				System.err.println(e);
	            logWriter.log(e, "Can't register JDBC driver: " +
	            		fileName, LogWriter.ERROR);
			}
		}
	}
	
	
	/**
	 * 获取文件内容
	 * @return String
	 */
	private String getFileContent() {
//		FileDialog fileDialog = new FileDialog(jframe);
//		fileDialog.show();
		//通过JFileChooser对象进行文件选择操作
		int result = fileChooser.showOpenDialog(jframe);
		String fileContent = "";
		try {
			//如果选择了需要打开则调用文件流操作类进行操作
			if(result == JFileChooser.APPROVE_OPTION) {
				fileName = fileChooser.getSelectedFile().getAbsolutePath();	//获取文件绝对目录
				jframe.setTitle(IConstants.FRAME_TITLE+">>>>>>"+fileName);
				fileContent = fileStreamOper.openFile(fileName);
			}
		} catch (FileStreamException e) {
			setOptionPane("打开文件失败", JOptionPane.ERROR_MESSAGE);
			System.err.println(e);
		}
		return fileContent;
	}
	
	/**
	 * 设置提示框
	 * 
	 * @param argMessage
	 * @param argOptionInfo
	 */
	private void setOptionPane(String argMessage, int argOptionInfo) {
		JOptionPane.showMessageDialog(jframe, argMessage, "文本操作提示",
				argOptionInfo);
	}	
	
	/**
	 * 设置提示选择框
	 * @param argMessage
	 * @return
	 */
	private int setOptionMessage(String argMessage) {
		int result = JOptionPane.showConfirmDialog(jframe, argMessage);
		return result;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -