1. 程式人生 > >程式—java記事本

程式—java記事本

全篇程式碼
package note2;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.JScrollPane;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Font;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.event.CaretEvent;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

public class Main extends JFrame {
	private JTextArea write;
	private File cFile;
	private String copyText;
	private int start;
	private int end;
	public Main() {
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 927, 1090);
		JScrollPane scrollPane = new JScrollPane();
		getContentPane().add(scrollPane, BorderLayout.CENTER);
		
		JMenuBar menuBar = new JMenuBar();
		scrollPane.setColumnHeaderView(menuBar);
		
		JMenu fileMenu = new JMenu("檔案");
		menuBar.add(fileMenu);
		
		JMenuItem open = new JMenuItem("開啟");
		JFileChooser chooser = new JFileChooser();
		open.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
					int value = chooser.showOpenDialog(Main.this);
					try {
						if (value == JFileChooser.APPROVE_OPTION) {
							chooser.setFileFilter(new FileNameExtensionFilter("可選檔案", "txt"));
							cFile = chooser.getSelectedFile();
							BufferedReader br = new BufferedReader(new FileReader(cFile));
							String thisLine;
							write.setText("");
							while ((thisLine = br.readLine()) != null) {
								write.append(thisLine + "\r\n");
							}
							br.close();
						}
					} catch (Exception e2) {
						System.err.println("open " + e2);
					}
					
				}
			
		});
		
		JMenuItem newfile = new JMenuItem("新建");
		newfile.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				cFile = null;
				write.setText("");
			}
		});
		fileMenu.add(newfile);
		fileMenu.add(open);
		
		JMenuItem save = new JMenuItem("儲存");
		save.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					if (cFile == null) {
						return;
					} else {
						BufferedWriter bw = new BufferedWriter(new FileWriter(cFile));
						bw.write(write.getText());
						bw.close();
					}					
				} catch (Exception e2) {
					System.err.println("save " + e);
				}
			}
		});
		fileMenu.add(save);
		
		JMenuItem saveToNewPlace = new JMenuItem("另存為");
		saveToNewPlace.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				int value = chooser.showSaveDialog(Main.this);
				try {
					if (value == JFileChooser.APPROVE_OPTION) {
						cFile = null;
						File file = chooser.getSelectedFile();
						if (file.exists() == false) {
							file.createNewFile();
						}
						BufferedWriter bw = new BufferedWriter(new FileWriter(file));
						bw.write(write.getText());
						bw.close();
					}
				} catch (Exception e2) {
					System.err.println("saveToNew " + e);
				}
				
			}
		});
		fileMenu.add(saveToNewPlace);
		
		JMenuItem out = new JMenuItem("退出");
		out.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
			}
		});
		fileMenu.add(out);
		
		JMenu editMenu = new JMenu("編輯");
		menuBar.add(editMenu);
		
		JMenuItem copy = new JMenuItem("複製");
		copy.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				copy();
			}
		});
		editMenu.add(copy);
		
		JMenuItem deleteAndCopy = new JMenuItem("剪下");
		deleteAndCopy.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if (write.getSelectedText() != null) {
					copyText = write.getSelectedText();
					delete();
				}
			}
		});
		editMenu.add(deleteAndCopy);
		
		JMenuItem zhan = new JMenuItem("貼上");
		zhan.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				zhan();
			}
		});
		editMenu.add(zhan);
		
		JMenuItem delete= new JMenuItem("刪除");
		delete.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				delete();
			}
		});
		editMenu.add(delete);
		
		JMenuItem find = new JMenuItem("查詢");
		find.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				find();
			}
		});
		editMenu.add(find);
		
		JMenuItem replace = new JMenuItem("替換");
		replace.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				replace();
			}
		});
		editMenu.add(replace);
		
		JMenu textStyle = new JMenu("字型");
		editMenu.add(textStyle);
		
		JCheckBoxMenuItem blod = new JCheckBoxMenuItem("Blod");
		JCheckBoxMenuItem italic = new JCheckBoxMenuItem("italic");
		blod.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (blod.isSelected()) {
					if (italic.isSelected()) {
						write.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 20));
					} else {
						write.setFont(new Font("Arial", Font.BOLD, 20));
					}
				} else {
					if (italic.isSelected()) {
						write.setFont(new Font("Arial", Font.ITALIC, 20));
					} else {
						write.setFont(new Font("Arial", Font.PLAIN, 20));
					}
				}
			}
		});
		textStyle.add(blod);
		
		italic.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (italic.isSelected()) {
					if (blod.isSelected()) {
						write.setFont(new Font("Arial", Font.BOLD + Font.ITALIC, 20));
					}else {
						write.setFont(new Font("Arial", Font.ITALIC, 20));
					}
				} else {
					if (blod.isSelected()) {
						write.setFont(new Font("Arial", Font.BOLD, 20));
					}else {
						write.setFont(new Font("Arial", Font.PLAIN, 20));
					}
				}
			}
		});
		textStyle.add(italic);
		
		JMenu color = new JMenu("Color");
		menuBar.add(color);
		
		ButtonGroup bg = new ButtonGroup();
		
		JRadioButtonMenuItem black = new JRadioButtonMenuItem("black");
		black.setSelected(true);
		black.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				write.setForeground(Color.black);
			}
		});
		color.add(black);
		
		JRadioButtonMenuItem red = new JRadioButtonMenuItem("red");
		red.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				write.setForeground(Color.red);
			}
		});
		color.add(red);
		
		JRadioButtonMenuItem blue = new JRadioButtonMenuItem("blue");
		blue.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				write.setForeground(Color.blue);
			}
		});
		color.add(blue);
		
		JRadioButtonMenuItem green = new JRadioButtonMenuItem("green");
		green.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				write.setForeground(Color.green);
			}
		});
		color.add(green);
		bg.add(red);
		bg.add(green);
		bg.add(blue);
		bg.add(black);
		
		JMenuItem other = new JMenuItem("others...");
		other.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JColorChooser jc = new JColorChooser(write.getForeground());
				Color be = write.getForeground();
				Color co = write.getForeground();
				co = jc.showDialog(null, "請選擇顏色", co);
				if (co == null) {
					write.setForeground(be);
				} else {
					bg.clearSelection();
					write.setForeground(co);
				}
			}
		});
		
		color.add(other);
		
		JScrollPane text = new JScrollPane();
		scrollPane.setViewportView(text);
		
		write = new JTextArea();
		write.setFont(new Font("Arial", Font.PLAIN, 20));
		text.setViewportView(write);
	}
	
	public void CaretUpdate(CaretEvent e) {
		start = e.getDot();
		end = e.getMark();
		int temp = start;
		if (start > end) {
			start = end;
			end = temp;
		}
	}

	private void copy(){
		copyText = write.getSelectedText();
	}
	
	private void zhan(){
		if (copyText != null) {
			StringBuffer sb = new StringBuffer(write.getText().toString());
			String s1 = sb.substring(0, write.getSelectionStart());
			String s2 = sb.substring(write.getSelectionEnd());
			write.setText(s1);
			write.append(copyText);
			write.append(s2);
		}
	}
	
	private void delete(){
		if (write.getSelectedText() != null) {
			StringBuffer sb = new StringBuffer(write.getText().toString());
			String s1 = sb.substring(0, write.getSelectionStart());
			String s2 = sb.substring(write.getSelectionEnd());
			write.setText(s1);
			write.append(s2);
		}
	}
	
	private void find(){
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Find frame = new Find();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	
	private void replace(){
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Replace frame = new Replace();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Main frame = new Main();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	
	class Find extends JFrame {   

		private JPanel contentPane;
		private JTextField textField;
		private boolean isDown;
		private int start;
		private int last;
		/**
		 * Create the frame.
		 */
		public Find() {
			setResizable(false);
			setAlwaysOnTop(true);
			setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			setBounds(100, 100, 650, 250);
			contentPane = new JPanel();
			contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
			setContentPane(contentPane);
			contentPane.setLayout(null);
			
			ButtonGroup bg = new ButtonGroup();
			JRadioButton up = new JRadioButton("向上");
			up.setBounds(159, 99, 177, 29);
			contentPane.add(up);
			bg.add(up);
			
			JRadioButton down = new JRadioButton("向下");
			down.setSelected(true);
			isDown = true;
			down.setBounds(159, 137, 177, 29);
			contentPane.add(down);
			bg.add(down);
			
			textField = new JTextField();
			textField.setBounds(97, 45, 345, 27);
			contentPane.add(textField);
			textField.setColumns(10);
			
			down.addItemListener(new ItemListener() {
				@Override
				public void itemStateChanged(ItemEvent e) {
					if (down.isSelected()) {
						isDown = true;
					} else {
						isDown = false;
					}
				}
			});
			
			JButton search = new JButton("查詢");
			search.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					if (write.getSelectionStart() != 0 || write.getSelectionEnd() != 0) {
						start = write.getSelectionStart();
						last = write.getSelectionEnd();
					}
					if (isDown == true) {
						String text = textField.getText().toString();
						start = write.getText().toString().indexOf(text, last);
						if (start != -1) {
							write.setSelectionStart(start);
							write.setSelectionEnd(start + text.length());
						}
					}else{
						String text = textField.getText().toString();
						start = write.getText().toString().lastIndexOf(text,start-1);
						if (start != -1) {
							write.setSelectionStart(start);
							write.setSelectionEnd(start+text.length());
						}
					}
				}
			});
			search.setBounds(466, 44, 123, 29);
			contentPane.add(search);
		}
	}

	class Replace extends JFrame {

		private JPanel contentPane;
		private JTextField target;
		private JTextField retext;
		private boolean isDown;
		private int start;
		private int last;
		
		public Replace() {
			System.out.println("replace");
			setResizable(false);
			setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			setBounds(100, 100, 650, 250);
			contentPane = new JPanel();
			contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
			setContentPane(contentPane);
			contentPane.setLayout(null);
			isDown = true;
			
			JButton findNext = new JButton("查詢下一個");
			findNext.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					if (write.getSelectionStart() != 0 || write.getSelectionEnd() != 0) {
						start = write.getSelectionStart();
						last = write.getSelectionEnd();
					}
					if (isDown == true) {
						String text = target.getText().toString();
						start = write.getText().toString().indexOf(text, last);
						if (start != -1) {
							write.setSelectionStart(start);
							write.setSelectionEnd(start + text.length());
						}
					}else{
						String text = target.getText().toString();
						start = write.getText().toString().lastIndexOf(text,start-1);
						if (start != -1) {
							write.setSelectionStart(start);
							write.setSelectionEnd(start+text.length());
						}
					}
				}
			});
			findNext.setBounds(441, 50, 123, 29);
			contentPane.add(findNext);
			
			JButton replace = new JButton("替換");
			replace.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					try{
						if (write.getSelectedText().toString().equals(target.getText().toString())) {
							System.out.println("pipei");
							StringBuffer sb = new StringBuffer(write.getText().toString());
							String s1 = sb.substring(0, write.getSelectionStart());
							String s2 = sb.substring(write.getSelectionEnd());
							write.setText(s1);
							write.append(retext.getText().toString());
							write.append(s2);
						}						
					}catch (Exception sd) {
					}
				}
			});
			replace.setBounds(441, 109, 123, 29);
			contentPane.add(replace);
			
			target = new JTextField();
			target.setBounds(110, 51, 290, 27);
			contentPane.add(target);
			target.setColumns(10);
			
			JLabel li = new JLabel("目標文字");
			li.setBounds(14, 54, 81, 21);
			contentPane.add(li);
			
			JLabel li2 = new JLabel("替換文字");
			li2.setBounds(14, 113, 81, 21);
			contentPane.add(li2);
			
			retext = new JTextField();
			retext.setBounds(110, 110, 290, 27);
			contentPane.add(retext);
			retext.setColumns(10);
			ButtonGroup bg = new ButtonGroup();
			JRadioButton up = new JRadioButton("向上");
			up.setBounds(113, 170, 81, 29);
			contentPane.add(up);
			
			JRadioButton down = new JRadioButton("向下");
			down.setSelected(true);
			down.setBounds(219, 170, 88, 29);
			contentPane.add(down);
			bg.add(up);
			bg.add(down);
			down.addItemListener(new ItemListener() {
				@Override
				public void itemStateChanged(ItemEvent e) {
					if (down.isSelected()) {
						isDown = true;
					}else{
						isDown = false;
					}
				}
			});
			JButton replaceall = new JButton("全部替換");
			replaceall.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					if (write.getSelectionStart() != 0 || write.getSelectionEnd() != 0) {
						start = write.getSelectionStart();
						last = write.getSelectionEnd();
					}
					try{
						if (write.getSelectedText().toString().equals(target.getText().toString())) {
							System.out.println("pipei");
							StringBuffer sb = new StringBuffer(write.getText().toString());
							String s1 = sb.substring(0, write.getSelectionStart());
							String s2 = sb.substring(write.getSelectionEnd());
							write.setText(s1);
							write.append(retext.getText().toString());
							write.append(s2);
						}						
					}catch (Exception sd) {
					}
					while(start != -1){
					System.out.println("ahah");
						if (isDown == true) {
							String text = target.getText().toString();
							start = write.getText().toString().indexOf(text, last);
							if (start != -1) {
								write.setSelectionStart(start);
								write.setSelectionEnd(start + text.length());
							}
						}else{
							String text = target.getText().toString();
							start = write.getText().toString().lastIndexOf(text,start-1);
							if (start != -1) {
								write.setSelectionStart(start);
								write.setSelectionEnd(start+text.length());
							}
						}
						try{
							if (write.getSelectedText().toString().equals(target.getText().toString())) {
								System.out.println("pipei");
								StringBuffer sb = new StringBuffer(write.getText().toString());
								String s1 = sb.substring(0, write.getSelectionStart());
								String s2 = sb.substring(write.getSelectionEnd());
								write.setText(s1);
								write.append(retext.getText().toString());
								write.append(s2);
							}						
						}catch (Exception sd) {
						}
					}
				}
			});
			replaceall.setBounds(441, 170, 123, 29);
			contentPane.add(replaceall);
		}
	}
}