一、NoteBookFrame.java
package com.notebook;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.ScrollPaneConstants;
public class NoteBookFrame extends JFrame implements ActionListener {
JMenuBar menuBar = null;
JMenu menuF = null;
JMenu menuE = null;
JMenu menuO = null;
JMenu menuH = null;
JMenuItem menuItemNew = null;
JMenuItem menuItemOpen = null;
JMenuItem menuItemSave = null;
JMenuItem menuItemClose = null;
JMenuItem menuItemCopy = null;
JMenuItem menuItemPaste = null;
JMenuItem menuItemCut = null;
JMenuItem menuItemAll = null;
JMenuItem menuItemDate = null;
JMenuItem menuItemW = null;
JMenuItem menuItemF = null;
JMenuItem menuIteH = null;
JTextArea textArea = null;
JScrollPane jsp = null;
JFileChooser fileChooser = null;
Toolkit toolKit = null;
Clipboard clipboard = null;
public NoteBookFrame() {
this.setTitle("記事本");
this.setBackground(Color.white);
this.setSize(600, 600);
fileChooser = new JFileChooser();
// 獲取默認工具包
toolKit = Toolkit.getDefaultToolkit();
// 獲取系統 Clipboard 的一個實例,該 Clipboard 可作爲本機平臺提供的剪貼板工具的接口
clipboard = toolKit.getSystemClipboard();
menuBar = new JMenuBar();
menuF = new JMenu("文件");
menuItemNew = new JMenuItem("新建");
menuItemOpen = new JMenuItem("打開");
menuItemSave = new JMenuItem("保存");
menuItemClose = new JMenuItem("關閉");
menuE = new JMenu("編輯");
menuItemCopy = new JMenuItem("複製");
menuItemPaste = new JMenuItem("粘貼");
menuItemCut = new JMenuItem("剪切");
menuItemAll = new JMenuItem("全選");
menuItemDate = new JMenuItem("日期/時間");
menuO = new JMenu("設置");
menuItemW = new JMenuItem("自動換行");
menuItemF = new JMenuItem("字體");
menuH = new JMenu("幫助");
menuIteH = new JMenuItem("幫助主題");
menuItemNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
KeyEvent.CTRL_MASK, false));
menuItemOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
KeyEvent.CTRL_MASK, false));
menuItemSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
KeyEvent.CTRL_MASK, false));
menuItemClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
KeyEvent.CTRL_MASK, false));
menuItemCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
KeyEvent.CTRL_MASK, false));
menuItemPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
KeyEvent.CTRL_MASK, false));
menuItemCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
KeyEvent.CTRL_MASK, false));
menuItemAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
KeyEvent.CTRL_MASK, false));
menuItemDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,
KeyEvent.CTRL_MASK, false));
menuItemW.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,
KeyEvent.CTRL_MASK, false));
menuItemF.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
KeyEvent.CTRL_MASK, false));
menuIteH.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,
KeyEvent.CTRL_MASK, false));
menuItemOpen.setIcon(new ImageIcon("open.gif"));
menuItemNew.setIcon(new ImageIcon("new.gif"));
menuItemSave.setIcon(new ImageIcon("save.gif"));
menuItemCopy.setIcon(new ImageIcon("copy.gif"));
menuItemPaste.setIcon(new ImageIcon("paste.gif"));
menuItemCut.setIcon(new ImageIcon("cut.gif"));
menuF.add(menuItemNew);
menuF.addSeparator();
menuF.add(menuItemOpen);
menuF.addSeparator();
menuF.add(menuItemSave);
menuF.addSeparator();
menuF.add(menuItemClose);
menuBar.add(menuF);
menuE.add(menuItemCopy);
menuE.addSeparator();
menuE.add(menuItemPaste);
menuE.addSeparator();
menuE.add(menuItemCut);
menuE.addSeparator();
menuE.add(menuItemDate);
menuE.addSeparator();
menuE.add(menuItemAll);
menuBar.add(menuE);
menuO.add(menuItemW);
menuO.addSeparator();
menuO.add(menuItemF);
menuBar.add(menuO);
menuH.add(menuIteH);
menuBar.add(menuH);
textArea = new JTextArea();
jsp = new JScrollPane(textArea);
// 設置垂直滾動條
jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
// 換行
textArea.setLineWrap(true);
this.add(jsp, BorderLayout.CENTER);
this.add(menuBar, BorderLayout.NORTH);
this.add(jsp);
menuItemNew.addActionListener(this);
menuItemOpen.addActionListener(this);
menuItemSave.addActionListener(this);
menuItemClose.addActionListener(this);
menuItemCopy.addActionListener(this);
menuItemPaste.addActionListener(this);
menuItemCut.addActionListener(this);
menuItemDate.addActionListener(this);
menuItemAll.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
// 打開
if (e.getSource() == menuItemOpen) {
fileChooser.setFileFilter(new MyFilter());
fileChooser.showOpenDialog(this);
File fileName = fileChooser.getSelectedFile();
if (fileName != null) {
openFile(fileName);
}
// 新建
} else if (e.getSource() == menuItemNew) {
textArea.setText("");
// 保存
} else if (e.getSource() == menuItemSave) {
fileChooser.setFileFilter(new MyFilter());
fileChooser.showSaveDialog(this);
File fileName = fileChooser.getSelectedFile();
if (fileName != null) {
writeFile(fileName);
}
// 關閉
} else if (e.getSource() == menuItemClose) {
System.exit(0);
// 複製
} else if (e.getSource() == menuItemCopy) {
// 得到選擇的文字
String chooserText = textArea.getSelectedText();
// 建立傳輸文件的StringSelection對象
StringSelection strSelection = new StringSelection(chooserText);
// 將傳輸的對象放到剪切板中
clipboard.setContents(strSelection, null);
// 粘貼
} else if (e.getSource() == menuItemPaste) {
// 得到放在剪切板中複製的內容
Transferable textPaste = clipboard.getContents(this);
String text = "";
if (textPaste == null) {
return;
}
// getTransferData()返回一個對象,該對象表示將要被傳輸的數據
try {
text = (String) textPaste
.getTransferData(DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 用給定的新文本替換從指示的起始位置到結尾位置的文本
textArea.replaceRange(text, textArea.getSelectionStart(),
textArea.getSelectionEnd());
// 剪切
} else if (e.getSource() == menuItemCut) {
// 得到選擇的文字
String chooserText = textArea.getSelectedText();
// 建立傳輸文件的StringSelection對象
StringSelection strSelection = new StringSelection(chooserText);
// 將傳輸的對象放到剪切板中
clipboard.setContents(strSelection, null);
// 用給定的新文本替換從指示的起始位置到結尾位置的文本
textArea.replaceRange("", textArea.getSelectionStart(),
textArea.getSelectionEnd());
// 全選
} else if (e.getSource() == menuItemAll) {
textArea.selectAll();
// 日期/時間
} else if (e.getSource() == menuItemDate) {
Date date = new Date();
// SimpleFormatter format = new SimpleFormatter();
// Calendar cal = Calendar.getInstance();
textArea.append(date.toString());
}
// 自動換行
// }else if(e.getSource()==menuItemW){
// if(!this.textArea.getLineWrap()){
// textArea.setLineWrap(true);
// }else{
// textArea.setLineWrap(false);
// }
// }
}
// 打開文件
public void openFile(File fileName) {
try {
FileReader readIn = new FileReader(fileName);
// 得到文件的大小
int size = (int) fileName.length();
int charsRead = 0;
char[] byt = new char[size];
// 判斷此流是否已經準備好用於讀取
while (readIn.ready())
// 將字符讀入數組中的某一部分
// byt - 目標緩衝區
// charsRead - 從其處開始存儲字符的偏移量
// size - charsRead - 要讀取的最大字符數
charsRead += readIn.read(byt, charsRead, size - charsRead);
readIn.close();
// 將byte[]轉爲String
// byt - 要解碼爲字符的 byte
// 0 - 要解碼的第一個 byte 的索引
// charsRead - 要解碼的 byte 數
textArea.setText(new String(byt, 0, charsRead));
} catch (Exception e) {
e.getMessage();
}
}
// 保存文件
public void writeFile(File fileName) {
try {
FileWriter write = new FileWriter(fileName);
write.write(textArea.getText());
write.close();
} catch (Exception e) {
e.getMessage();
}
}
}
二、MyFliter.java
package com.notebook;
import java.io.File;
import javax.swing.filechooser.FileFilter;
public class MyFilter extends FileFilter{
@Override
public boolean accept(File f) {
// TODO Auto-generated method stub
String name = f.getName().toLowerCase();
if(f.isDirectory()){
return true;
}
if(name.endsWith(".jpg")||name.endsWith(".txt")||name.endsWith(".png")){
return true;
}
return false;
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return "*.jpg/*.txt/*.png";
}
}
三、Run.java
package com.notebook;
public class Run {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
NoteBookFrame frame = new NoteBookFrame();
frame.setVisible(true);
}
}