(完整word版)简单Java仿windows记事本

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);


运行结果:。

相关文档
最新文档