?? dreamtimesnotepad.java
字號:
/*
*********************************************************************
* *
* 一個簡單的文本編輯器?! ?
* 一、該本編輯器具有讀出、寫入、編輯文本文件的基本功能。 *
* 二、可以設定文字顏色、和編輯區域背景顏色等基本功能! *
* 三、新增了撤消的功能。(只能撤消一次,將在以后完善) *
* 四、實現了簡單的打印的功能?! ?
* 五、實現了右鍵彈出菜單和工具條?! ?
* 六、實現了簡單的查找功能。 *
* 七、新增文件狀態判斷的功能。在打開新文件、新建新文件以及退出程序時*
* 能夠提示用戶保存還沒有保存的文件。 *
* *
* *
* 該程序可以自由復制和傳播 *
* 請你保留作者的版權 *
* 歡迎提出意見以便程序的完善 *
* *
* 程序制作: 夢想年華 *
* 自由時代 http://www.freeage.cn *
* *
* *
* *
*********************************************************************
*/
package cn.freeage.notepad;
import java.awt.*;
import java.awt.event.*; //導入java系統類
import java.io.*;
import java.util.*;
import java.awt.print.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.undo.*;
@SuppressWarnings("serial")
public class DreamTimesNotePad extends JFrame
implements ActionListener,
MouseListener,
DocumentListener {
JFrame f;
JMenuItem New, Open,Save, SaveAs,Print,PageSetup,Exit, //定義菜單
Undo,Copy,Paste,Cut,SelectAll, Delete,
Find,FindNext,
mFont, fontColor,backColor,
About,
pUndo,pNew,pCopy,pPaste,pCut,pSelectAll, pDelete;
File file = null; //文件對象
String fns = "新文件"; //文件名
JPopupMenu pm = new JPopupMenu();
JFileChooser fc = new JFileChooser(); //文件選擇對話框
JColorChooser cc = new JColorChooser(); //顏色選擇對話框
JTextArea text; //文本域對象
PrinterJob prt = PrinterJob.getPrinterJob(); //打印對象
Font defaultFont = new Font("Courier", Font.PLAIN,16);//默認字體
Font textfont;
Color fcolor,bcolor; //顏色變量
GraphicsEnvironment ge = GraphicsEnvironment.
getLocalGraphicsEnvironment();
Color scolor1 = new Color(130, 6, 254);
Color scolor2 = new Color(204,0,204);
Toolkit tk = Toolkit.getDefaultToolkit(); //創建工具集對象
Dimension sSize = tk.getScreenSize(); //得到屏幕的尺寸
UndoManager undo = new UndoManager();
UndoableEditListener undoHandler = new UndoHandler();
JLabel statusFile;
static int foundCount = 0;
int FindStartPos = 0;
boolean beginTextListener = true, isNewFile;
boolean findingLoop = true;
//創建程序中使用的圖片對象
ImageIcon Iconlogo = new ImageIcon("images/slogo.gif");
ImageIcon Icontop1 = new ImageIcon("images/dream.gif");
ImageIcon Iconopen = new ImageIcon("images/open.gif");
ImageIcon Iconnew = new ImageIcon("images/new.gif");
ImageIcon Iconsave = new ImageIcon("images/save.gif");
ImageIcon Iconprint = new ImageIcon("images/print.gif");
ImageIcon Iconcopy = new ImageIcon("images/copy.gif");
ImageIcon Iconpaste = new ImageIcon("images/paste.gif");
ImageIcon Iconcut = new ImageIcon("images/cut.gif");
ImageIcon Icondelete = new ImageIcon("images/delete.gif");
ImageIcon Iconfind = new ImageIcon("images/find.gif");
ImageIcon Iconundo = new ImageIcon("images/undo.gif");
ImageIcon Iconexit = new ImageIcon("images/exit.gif");
ImageIcon Iconabout = new ImageIcon("images/help.gif");
public static void main(String[] args) {
try {
//使用Swing 提供的不同的界面,本例使用的是window界面
//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
//UIManager.setLookAndFeel("javax.swing.plaf.metextl.MetextlLookAndFeel");
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch(Exception e) { }
Locale.setDefault(Locale.ENGLISH);
Locale.setDefault(Locale.CHINA);
DreamTimesNotePad me = new DreamTimesNotePad();
me.windowLayout();
}
public void windowLayout() {
f = new JFrame(); //定義窗體
f.setIconImage(Iconlogo.getImage()); //設定窗體圖標
//設定窗體標題
f.setTitle("夢想年華記事本 - [新文件]");
//設定窗體的布局格式
f.getContentPane().setLayout(new BorderLayout(5, 5));
f.setSize(600,700); //設定窗體的大小
Dimension fSize = f.getSize(); //得到窗體的大小
//以下語句實現窗體居中顯示
if(fSize.height > sSize.height){
fSize.height= sSize.height;
}
if(fSize.width > sSize.width){
fSize.width = sSize.width;
}
int x = (sSize.width - fSize.width)/2;
int y = (sSize.height - fSize.height)/2;
//創建狀態欄面板
JPanel p = new JPanel();
//狀態欄信息標簽
JLabel label0 = new JLabel("文件狀態:");
statusFile = new JLabel("新文件!");
JLabel label1 = new JLabel(" 程序制作:夢想年華 ");
JLabel label2 = new JLabel(" http://www.freeage.cn");
JLabel label3 = new JLabel(" ");
JLabel label4 = new JLabel(Iconlogo);
label0.setForeground(scolor2);
statusFile.setForeground(scolor2);
label1.setForeground(scolor1); //設置標簽字體顏色
label2.setForeground(scolor1);
label3.setForeground(scolor1);
text = new JTextArea(); //創建文本域對象
text.setFont(defaultFont); //設置文本域的字體
text.getDocument().addUndoableEditListener(undoHandler);
text.getCaret().setVisible(true);
text.addMouseListener(this);
text.getDocument().addDocumentListener(this);
text.getDocument().addUndoableEditListener(undoHandler);
JScrollPane scroller = new JScrollPane(text); //加入滾動條
f.setLocation(x,y);
p.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 0));
p.add(label0);
p.add(statusFile);
p.add(label1);
p.add(label2);
p.add(label3);
p.add(label4);
// 建立主菜單,并設定快捷鍵
JMenuBar mb = new JMenuBar();
JMenu File = new JMenu("文件(F)",true);
File.setMnemonic('F');
JMenu Edit = new JMenu("編輯(E)",true);
Edit.setMnemonic('E');
JMenu Search = new JMenu("查找(S)",true);
Search.setMnemonic('S');
JMenu Format = new JMenu("格式(O)",true);
Format.setMnemonic('O');
JMenu Help = new JMenu("幫助(H)",true);
Help.setMnemonic('H');
//建立各個主菜單的的子菜單并設定快捷鍵
//分別加入各個子菜單的事件監聽
New = new JMenuItem(" 新建",new ImageIcon("images/snew.gif"));
New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
InputEvent.CTRL_MASK));
New.addActionListener(this);
Open = new JMenuItem(" 打開",new ImageIcon("images/sopen.gif"));
Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK));
Open.addActionListener(this);
Save = new JMenuItem(" 保存",new ImageIcon("images/ssave.gif"));
Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK));
Save.addActionListener(this);
SaveAs = new JMenuItem(" 另存為",new ImageIcon("images/ssave.gif"));
SaveAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2,0));
SaveAs.addActionListener(this);
PageSetup = new JMenuItem(" 打印設置",new ImageIcon("images/sprint.gif"));
PageSetup.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
PageSetup.addActionListener(this);
PageSetup.setEnabled(true);
Print = new JMenuItem(" 打印",new ImageIcon("images/sprint.gif"));
Print.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
InputEvent.CTRL_MASK));
Print.addActionListener(this);
Exit = new JMenuItem(" 退出",new ImageIcon("images/sexit.gif"));
Exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,
InputEvent.ALT_MASK));
Exit.addActionListener(this);
Undo = new JMenuItem("撤消",new ImageIcon("images/sundo.gif"));
Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,
InputEvent.CTRL_MASK));
Undo.addActionListener(this);
Undo.setEnabled(false);
Copy = new JMenuItem(" 復制",new ImageIcon("images/scopy.gif"));
Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_MASK));
Copy.addActionListener(this);
Paste = new JMenuItem(" 粘貼",new ImageIcon("images/spaste.gif"));
Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
InputEvent.CTRL_MASK));
Paste.addActionListener(this);
Cut = new JMenuItem(" 剪切",new ImageIcon("images/scut.gif"));
Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
InputEvent.CTRL_MASK));
Cut.addActionListener(this);
SelectAll = new JMenuItem(" 全選");
SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
InputEvent.CTRL_MASK));
SelectAll.addActionListener(this);
Delete = new JMenuItem(" 刪除",new ImageIcon("images/sdelete.gif"));
Delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,
InputEvent.CTRL_MASK));
Delete.addActionListener(this);
Find = new JMenuItem(" 查找",new ImageIcon("images/sfind.gif"));
Find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
InputEvent.CTRL_MASK));
Find.addActionListener(this);
FindNext = new JMenuItem(" 查找下一個",new ImageIcon("images/sfindnext.gif"));
FindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,0));
FindNext.addActionListener(this);
mFont = new JMenuItem("字體");
mFont.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
mFont.addActionListener(this);
fontColor = new JMenuItem("字體顏色");
fontColor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.ALT_MASK));
fontColor.addActionListener(this);
backColor = new JMenuItem("背景顏色");
backColor.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_MASK + InputEvent.ALT_MASK));
backColor.addActionListener(this);
About = new JMenuItem("關于",new ImageIcon("images/shelp.gif"));
About.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
About.addActionListener(this);
//創建彈出菜單
pUndo = new JMenuItem(" 撤消",new ImageIcon("images/sundo.gif"));
pUndo.addActionListener(this);
pUndo.setEnabled(false);
pCopy = new JMenuItem(" 復制",new ImageIcon("images/scopy.gif"));
pCopy.addActionListener(this);
pPaste = new JMenuItem(" 粘貼",new ImageIcon("images/spaste.gif"));
pPaste.addActionListener(this);
pCut = new JMenuItem(" 剪切",new ImageIcon("images/scut.gif"));
pCut.addActionListener(this);
pDelete = new JMenuItem(" 刪除",new ImageIcon("images/sdelete.gif"));
pDelete.addActionListener(this);
pSelectAll = new JMenuItem(" 全選");
pSelectAll.addActionListener(this);
//創建工具條
JToolBar toolbar = new JToolBar();
JButton toolnew = new JButton(Iconnew);
toolnew.setToolTipText("新建 (Ctrl+N)");
toolnew.addActionListener(new ActionListener() { //加入事件監聽
public void actionPerformed(ActionEvent e) {
setnew(); //調用 newFile() 建立新文件
}
});
JButton toolopen = new JButton(Iconopen);
toolopen.setToolTipText("打開 (Ctrl+O)");
toolopen.addActionListener(new ActionListener() { //加入事件監聽
public void actionPerformed(ActionEvent e) {
setopen(); //調用 openFile() 打開文件
}
});
JButton toolsave = new JButton(Iconsave);
toolsave.setToolTipText("保存 (Ctrl+S)");
toolsave.addActionListener(new ActionListener() { //加入事件監聽
public void actionPerformed(ActionEvent e) {
if(file != null) {
saveFile();
}
else {
saveNewFile();
} //調用 saveFile() 保存文件
}
});
JButton toolprint = new JButton(Iconprint);
toolprint.setToolTipText("打印 (Ctrl+P)");
toolprint.addActionListener(new ActionListener() { //加入事件監聽
public void actionPerformed(ActionEvent e) {
print(); //調用 print() 進行打印
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -