(完整word版)简单Java仿windows记事本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主程序:
import java.awt。
*;
import java.awt.datatransfer.*;
import java。
awt。
event.*;
import javax。
print。
*;
import javax.print。
attribute。
DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;import javax.print.attribute.PrintRequestAttributeSet;import javax。
print.attribute.standard.MediaSizeName; import javax.swing。
*;
import javax.swing.border。
BevelBorder;
import javax。
swing。
event。
UndoableEditEvent;import javax。
swing。
event。
UndoableEditListener;import javax。
swing.filechooser.*;
import javax.swing.filechooser。
FileFilter;
import javax。
swing。
plaf.FileChooserUI;
import javax。
swing.undo.UndoableEdit;
import java.io.*;
public class Notepad extends JFrame {
/**
*@param args
*/
public JTextArea jta=null;//中间的文本区域
private File selectedFile=null;
private JFileChooser chooser=null;//文件选择器
private UndoableEdit edit; //设置还原功能
private boolean canUndo=false;
private JMenuItem jmiUndoItem;//撤销的菜单
private Clipboard clip=null;//粘贴板
private JDialog jdSearchDialog;
public Notepad()
{
super(”Notepad Beta”);
super。
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
chooser=new JFileChooser();
chooser。
setFileSelectionMode(JFileChooser.FILES_ONLY);
clip=Toolkit。
getDefaultToolkit().getSystemClipboard();
jta=new JTextArea();
jta。
setWrapStyleWord(true);
jta。
setLineWrap(true);
//*****************************右键弹出功能
final JPopupMenu jpMenu=new JPopupMenu();
JMenuItem jpItemUndo=new JMenuItem(”撤销(U)”);
JMenuItem jpItemCut=new JMenuItem(”剪切(T)”);
JMenuItem jpItemCopy=new JMenuItem(”复制(C) ”); JMenuItem jpItemPaste=new JMenuItem("粘贴(P) ”); jpMenu。
add(jpItemUndo);
jpMenu.add(new JPopupMenu。
Separator());
jpMenu。
add(jpItemCut);
jpMenu.add(jpItemCopy);
jpMenu.add(jpItemPaste);
jpMenu。
setBorder(new BevelBorder(BevelBorder.RAISED));
jta。
addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
if(e。
isMetaDown())
{
if(!jpMenu.isVisible())
{
jpMenu.show(e.getComponent(),e.getX(),e。
getY());
}
}
else {
jpMenu.setVisible(false);
}
}
});
//*****************************实现撤销功能
jta。
getDocument()。
addUndoableEditListener(new UndoableEditListener() {@Override
public void undoableEditHappened(UndoableEditEvent e) {
// TODO Auto-generated method stub
edit=e.getEdit();
if(edit!=null)
{
canUndo=edit。
canUndo();
}
else
{
canUndo=false;
}
}
});
//**********************************设置相关菜单和事件监听Container content=getContentPane();
JMenuBar jmb=new JMenuBar();
JMenu jmFile=new JMenu(”文件(F)”);
jmFile.setMnemonic('f’);
JMenu jmEdit=new JMenu(”编辑(E)");
jmEdit.setMnemonic('e’);
JMenu jmStyle=new JMenu(”格式(O)”);
jmStyle。
setMnemonic('e’);
JMenu jmView=new JMenu(”查看(V)");
jmView.setMnemonic('v');
JMenu jmHelp=new JMenu("帮助(H)");
jmHelp。
setMnemonic('h');
jmb.add(jmFile);
jmb。
add(jmEdit);
jmb.add(jmStyle);
jmb。
add(jmView);
jmb。
add(jmHelp);
setJMenuBar(jmb);
JMenuItem jmiNewItem=new JMenuItem("新建(N) Ctrl+N");
jmiNewItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0){
// TODO Auto—generated method stub
if(!jta.getText().equals(”"))
{
int confirm=JOptionPane.showConfirmDialog(Notepad.this,"是否保存(S) Ctrl+S文件?”);
if(confirm==JOptionPane.OK_OPTION)
{
if(selectedFile!=null)
{
try {
FileWriter fw=new FileWriter(selectedFile);
fw.write(jta。
getText());
fw。
close();
}catch (Exception e) {
// TODO: handle exception
JOptionPane。
showConfirmDialog(Notepad.this, ”文件写入异常");
}
jta。
setText("”);
}
else
{
jta。
setText(””);
JFileChooser jChooser=new JFileChooser();
int selection=jChooser.showSaveDialog(Notepad.this);
if(selection==JFileChooser。
APPROVE_OPTION)
{
selectedFile=jChooser.getSelectedFile();
try {
FileWriter fw=new FileWriter(selectedFile);
fw.write(jta。
getText());
fw.close();
}catch (Exception e) {
// TODO: handle exception
JOptionPane。
showConfirmDialog(Notepad。
this, "文件写入异常”);
}
}
}
}
else if(confirm==JOptionPane.NO_OPTION)
{
jta。
setText(”");
}
else {}
}
else{}
}
});
JMenuItem jmiOpenItem=new JMenuItem("打开(O)Ctrl+O");
jmiOpenItem。
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0){
// TODO Auto—generated method stub
if(!jta。
getText().equals("”))
{
int confirm=JOptionPane。
showConfirmDialog(Notepad。
this, "是否保存(S) Ctrl+S文件?");
if(confirm==JOptionPane。
OK_OPTION)
{
if(selectedFile!=null)
{
try {
FileWriter fw=new FileWriter(selectedFile);
fw.write(jta.getText());
fw。
close();
} catch (Exception e) {
// TODO:handle exception
JOptionPane。
showConfirmDialog(Notepad。
this, ”文件写入异常");
}
}
else
{
JFileChooser jChooser=new JFileChooser();
int selection=jChooser。
showSaveDialog(Notepad.this);
if(selection==JFileChooser。
APPROVE_OPTION)
{
selectedFile=jChooser.getSelectedFile();
(完整word版)简单Java仿windows记事本
try {
FileWriter fw=new FileWriter(selectedFile);
fw.write(jta。
getText());
fw。
close();
} catch (Exception e) {
// TODO: handle exception
JOptionPane。
showConfirmDialog(Notepad.this, ”文件写入异常");
}
}
}
}
else if(confirm==JOptionPane。
NO_OPTION)
{
jta。
setText(””);
JFileChooser jChooser=new JFileChooser();
int selection=jChooser.showOpenDialog(Notepad.this);
{
if(selection==JFileChooser.APPROVE_OPTION)
{
selectedFile=jChooser。
getSelectedFile();
try {
BufferedReader bf=new BufferedReader(new FileReader (selectedFile));
(完整word版)简单Java仿windows记事本
String tempString="”;
int i;
while((i=bf。
read())!=—1)
{
tempString+=String。
valueOf((char)i);
}
jta。
setText(tempString);
bf。
close();
} catch (Exception e) {
// TODO: handle exception
JOptionPane。
showConfirmDialog(Notepad.this, "文件保存(S) Ctrl+S错误");
}
}
else {}
}
}
else {}
}
else
{
JFileChooser jChooser=new JFileChooser();
int selection=jChooser.showOpenDialog(Notepad.this);
if(selection==JFileChooser。
APPROVE_OPTION)
{
selectedFile=jChooser.getSelectedFile();
try {
BufferedReader bf=new BufferedReader(new FileReader(selectedFile));
String tempString=”";
int i;
while((i=bf.read())!=-1)
{
tempString+=String.valueOf((char)i);
}
jta.setText(tempString);
bf。
close();
} catch (Exception e) {
// TODO:handle exception
JOptionPane.showConfirmDialog(Notepad.this, "文件打开(O) Ctrl+O错误");
}
}
else {}
}
}
});
JMenuItem jmiSaveItem=new JMenuItem("保存(S) Ctrl+S”);
jmiSaveItem。
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(jta.getText()。
equals(”")){}
else
{
if(selectedFile==null)
{
JFileChooser jChooser=new JFileChooser();
int selection=jChooser.showOpenDialog(Notepad.this);
if(selection==JFileChooser。
APPROVE_OPTION)
{
selectedFile=jChooser.getSelectedFile();
try {
BufferedReader bf=new BufferedReader(new FileReader (selectedFile));
String tempString=””;
int i;
while((i=bf。
read())!=-1)
{
(完整word版)简单Java仿windows记事本
tempString+=String。
valueOf((char)i);
}
jta.setText(tempString);
bf.close();
}catch (Exception e){
// TODO:handle exception
JOptionPane.showConfirmDialog(Notepad。
this,”文件打开(O)Ctrl+O错误");
}
}
else {}
}
else
{
try {
FileWriter fw=new FileWriter(selectedFile);
fw.write(jta.getText());
fw。
close();
}catch (Exception e){
// TODO:handle exception
JOptionPane.showConfirmDialog(Notepad.this, ”文件写入异常”);
}
}
}});
JMenuItem jmiSaveTo = new JMenuItem("另存为(A)。
..");
jmiSaveTo。
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0){
// TODO Auto-generated method stub
JFileChooser jChooser=new JFileChooser();
int selection=jChooser.showOpenDialog(Notepad.this);
if(selection==JFileChooser.APPROVE_OPTION)
{
selectedFile=jChooser。
getSelectedFile();
try {
BufferedWriter bf=new BufferedWriter(new FileWriter (selectedFile));
bf.write(jta.getText());
bf.close();
} catch (Exception e){
// TODO:handle exception
JOptionPane.showConfirmDialog(Notepad。
this, ”文件打开(O) Ctrl+O错误");
}
}
else {}
});
JMenuItem jmiExitItem=new JMenuItem(”退出(X)");
jmiExitItem。
addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0){
// TODO Auto-generated method stub
if(jta.getText()。
equals("”))
System。
exit(0);
else
{
int t=JOptionPane。
showConfirmDialog(Notepad。
this, ”确定退出(X)?”);
if(t==JOptionPane。
OK_OPTION)
{
System。
exit(0);
}
}
}
});
JMenuItem jmiPrintItem = new JMenuItem(”打印(P)Ctrl+P”);jmiPrintItem.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0){
DocFlavor flavor = DocFlavor.INPUT_STREAM。
AUTOSENSE;
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(MediaSizeName.ISO_A4);
PrintService[] pservices =
PrintServiceLookup.lookupPrintServices(flavor,aset);
PrintService defaultService=PrintServiceLookup。
lookupDefaultPrintService();
if (pservices。
length > 0){
PrintService service = ServiceUI.printDialog(null,200, 200,pservices,
defaultService,flavor, aset);
DocPrintJob pj = service。
createPrintJob();
try {
String fis=jta。
getText();
DocAttributeSet das = new HashDocAttributeSet();
Doc doc = new SimpleDoc(fis,flavor, das);
pj。
print(doc, aset);
}
catch (PrintException e) {
e.printStackTrace();
}
}
}
});
jmFile。
add(jmiNewItem);
jmFile.add(jmiSaveItem);
jmFile。
add(jmiSaveTo);
jmFile.add(new JSeparator());
jmFile。
add(jmiPrintItem);
jmFile.add(new JSeparator());
jmFile.add(jmiExitItem);
//******************************实现编辑菜单的相关item
//***************************由于item太多,就放在一个类中实现监听(除了jmiUndoItem) jmiUndoItem = new JMenuItem(”撤销(U)Ctrl+Z”);
jmiUndoItem。
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0){
// TODO Auto-generated method stub
if(canUndo)
{
jmiUndoItem。
setEnabled(true);
edit.undo();
}
else {
jmiUndoItem.setEnabled(false);
}
}
});
JMenuItem jmiCutItem = new JMenuItem(”剪切(T)Ctrl+T"); jmiCutItem。
addActionListener(new EditListener());
JMenuItem jmiCopyItem = new JMenuItem(”复制(C)Ctrl+C”); jmiCopyItem。
addActionListener(new EditListener());
JMenuItem jmiPasteItem = new JMenuItem("粘贴(P)Ctrl+V");jmiPasteItem.addActionListener(new EditListener());
JMenuItem jmiDeleteItem = new JMenuItem(”删除(L) Del");jmiDeleteItem。
addActionListener(new EditListener());
JMenuItem jmiSearchItem = new JMenuItem("查找(F)Ctrl+F");jmiSearchItem。
addActionListener(new EditListener());
JMenuItem jmiSearchNextItem = new JMenuItem(”查找下一个(N) F3”); jmiSearchNextItem。
addActionListener(new EditListener());
JMenuItem jmiReplaceItem = new JMenuItem("替换");jmiReplaceItem。
addActionListener(new EditListener());
JMenuItem jmiGoToItem = new JMenuItem(”转到");
jmiGoToItem。
addActionListener(new EditListener());
JMenuItem jmiSelectAllItem = new JMenuItem(”全选"); jmiSelectAllItem。
addActionListener(new EditListener());
JMenuItem jmiDateItem = new JMenuItem(”日期”);
jmiDateItem。
addActionListener(new EditListener());
jmEdit.add(jmiUndoItem);
jmEdit.add(new JSeparator());
jmEdit.add(jmiCutItem);
jmEdit.add(jmiCopyItem);
jmEdit。
add(jmiPasteItem);
jmEdit。
add(jmiDeleteItem);
jmEdit。
add(new JSeparator());
jmEdit。
add(jmiSearchItem);
jmEdit.add(jmiSearchNextItem);
jmEdit。
add(jmiReplaceItem);
jmEdit.add(jmiGoToItem);
jmEdit.add(new JSeparator());
jmEdit.add(jmiSelectAllItem);
jmEdit.add(jmiDateItem);
//************************* 风格菜单的实现
JCheckBox jcbAutoNextLine=new JCheckBox(”自动换行");
JMenuItem jmiFontitemItem = new JMenuItem("字体”);
jmStyle.add(jcbAutoNextLine);
jmStyle.add(jmiFontitemItem);
JMenuItem jmiViewStatusItem = new JMenuItem(”查看状态栏");
jmiViewStatusItem.setEnabled(false);
jmView.add(jmiViewStatusItem);
JMenuItem jmiAboutItem=new JMenuItem(”关于”);
@Override
public void actionPerformed(ActionEvent e){
// TODO Auto-generated method stub
new HelpDialog(Notepad。
this);
}
});
//**********************帮助菜单
jmHelp。
add(jmiAboutItem);
setLayout(new BorderLayout());
JScrollPane jsp=new JScrollPane(jta);
jsp.requestFocus(true);
content.add(jsp,BorderLayout.CENTER);
}
public static void main(String[] args)throws Exception{
// TODO Auto-generated method stub
try {
UIManager。
setLookAndFeel("com。
sun。
java。
swing。
plaf。
windows。
WindowsLookAndFeel");
} catch (Exception e){
System。
out.print(”Look And Feel Exception");
System。
exit(0);
// TODO: handle exception
JFrame frame=new Notepad();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
int r=JOptionPane.showConfirmDialog(null, "确认退出吗?”);
if(r==JOptionPane.OK_OPTION)
System。
exit(0);
}
});
frame.setSize(1000,500);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
//***************************** 和剪贴板相关函数的实现public String getClipbordContent(Clipboard clip)throws Exception
{
Transferable trans = clip。
getContents(null);
if(trans!=null)
{
if(trans。
isDataFlavorSupported(DataFlavor。
stringFlavor))
return (String)trans.getTransferData(DataFlavor.stringFlavor);
else return "";
else
return "";
}
public void setClipbordContent(Clipboard clip,String str) throws Exception {
Transferable trans=new StringSelection(str);
clip。
setContents(trans, null);
}
//********************************监听编辑菜单下item的事件class EditListener implements ActionListener
{
private String tem pString="”;
String textString=jta。
getText();
String searchString="";
int stringLength=0;
int startPos;
JTextField jtField=null;
@Override
public void actionPerformed(ActionEvent e){
// TODO Auto—generated method stub
if(e。
getActionCommand()。
equals("剪切(T)Ctrl+T"))
{
tempString=jta.getSelectedText();
try {
setClipbordContent(clip,tempString);
}catch (Exception e1) {
// TODO Auto—generated catch block
e1.printStackTrace();
}
jta。
replaceSelection(”");
}
else if (e。
getActionCommand()。
equals(”复制(C) Ctrl+C”)) { tempString=jta。
getSelectedText();
try {
setClipbordContent(clip, tempString);
}catch (Exception e2){
// TODO:handle exception
e2.printStackTrace();
}
}
else if (e。
getActionCommand().equals(”粘贴(P) Ctrl+V”)){try {
tempString=getClipbordContent(clip);
} catch (Exception e1){
// TODO Auto-generated catch block
e1。
printStackTrace();
}
int pos=jta.getCaretPosition();
jta.insert(tempString,pos);
}
else if (e。
getActionCommand().equals(”删除(L)Del")) {jta.replaceSelection("");
}
else if (e.getActionCommand().equals(”查找(F) Ctrl+F”)) { jdSearchDialog=new JDialog(Notepad。
this,”查找");
Container content=jdSearchDialog.getContentPane();
JLabel jl=new JLabel(”查找内容:");
jtField=new JTextField(20);
jtField。
requestFocus();
JButton jbt1=new JButton("查找”);
jbt1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
searchString=jtField。
getText();
stringLength=searchString.length();
if(stringLength〉0)
{
startPos=jta.getText()。
indexOf(searchString);
if(startPos〉=0)
{
jta.select(startPos, startPos+stringLength);
}
else {
JOptionPane.showConfirmDialog(Notepad.this,”找不到"+”\"”+searchString+”\””);
}
}
else {
JOptionPane.showConfirmDialog(Notepad。
this,"请输入查找内容");
}
}
});
JPanel jp1=new JPanel(new BorderLayout(3,1));
jp1.add(jl,BorderLayout。
WEST);
jp1。
add(jtField,BorderLayout.CENTER);
jp1。
add(jbt1,BorderLayout.EAST);
JPanel jp3 = new JPanel(new GridLayout(1,2));
jp3.setBorder(BorderFactory。
createTitledBorder(”方向"));
JRadioButton jrb1=new JRadioButton(”向上(U)");
JRadioButton jrb2=new JRadioButton("向下(D)”); ButtonGroup bgButtonGroup=new ButtonGroup(); bgButtonGroup。
add(jrb1);
bgButtonGroup.add(jrb2);
jp3.add(jrb1);
jp3.add(jrb2);
JCheckBox jcb=new JCheckBox(”区分大小写(c)"); JPanel jp2 = new JPanel(new BorderLayout());JButton jbt2=new JButton(”取消”);
jbt2.addActionListener(new ActionListener(){@Override
public void actionPerformed(ActionEvent arg0) {// TODO Auto—generated method stub
jdSearchDialog。
dispose();
}
});
jp2。
add(jcb,BorderLayout.WEST);
jp2.add(jp3,BorderLayout。
CENTER);
jp2。
add(jbt2,BorderLayout.EAST);
content。
setLayout(new BorderLayout());content.add(jp1,BorderLayout。
NORTH);content.add(jp2,BorderLayout.CENTER);
jdSearchDialog。
setDefaultCloseOperation(JDialog。
DISPOSE_ON_CLOSE);
jdSearchDialog.setLocationRelativeTo(null);
jdSearchDialog。
setSize(400,100);
jdSearchDialog。
setResizable(false);
jdSearchDialog。
setVisible(true);
}
else if(e.getActionCommand()。
equals(”查找下一个(N)F3"))
{
JOptionPane.showConfirmDialog(Notepad.this,”查找下一个(N)F3 Clicked");}
else if (e。
getActionCommand()。
equals("替换")) {
JOptionPane.showConfirmDialog(Notepad。
this, "替换Clicked");
}
else if(e.getActionCommand()。
equals(”转到"))
{
JOptionPane。
showConfirmDialog(Notepad。
this, ”转到");
}
else if (e.getActionCommand().equals(”全选”)) {
jta.selectAll();
}
else if (e.getActionCommand()。
equals("日期”)) {
int pos=jta。
getCaretPosition();
java.util.GregorianCalendar calendar=new java.util.GregorianCalendar();
java。
util。
Date date=calendar。
getTime();
tempString=date。
toString();
jta.insert(tempString, pos);
}
}
}
}
副程序:
import java。
awt。
*;
import javax.swing。
*;
public class HelpDialog extends JDialog{
public HelpDialog(Notepad f)
{
super(f,”help",true);
Container content=getContentPane();
JLabel jl1=new JLabel("Notepad 1.0");
JLabel jl2=new JLabel(”作者: 李佳乐");
JLabel jl3=new JLabel(”Email:2606880162@");
content.setLayout(new GridLayout(3,1));
content.add(jl1);
content。
add(jl2);
content。
add(jl3);
setDefaultCloseOperation( JDialog。
DISPOSE_ON_CLOSE);
setLocationRelativeTo(f);
setSize(200,100);
setVisible(true);
}
}
运行结果:。