引用页_初学Java:仿写记事本_Notepad.java

原创 2012年03月22日 20:22:20

<< 返回
  

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.undo.UndoManager;

public class Notepad extends WindowAdapter {
	private Notepad myself = null;
	private JFrame frame = null;			//主窗口
	private NoteMenu menu = null;			//菜单对象
	private JTextArea textArea = null;		//文本编辑区域
	private JScrollPane scrollPane = null;	//文本编辑区包含在这里,有滚动条
	private Font font = null;				//当前字体
	private File currentFile = null;
	private String savedString = "";
	private Status status = null;
	// 以下用于查找、替换
	private String findStr = null;			// 备注:三个属性,只有findStr是替换功能需要用到的,
	private boolean isCare = false;			// 替换的isCare不具有记忆功能,默认为false
	private String upOrDown = "DOWN";		// 替换的upOrDown永远为DOWN,不支持反向查找
	private String replaceStr = null;		// 替换功能专用
	
	private UndoManager undomg = new UndoManager();
	
	@SuppressWarnings("serial")
	public Notepad() throws Exception {
		this.myself = this;
		UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");	//使用Windows外观风格
		this.frame = new JFrame("无标题 - 记事本");	//默认的主窗口标题
		this.textArea = new JTextArea();					//创建
		this.scrollPane = new JScrollPane(this.textArea, 	//将文本编辑区放入滚动条区域内
				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,		//始终显示垂直滚动条
				JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);	//仅在需要的时候显示水平滚动条
		this.menu = new NoteMenu(this);		//创建菜单
		this.font = new Font("宋体", 0, 16);	//默认字体  16 = 小四(与Windows程序不同)
		
		this.frame.setSize(750, 450);		//主窗口大小
		this.frame.setLocation(250, 150);	//主窗口位置
		// =============================================================//状态栏功能 - 开始
		this.status = new Status(this);
		this.status.setVisible(false);
		this.frame.add(this.status, BorderLayout.SOUTH);
        this.textArea.addMouseListener(new TextMouseListener(this.status, this, this.menu, null, null, null));
        this.textArea.addKeyListener(new TextKeyListener(this.status, this, this.menu, null, null, null));
		// =============================================================//状态栏功能 - 结束
        // =============================================================屏蔽重写JTextArea的 Ctrl + H 热键
        ActionMap actionMap = this.textArea.getActionMap();
        InputMap inputMap = this.textArea.getInputMap();
        inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_H, KeyEvent.CTRL_DOWN_MASK), "CTRL_H");
        actionMap.put("CTRL_H", new AbstractAction(){ 
		        	public void actionPerformed(ActionEvent e) { 
		                new Replace(myself);
		            }
		        });
        // =============================================================// 撤消功能开始
        this.textArea.getDocument().addUndoableEditListener(undomg);
        // =============================================================// 撤消功能结束
		this.frame.add(this.scrollPane, BorderLayout.CENTER);	//将滚动条区加入到主窗口中
		this.frame.setJMenuBar(this.menu);	//为主窗口设置菜单
		this.frame.addWindowListener(this);	//主窗口添加事件监听
		this.frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);	//设置点击主窗口红叉时,主窗口不会消失
		
		this.textArea.setEditable(true);	//设置文本编辑区允许编辑
		this.textArea.setFont(this.font);	//根据字体设置文本编辑区格式
		
		this.frame.setVisible(true);		//设置主窗口可见
	}
	
	public UndoManager getUndomg() {
		return this.undomg;
	}
	
	public void setFindStr(String str) {
		this.findStr = str;
	}
	
	public String getFindStr() {
		return this.findStr;
	}
	
	public void setReplaceStr(String str) {
		this.replaceStr = str;
	}
	
	public String getReplaceStr() {
		return this.replaceStr;
	}
	
	public void setUpOrDown(String upOrDown) {
		this.upOrDown = upOrDown;
	}
	
	public String getUpOrDown() {
		return this.upOrDown;
	}
	
	public void setIsCare(boolean isCare) {
		this.isCare = isCare;
	}
	
	public boolean getIsCare() {
		return this.isCare;
	}
	
	public void setNoteFont(Font font) {
		this.font = font;
		this.textArea.setFont(font);
	}
	
	public Font getNoteFont() {
		return this.font;
	}
	
	public NoteMenu getMenu() {
		return this.menu;
	}
	
	public void setPosition(int row) {	//光标定位到第row行开头
		int result = 0;
		String str = this.textArea.getText();
		char temp[] = str.toCharArray();
		for(int i = 0; i < temp.length; i++) {
			if('\n' == temp[i]) {
				System.out.println("找到一个换行符!");
				row--;
			}
			if(row == 1) {
				result = i;
				break;
			}
		}
		this.textArea.setCaretPosition(result + 1);
	}
	
	public void openFile() {	//“打开”功能套用“新建”功能
		this.createFile();
		new OpenFile(this);
	}
	
	public boolean saveAnother() {
		return new SaveFile(this, "ANOTHER").saveDone();
	}
	
	public boolean saveFile() {
		return new SaveFile(this).saveDone(); 
	}
	
	public void setCurrentFile(File file) {
		this.currentFile = file;
	}
	
	public File getCurrentFile() {
		return this.currentFile;
	}
	
	public void changTitle(String fileName) {
		this.frame.setTitle(fileName + " - 记事本");
	}
	
	public JTextArea getTextArea() {
		return this.textArea;
	}
	
	public JScrollPane getScrollPane() {
		return this.scrollPane;
	}
	
	public Status getStatus() {
		return this.status;
	}
	
	public JFrame getFrame() {
		return this.frame;
	}
	
	public void windowClosing(WindowEvent arg0) {	//窗口关闭时调用
		this.windowExit();
	}
	
	public void createFile() {
		int result = 0;
		if ((this.currentFile == null) && ("".equals(this.textArea.getText()))) {
			this.create();
		} else {
			if(this.checkSaved()) {	//如果当前文件已经保存过
				this.create();
			}
			result = JOptionPane.showConfirmDialog(this.frame, "是否保存更改?", "确认", 1);
			if (result == JOptionPane.YES_OPTION) {	//如果选择了“是”
				if(this.saveFile()){
					this.create();
				}
			} else if (result == JOptionPane.NO_OPTION) {
				this.create();
			}
		}
	}
	
	private void create() {
		this.savedString = "";
		this.findStr = "";
		this.textArea.setText("");
		this.frame.setTitle("无标题 - 记事本");
		this.currentFile = null;
	}
	
	public void windowExit() {
		int result = 0;
		if((this.currentFile == null) && ("".equals(this.textArea.getText()))) {	//如果是新文件,而且内容为空
			System.exit(1);
		} else {
			if(this.checkSaved()) {	//如果当前文件已经保存过
				System.exit(1);
			}
			result = JOptionPane.showConfirmDialog(this.frame, "是否保存更改?", "确认", 1);
			if (result == JOptionPane.YES_OPTION) {	//如果选择了“是”
				if(this.saveFile()){
					System.exit(1);	//保存成功则退出 
				}
			} else if (result == JOptionPane.NO_OPTION) {
				System.exit(1);
			}
		}
	}
	
	public void setSavedString(String str) {
		if (str == null) {
			try{
				throw new Exception();
			} catch (Exception e) {
				System.out.println("发生空字符串异常!\nNotepad.java: setSavedString()");
			}
		} else {
			this.savedString = str;
		}
	}
	
	public boolean checkSaved() {
		if (this.savedString.equals(this.textArea.getText())) {
			return true;
		} else {
			return false;
		}
	}
	
	public static void main(String args[]) throws Exception {
		new Notepad();
	}
}

  
<< 返回

引用页_初学Java:仿写记事本_OpenFile.java

返回    import java.io.File; import java.io.FileReader; import java.io.Reader; import javax.swing...
  • Tieper
  • Tieper
  • 2012年03月22日 20:23
  • 307

引用页_初学Java:仿写记事本_SaveFile.java

返回    import java.io.File; import java.io.FileOutputStream; import java.io.PrintStream; import ja...
  • Tieper
  • Tieper
  • 2012年03月22日 20:28
  • 182

引用页_初学Java:仿写记事本_TextKeyListener.java

返回    /** * 为了状态栏功能而设立的监听类 * 第一次改写: * 同时也适用于对“编辑”-“删除”菜单的可用设置 * 第二次改写: * 同时也适用于对“格式”-“字体”...
  • Tieper
  • Tieper
  • 2012年03月22日 20:31
  • 265

引用页_初学Java:仿写记事本_GoDialog.java

返回    import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListene...
  • Tieper
  • Tieper
  • 2012年03月22日 20:12
  • 205

引用页_初学Java:仿写记事本_Find.java

返回    import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListene...
  • Tieper
  • Tieper
  • 2012年03月22日 20:08
  • 215

引用页_初学Java:仿写记事本_TextMouseListener.java

返回    /** * 为了状态栏功能而设立的监听类 * 第一次改写: * 同时也适用于对“编辑”-“删除”菜单的可用设置 * 第二次改写: * 同时也适用于对“格式”-“字体”...
  • Tieper
  • Tieper
  • 2012年03月22日 20:32
  • 172

NotePad(java写的记事本)

  • 2008年12月20日 21:21
  • 10KB
  • 下载

java记事本notepad用java写的

  • 2011年04月16日 21:31
  • 2KB
  • 下载

【JAVA】简易记事本NotePad

package com.notepad;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import ...

初学Java:仿写记事本

一、前言      纸上得来终觉浅,绝知此事要躬行。   自学Java已经有一段时间了,最近读完了李兴华老师的《Java开发实战经典》一书,受益匪浅。感觉其中的知识比较全面,实用性也比较高,为了...
  • Tieper
  • Tieper
  • 2012年03月22日 19:52
  • 439
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:引用页_初学Java:仿写记事本_Notepad.java
举报原因:
原因补充:

(最多只允许输入30个字)