现在的位置: 首页 > 综合 > 正文

java记事本

2018年01月20日 ⁄ 综合 ⁄ 共 8481字 ⁄ 字号 评论关闭
package yjq.com.cn;

/* 
* WriterReaderBoard.java
*/ 
import java.awt.datatransfer.*; 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*; 
import java.awt.BorderLayout;
import java.awt.FileDialog; 
import java.awt.Font;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.border.TitledBorder;

public class WriterReaderBoard extends JFrame{ 
	
	private static final long serialVersionUID = 1L;
	Clipboard clipboard =null; 
	
	private StringBuffer url = null;
	
	private JFrame f;
	private JMenu menu1; 
	private JMenu menu2; 
	private JMenu menu3;
	
	private JMenuBar menuBar1; 
	
	private JMenuItem menuNewFile; 
	private JMenuItem menuOpen; 
	private JMenuItem menuSave; 
	private JMenuItem menuSaveAs; 
	private JMenuItem menuExit; 
	private JMenuItem menuCut; 
	private JMenuItem menuCopy; 
	private JMenuItem menuPaste; 
	private JTextArea textArea; 
	private JMenuItem menuSelectAll;
	private JMenuItem menuUndo;
	private JMenuItem menuAbout;
	
	/** WriteBoard 构造方法*/ 
	public WriterReaderBoard() { 
	clipboard = this.getToolkit().getSystemClipboard(); 
	this.initComponents(); 
	} 

	private void initComponents() { 
		url = new StringBuffer();
		
		textArea = new JTextArea(); 
		
		menuBar1 = new JMenuBar(); 
		
		menu1 = new JMenu(); 
		
		menuNewFile = new JMenuItem(); 
		menuOpen = new JMenuItem(); 
		menuSave = new JMenuItem(); 
		menuSaveAs = new JMenuItem(); 
		menuExit = new JMenuItem(); 
		
		menu2 = new JMenu(); 
		
		menuCut = new JMenuItem(); 
		menuCopy = new JMenuItem(); 
		menuPaste = new JMenuItem(); 
		menuSelectAll = new JMenuItem();
		menuUndo = new JMenuItem();
		
		setTitle("无标题  - YJQ记事本"); 
		addWindowListener(new WindowAdapter() { 
			public void windowClosing(WindowEvent evt) { 
			exitForm(evt); }}); 
			
		add(textArea,BorderLayout.CENTER); 
			
		menu1.setText("Menu"); 
		menu1.setMnemonic(KeyEvent.VK_M);
		menuNewFile.setText("新建(N)"); 
		menuNewFile.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent evt) { 
			newText(evt);}}); 
		menuNewFile.setAccelerator( 
				KeyStroke.getKeyStroke( 
				KeyEvent.VK_N, 
				InputEvent.CTRL_MASK));
		
		menu1.add(menuNewFile); 
		
		menuOpen.setText("打开(O)..."); 
		menuOpen.addActionListener(new ActionListener(){ 
			public void actionPerformed(ActionEvent evt) { 
				open(evt);
			}}); 
		menuOpen.setAccelerator( 
				KeyStroke.getKeyStroke( 
				KeyEvent.VK_O, 
				InputEvent.CTRL_MASK));
		
		menu1.add(menuOpen);
		
		menuSave.setText("保存(S)"); 
		menuSave.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent evt) { 
				menuSaveActionPerformed(evt); 
			}}); 
		menuSave.setAccelerator( 
				KeyStroke.getKeyStroke( 
				KeyEvent.VK_S, 
				InputEvent.CTRL_MASK));

		menu1.add(menuSave); 
		menuSaveAs.setText("另存为(A)..."); 
		menuSaveAs.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent evt){ 
				menuSaveAsActionPerformed(evt); 
			}}); 
		menu1.add(menuSaveAs); 
		
		menuExit.setText("退出"); 
		menuExit.addActionListener(new ActionListener(){ 
		public void actionPerformed(ActionEvent evt) { 
			System.exit(0); 
		} 
		}); 

		menu1.add(menuExit); 
		menuBar1.add(menu1); 
		
		menu2.setText("编辑(E)"); 
		menu2.setMnemonic(KeyEvent.VK_E);
		
		
		menuCut.setText("剪贴(X)"); 
		menuCut.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent evt) { 
				menuCutActionPerformed(evt); 
			}}); 
		menuCut.setAccelerator( 
				KeyStroke.getKeyStroke( 
				KeyEvent.VK_X, 
				InputEvent.CTRL_MASK));
		 
		menuCopy.setText("复制(C)"); 
		menuCopy.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent evt) { 
				menuCopyActionPerformed(evt); 
			}}); 
		menuCopy.setAccelerator( 
				KeyStroke.getKeyStroke( 
				KeyEvent.VK_C, 
				InputEvent.CTRL_MASK));
		

		menuPaste.setText("粘贴(V)"); 
		menuPaste.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent evt) { 
				menuPasteActionPerformed(evt); 
			}}); 
		menuPaste.setAccelerator( 
				KeyStroke.getKeyStroke( 
				KeyEvent.VK_V, 
				InputEvent.CTRL_MASK));
		
		menuSelectAll.setText("全选(A)"); 
		menuSelectAll.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent evt) { 
				menuAllSelectActionPerformed(evt); 
			}});
		menuSelectAll.setAccelerator( 
				KeyStroke.getKeyStroke( 
				KeyEvent.VK_A, 
				InputEvent.CTRL_MASK));
				
		menuUndo.setText("撤销(Z)"); 
		menuUndo.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent evt) { 
				menuUndoActionPerformed(evt); 
			}
			});
		
		menuUndo.setAccelerator( 
				KeyStroke.getKeyStroke( 
				KeyEvent.VK_Z, 
				InputEvent.CTRL_MASK));
		
		menu2.add(menuCut);
		menu2.add(menuCopy);
		menu2.add(menuPaste); 
		menu2.add(menuSelectAll); 
		menu2.add(menuUndo);
		
		menuBar1.add(menu2); 
		
		menu3 = new JMenu("帮助");
		menuAbout = new JMenuItem("关于记事本");
		menuAbout.addActionListener(new ActionListener() { 
			public void actionPerformed(ActionEvent evt) { 
				JOptionPane.showOptionDialog(null,"程序名称:\n 我的记事本 \n"+
						"功能简介:读UTF-8编码文档,写文档以UTF-8存储", 
						"Designer:YJQ",
						JOptionPane.DEFAULT_OPTION, 
						JOptionPane.INFORMATION_MESSAGE, null, null,null
						); 
			}});
		
		menu3.add(menuAbout);
		
		menuBar1.add(menu3);
		
		setJMenuBar(menuBar1); 
		
		f= new JFrame();
		
		JScrollPane jp = new JScrollPane();
		
		textArea = new JTextArea();
		textArea.setFont(new Font("宋体", Font.BOLD, 13));
		textArea.setLineWrap(true);
		jp.getViewport().add(textArea);
		
		JPanel pane = new JPanel(new BorderLayout());
		pane.add(BorderLayout.NORTH, menuBar1);//添加菜单栏
		pane.add(BorderLayout.CENTER,jp);//添加文本编辑区域
		f.getContentPane().add(pane);
		int WIDTH = 600;
		int HEIGHT =600;
		int w = (Toolkit.getDefaultToolkit().getScreenSize().width-WIDTH)/2;
		int h = (Toolkit.getDefaultToolkit().getScreenSize().height-HEIGHT)/2;
		f.setBounds(w, h,WIDTH, HEIGHT);
		f.setTitle("无标题-我的记事本");
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
	}

	private void menuUndoActionPerformed(ActionEvent evt) {
		
	}
	private void menuAllSelectActionPerformed(ActionEvent evt) {
		
	}
	
	private void menuSaveAsActionPerformed(ActionEvent evt) { 
		String fileName = "无标题";
		FileDialog fd = new FileDialog(new JFrame(), "保存文本",
				FileDialog.SAVE);
		fd.setVisible(true);
		
		if (fd.getDirectory() != null && fd.getFile() != null){
			url.setLength(0);
			url.append(fd.getDirectory()+ fd.getFile());
			fileName = fd.getFile();
			File file = new File(url.toString().trim());
			
			BufferedWriter out = null;
			try{
				out = new BufferedWriter(
						new OutputStreamWriter(
								new FileOutputStream(file),"UTF-8"));
				file.createNewFile();
				out.append(textArea.getText());
				out.flush();
				out.close();
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		f.setTitle(fileName+"-我的记事本");
	} 
		
	private void menuSaveActionPerformed(ActionEvent evt) { 
		if (url.length() == 0) {
			final FileDialog fd = new FileDialog(new JFrame(), "保存文件",
					FileDialog.SAVE);
			
			fd.setVisible(true);
			if (fd.getDirectory()!= null && fd.getFile() != null){
			url.append(fd.getDirectory()+ fd.getFile());
			}
		}
		
			File file = new File(url.toString());
			BufferedWriter out = null;
			
			try {
				out = new BufferedWriter(
						new OutputStreamWriter(
								new FileOutputStream(file),"UTF-8"));
				
				file.createNewFile();
				System.out.println(textArea.getLineCount());
				out.append(textArea.getText());
				out.flush();
				out.close();
			} catch (IOException e1) {
				e1.printStackTrace();
			} 
	} 
		
	private void menuPasteActionPerformed(ActionEvent evt) { 
		Transferable contents = clipboard.getContents(this); 
		DataFlavor flavor = DataFlavor.stringFlavor; 
		if(contents.isDataFlavorSupported(flavor)) 
			try{ 
				String str; 
				str=(String)contents.getTransferData(flavor); 
				textArea.append(str); 
			}catch(Exception e){} 
	} 
		
	private void menuCopyActionPerformed(ActionEvent evt) { 
		String temp = this.textArea.getSelectedText(); 
		StringSelection text = new StringSelection(temp); 
		clipboard.setContents(text,null); 
	} 
		
	private void menuCutActionPerformed(ActionEvent evt) { 
		String temp = this.textArea.getSelectedText(); 
		StringSelection text = new StringSelection(temp); 
		clipboard.setContents(text,null); 
		int start = textArea.getSelectionStart(); 
		int end = textArea.getSelectionEnd(); 
		textArea.replaceRange("",start,end); 
	} 
		
	private void open(ActionEvent evt) { 
		String fileName = "无标题";
		final FileDialog fd = new FileDialog(new JFrame(), "查找文件",
				FileDialog.LOAD);
		fd.setVisible(true);
			
		if (fd.getDirectory() != null && fd.getFile() != null) {
			fileName = fd.getFile();
			textArea.setText("");
			url.setLength(0);
			url.append(fd.getDirectory()+ fd.getFile());
			System.out.println(url.toString());
			
			File file = new File(url.toString().trim());
			String s = null;
			StringBuffer sb = new StringBuffer();
			
			if (file.exists()) {
				System.out.println("该文件存在");
				try {
					FileInputStream fIn = new FileInputStream(file);
					BufferedReader br =
							new BufferedReader(
									new InputStreamReader(
											fIn,"UTF-8"));
					while ((s = br.readLine()) != null) {
						sb.append(s+"\r\n");
					}
					textArea.append(sb.toString());
				} catch (Exception e) {
					e.printStackTrace();
				}
			} 
			else System.out.println("该文件不存在!");
		}
		f.setTitle(fileName+"我的记事本");
	} 
		
	private void newText(ActionEvent evt) { 
		f.setTitle("无标题-我的记事本");
		this.textArea.setText(""); 
		url.setLength(0);
	} 
		

		
	private void exitForm(WindowEvent evt) { 
		System.exit(0); 
	} 
	
	public static void main(String args[]) { 
			new WriterReaderBoard(); 
	}
}

撤销功能有待完善。。。还有字符编码问题!!!如果是用该软件读自己用该软件写的文档没有问题,如果是读doc或者txt非"UTF-8"字符集的,就可能会出现中文乱码,有待完善,网上说有jar包可以实现,不过不是JDK自带的。

抱歉!评论已关闭.