1. 程式人生 > >Java小程式設計--Note記事本

Java小程式設計--Note記事本

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.GroupLayout.Alignment;

public class MyNotePad implements ActionListener {
	private JFrame frame = new JFrame("NewNote");
	private JTextArea jta = new JTextArea();
	private String result = "";

	/* File is a new file? */
	private boolean flag = true;
	private File f;

	/* Find or Replease Dialog */
	private JButton jb = new JButton("Start");
	private JTextField jtf = new JTextField(5);
	private JTextField jt = new JTextField(5);
	private JButton jbt = new JButton("Replace AS");
	private JButton jba = new JButton("Replace All");
	private String value;
	private int start = 0;
	private JFrame jf = new JFrame("Find");
	private JFrame jfc = new JFrame("Replace");

	@Override
	public void actionPerformed(ActionEvent e) {
		String comm = e.getActionCommand();
		/* If file is new */
		if ("New".equals(comm)) {
			New();
		} else if ("Open".equals(comm)) {
			Open();
		} else if ("Save".equals(comm)) {
			Save();
		} else if ("Save As".equals(comm)) {
			Save_As();
		} else if ("Exit".equals(comm)) {
			ExitJudge();
		} else if ("Undo".equals(comm)) {
			jta.setText(value);
		} else if ("Cut".equals(comm)) {
			value = jta.getText();
			jta.cut();
		} else if ("Copy".equals(comm)) {
			jta.copy();
		} else if ("Paste".equals(comm)) {
			value = jta.getText();
			jta.paste();
		} else if ("Delete".equals(comm)) {
			value = jta.getText();
			jta.replaceSelection(null);
		} else if ("Select all".equals(comm)) {
			jta.selectAll();
		} else if ("Find".equals(comm)) {
			Find();
		} else if ("Replace".equals(comm)) {/* menuitem */
			Replace();

		} else if ("Version".equals(comm)) {
			Version();
		} else if ("Start".equals(comm) || "Next".equals(comm)) {
			StartNextButton();
		} else if ("Replace AS".equals(comm)) {/* buttron */
			ReplaceAs();
		} else if ("Replace All".equals(comm)) {/* buttron */
			String temp = jta.getText();
			temp = temp.replaceAll(jtf.getText(), jt.getText());
			jta.setText(temp);
		} else if ("Auto Wrap".equals(comm)) {
			if (!jta.getLineWrap())
				jta.setLineWrap(true);// 自動換行
			else {
				jta.setLineWrap(false);
			}
		}
	}

	/* ExitJudge */
	private void ExitJudge() {
		if (flag) {
			int returnVal = JOptionPane.showConfirmDialog(null,
					"Doesn't save this new file!!\r\nExit??");
			if (returnVal == JOptionPane.OK_OPTION)/* select the OK button */
			{
				Save();
				System.exit(0);
			} else if (returnVal == JOptionPane.NO_OPTION) {
				/* select the NO button */
				System.exit(0);
			} else {
				/* select the cancle button */
				frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
			}
		}
	}

	/* Replace As */
	private void ReplaceAs() {
		String temp = jtf.getText();
		int s = value.indexOf(temp, start);
		if (value.indexOf(temp, start) != -1) {
			jta.setSelectionStart(s);
			jta.setSelectionEnd(s + temp.length());
			jta.setSelectedTextColor(Color.GREEN);
			start = s + 1;
			jta.replaceSelection(jt.getText());
		} else {
			JOptionPane.showMessageDialog(jf, "Find Over!", "Tips", 0);
			jf.dispose();
		}
	}

	/* StartNextButton */
	private void StartNextButton() {
		String temp = jtf.getText();
		jb.setText("Start");
		if (!temp.equals("")) {
			int s = value.indexOf(temp, start);
			if (value.indexOf(temp, start) != -1) {
				jta.setSelectionStart(s);
				jta.setSelectionEnd(s + temp.length());
				jta.setSelectedTextColor(Color.GREEN);
				start = s + 1;
				jb.setText("Next");
				// value=value.substring(s+temp.length());//不能擷取字串
			} else {
				JOptionPane.showMessageDialog(jf, "Find Over!", "Tips", 0);
				/* reset the cursor to index 0 */
				jta.setCaretPosition(0);
				start = 0;
				jf.dispose();
			}
		} else {
			JOptionPane.showMessageDialog(null, "Text is null");
			jf.dispose();
		}
	}

	/* start the text_find from */
	private void Find() {
		value = jta.getText();
		if (!value.equals("")) {
			jf.add(jtf, BorderLayout.CENTER);
			jf.add(jb, BorderLayout.SOUTH);
			jf.setLocation(630, 300);
			jf.pack();
			jf.setVisible(true);
			jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		} else {
			JOptionPane.showMessageDialog(null, "Text is null!!");
		}
	}

	/* Version */
	private void Version() {
		JDialog jd = new JDialog(frame, "Version");
		/* tips */
		JLabel label = new JLabel("Designed By ZKJ!!!");
		/* tips' font */
		label.setFont(new Font("微軟雅黑", Font.PLAIN, 25));
		/* text center */
		label.setHorizontalAlignment(JTextField.CENTER);
		jd.add(label, BorderLayout.CENTER);
		jd.setLocation(600, 350);
		jd.setSize(300, 100);
		jd.setVisible(true);
		// jd.pack();
		/* JDialog.DISPOSE_ON_CLOSE */
		jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
	}

	/* start the text_replace from */
	/* label */
	JLabel jl1 = new JLabel("Content:");
	JLabel jl2 = new JLabel("Replace As:");
	JLabel jl3 = new JLabel();
	JLabel jl4 = new JLabel();

	private void Replace() {
		value = jta.getText();
		jfc.setLayout(new GridLayout(3, 3));
		/* add */
		jfc.add(jl1);
		jfc.add(jtf);
		jfc.add(jb);
		jfc.add(jl2);
		jfc.add(jt);
		jfc.add(jbt);
		jfc.add(jl3);
		jfc.add(jl4);
		jfc.add(jba);
		jfc.setLocation(570, 300);
		jfc.pack();
		jfc.setVisible(true);
		/* JDialog.DISPOSE_ON_CLOSE */
		jfc.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}

	/* new */
	private void New() {
		/* If there exits a file */
		if (!(frame.getTitle().equals("NewNote"))) {
			/* If this file doesn't save */
			if (!flag) {
				write();
				newNew();
			} else {
				JFileChooser jfc = new JFileChooser("D:\\javaNote");
				int returnVal = jfc.showDialog(null, "Save As");
				if (returnVal == JFileChooser.APPROVE_OPTION) {
					f = jfc.getSelectedFile();
					flag = false;
					write();
				}
			}
		} else if (!(jta.getText().isEmpty())) {
			JFileChooser jfc = new JFileChooser("D:\\javaNote");
			int returnVal = jfc.showDialog(null, "Save");
			if (returnVal == JFileChooser.APPROVE_OPTION) {
				f = jfc.getSelectedFile();
				flag = false;
				write();
				newNew();
			}
		} else {
			newNew();
		}
	}

	/* open */
	private void Open() {
		JFileChooser jfc = new JFileChooser("D:\\javaNote");
		jfc.setDialogType(JFileChooser.OPEN_DIALOG);
		int returnVal = jfc.showOpenDialog(null);
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			f = jfc.getSelectedFile();
			/* set frame title */
			frame.setTitle(f.getName());
			result = read();
			flag = false;
			value = result;
			jta.setText(result);
		}
	}

	/* save as */
	private void Save_As() {
		JFileChooser jfc = new JFileChooser("D:\\javaNote");
		int returnVal = jfc.showDialog(null, "Save As");
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			f = jfc.getSelectedFile();
			write();
		}
	}

	/* save */
	private void Save() {
		JFileChooser jfc = new JFileChooser("D:\\javaNote");
		if (flag) {
			int returnVal = jfc.showDialog(null, "Save");
			if (returnVal == JFileChooser.APPROVE_OPTION) {
				f = jfc.getSelectedFile();
				flag = false;
				write();
			}
		} else {
			write();
		}
	}

	/* read text to programme */
	public String read() {
		String temp = "";
		try {
			FileInputStream fis = new FileInputStream(f.getAbsolutePath());
			byte[] b = new byte[1024];
			int num = fis.read(b);
			while (num != -1) {
				temp = temp + new String(b, 0, num);
				num = fis.read(b);
			}
			fis.close();
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		return temp;
	}

	/* write text to file */
	public void write() {
		try {
			FileOutputStream fos = new FileOutputStream(f);
			fos.write(jta.getText().getBytes());
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/* new file */
	public void newNew() {
		/* release the old frame */
		frame.dispose();
		/* new another frame */
		new MyNotePad();
		/* set flag=true */
		flag = true;
	}

	/* constructor */
	public MyNotePad() {
		init();
	}

	/* init the frame */
	private void init() {
		JMenuBar jmb = addMenuToFrame();
		frame.setJMenuBar(jmb);
		// jta.setLineWrap(true);// 自動換行
		JScrollPane jsp = new JScrollPane(jta);// 滾動視窗面板
		frame.add(jsp);

		jb.addActionListener(this);
		jbt.addActionListener(this);
		jba.addActionListener(this);
//		try {
//			UIManager
//					.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
//		} catch (Exception e) {
//
//			e.printStackTrace();
//		}
		try {
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		/* Key Event */
		addKeyEvent();
		/* Window Event */
		AddWinCloseEvent();
		frame.setLocation(550, 200);
		frame.setSize(400, 400);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	/* Window Event */
	private void AddWinCloseEvent() {
		frame.addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosing(WindowEvent e) {
				ExitJudge();
			}
		});
	}

	/* Add KeyEvent */
	private void addKeyEvent() {
		/* adapter */
		jta.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				int key = e.getKeyCode();
				switch (key) {
				case KeyEvent.VK_CONTROL | KeyEvent.VK_C:/* Ctrl+C */
					jta.copy();
					break;
				case KeyEvent.VK_CONTROL | KeyEvent.VK_V:/* Ctrl+V */
					jta.paste();
					break;
				case KeyEvent.VK_CONTROL | KeyEvent.VK_A:/* Ctrl+A */
					jta.selectAll();
					break;
				case KeyEvent.VK_DELETE: /* Delete */
					value = jta.getText();
					jta.replaceSelection(null);
					break;
				}
				/* Ctrl+ _ */
				if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_N)
					newNew();
				else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S) {
					Save();
				} else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_O) {
					Open();
				} else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_F) {
					Find();
				} else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_H) {
					Replace();
				} else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_Z) {
					jta.setText(value);
				}

			}
		});
	}

	/* add menubar to frame */
	private JMenuBar addMenuToFrame() {
		JMenuBar jmb = new JMenuBar();
		String[] menuLab = { "File", "Edit", "Font", "Help" };
		String[][] menuItemLab = {
				{ "New", "Open", "Save", "Save As", "Exit" },
				{ "Undo", "Cut", "Copy", "Paste", "Delete", "Select all",
						"Find", "Replace" }, { "Auto Wrap" }, { "Version" } };
		/* add */
		for (int i = 0; i < menuLab.length; i++) {
			JMenu menu = new JMenu(menuLab[i]);
			jmb.add(menu);
			for (int j = 0; j < menuItemLab[i].length; j++) {
				JMenuItem jmi = new JMenuItem(menuItemLab[i][j]);
				menu.add(jmi);
				jmi.addActionListener(this);
			}
		}
		return jmb;
	}

	/* test */
	public static void main(String[] args) {
		new MyNotePad();
	}
}

/*這個記事本的主要難點就在於讀寫檔案,以及各種邏輯的控制,是否儲存為儲存的,是否退出....等等總之還是比較有意思而且有綜合運用File,swing等知識*/下面是執行的幾個截圖/*見諒一下,註釋用了一手不標準的Eng*/