在网上查了一下,好多同学都在找用JAVA语言编写的简单文本编辑器的源代码。这可能是我们在学习JAVA中老师要求做的惯例吧。所以我在这发个我自己个人今天写出来的给大家参考参考。每个人都有自己的想法,当然我不敢说我的是最好的,但是参考价值还是有的:
- import java.awt.BorderLayout;
- import java.awt.Button;
- import java.awt.Dialog;
- import java.awt.FileDialog;
- import java.awt.FlowLayout;
- import java.awt.Font;
- import java.awt.Frame;
- import java.awt.GridLayout;
- import java.awt.Label;
- import java.awt.List;
- import java.awt.Menu;
- import java.awt.MenuBar;
- import java.awt.MenuItem;
- import java.awt.MenuShortcut;
- import java.awt.Panel;
- import java.awt.TextArea;
- 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.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.KeyEvent;
- import java.awt.event.TextEvent;
- import java.awt.event.TextListener;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.FileReader;
- import java.io.FileWriter;
- import javax.swing.undo.UndoManager;
- public class Txt extends Frame implements ActionListener,TextListener
- {
- private static final long serialVersionUID = 1L;
- //*****************初始化工作**************
- MenuBar menuBar;
- Menu menuFile,menuEdi,menuFormat,menuHelp;
- MenuItem menuItemNew,menuItemOpen,menuItemSave,menuItemOsave,menuItemExit,
- menuItemCut,menuItemCopy,menuItemPase,menuItemDel,menuItemSelectAll,
- menuItemFont,menuItemAbout;
- TextArea textArea;
- FileDialog fileOpen,fileSave;
- String temp,fileName;
- MyDialog myDialog;
- boolean change=false;
- TextClipboard cb;
- UndoManager undoManager=new UndoManager();
- public Txt()
- {
- super("文本编辑器");
- this.setBounds(200, 200, 400, 300);
- menuBar=new MenuBar();
- textArea=new TextArea();
- textArea.addTextListener(this);
- menuFile=new Menu("文件(F)");
- menuItemNew=new MenuItem("新建(N)");
- menuItemNew.setShortcut(new MenuShortcut(KeyEvent.VK_N));
- menuItemNew.addActionListener(this);
- menuItemOpen=new MenuItem("打开(O)...");
- menuItemOpen.setShortcut(new MenuShortcut(KeyEvent.VK_O));
- menuItemOpen.addActionListener(this);
- menuItemSave=new MenuItem("保存(S)");
- menuItemSave.setShortcut(new MenuShortcut(KeyEvent.VK_S));
- menuItemSave.addActionListener(this);
- menuItemOsave=new MenuItem("另存为(A)...");
- menuItemOsave.addActionListener(this);
- menuItemExit=new MenuItem("退出(X)");
- menuItemExit.addActionListener(this);
- menuItemExit.setShortcut(new MenuShortcut(KeyEvent.VK_E));
- menuFile.add(menuItemNew);
- menuFile.add(menuItemOpen);
- menuFile.add(menuItemSave);
- menuFile.add(menuItemOsave);
- menuFile.addSeparator();
- menuFile.add(menuItemExit);
- menuEdi=new Menu("编辑(E)");
- menuItemCut=new MenuItem("剪切(T)");
- menuItemCut.setShortcut(new MenuShortcut(KeyEvent.VK_X));
- menuItemCut.addActionListener(this);
- menuItemCopy=new MenuItem("复制(C)");
- menuItemCopy.setShortcut(new MenuShortcut(KeyEvent.VK_C));
- menuItemCopy.addActionListener(this);
- menuItemPase=new MenuItem("粘帖(P)");
- menuItemPase.setShortcut(new MenuShortcut(KeyEvent.VK_V));
- menuItemPase.addActionListener(this);
- menuItemDel=new MenuItem("删除(L)");
- menuItemDel.addActionListener(this);
- menuItemSelectAll=new MenuItem("全选(A)");
- menuItemSelectAll.setShortcut(new MenuShortcut(KeyEvent.VK_A));
- menuItemSelectAll.addActionListener(this);
- menuEdi.add(menuItemCut);
- menuEdi.add(menuItemCopy);
- menuEdi.add(menuItemPase);
- menuEdi.add(menuItemDel);
- menuEdi.addSeparator();
- menuEdi.add(menuItemSelectAll);
- menuFormat=new Menu("格式(O)");
- menuItemFont=new MenuItem("字体...");
- menuItemFont.addActionListener(this);
- menuFormat.add(menuItemFont);
- menuHelp=new Menu("帮助(H)");
- menuItemAbout=new MenuItem("关于记事本");
- menuItemAbout.addActionListener(this);
- menuHelp.add(menuItemAbout);
- menuBar.add(menuFile);
- menuBar.add(menuEdi);
- menuBar.add(menuFormat);
- menuBar.add(menuHelp);
- fileName="";
- myDialog=new MyDialog(this, "保存文件?", true);
- fileSave=new FileDialog(this,"保存文件",FileDialog.SAVE);
- fileSave.setBounds(200, 200, 400, 300);
- fileOpen=new FileDialog(this,"打开文件",FileDialog.LOAD);
- fileOpen.setBounds(200, 200, 400, 300);
- cb=new TextClipboard();
- this.addWindowListener(new WindowAdapter()
- {
- public void windowClosing(WindowEvent arg0)
- {
- if(fileName!="")
- {
- if(change==false)
- System.exit(0);
- if(change==true)
- {
- save(fileName);
- System.exit(0);
- }
- }
- if(fileName=="")
- {
- if(change==false)
- System.exit(0);
- if(change==true)
- {
- myDialog.setVisible(true);
- if(myDialog.getMessage()==MyDialog.YES)
- {
- fileSave.setVisible(true);
- fileName=fileSave.getDirectory()+"//"+fileSave.getFile();
- save(fileName);
- System.exit(0);
- }
- if(myDialog.getMessage()==MyDialog.NO)
- System.exit(0);
- }
- }
- }
- });
- this.setMenuBar(menuBar);
- this.add(textArea);
- this.setVisible(true);
- }
- //*****************办法**************
- public void open(String path)
- {
- try {
- FileReader file=new FileReader(path);
- BufferedReader read=new BufferedReader(file);
- StringBuffer sb=new StringBuffer();
- while((temp=read.readLine())!=null)
- sb.append(temp+'/n');
- textArea.setText(sb.toString());
- file.close();
- read.close();
- } catch (Exception e) {
- }
- }
- public void save(String path)
- {
- try{
- FileWriter file=new FileWriter(path);
- BufferedWriter bw=new BufferedWriter(file);
- bw.write(textArea.getText());
- bw.close();
- }
- catch(Exception e)
- {
- }
- }
- //*****************事件监听器**************
- public void textValueChanged(TextEvent arg0) {
- change=true;
- }
- public void actionPerformed(ActionEvent e)
- {
- if(e.getSource()==menuItemNew)
- {
- if(fileName!="")
- {
- save(fileName);
- textArea.setText("");
- }
- if(fileName==""&&change==true)
- {
- fileSave.setVisible(true);
- fileName=fileSave.getDirectory()+"//"+fileSave.getFile();
- save(fileName);
- textArea.setText("");
- }
- else {
- textArea.setText("");
- fileName="";
- }
- }
- if(e.getSource()==menuItemOpen)
- {
- fileOpen.setVisible(true);
- fileName=fileOpen.getDirectory()+"//"+fileOpen.getFile();
- open(fileName);
- }
- if(e.getSource()==menuItemSave)
- {
- if(fileName!="")
- save(fileName);
- else
- {
- fileSave.setVisible(true);
- fileName=fileSave.getDirectory()+"//"+fileSave.getFile();
- save(fileName);
- }
- }
- if(e.getSource()==menuItemOsave)
- {
- fileSave.setVisible(true);
- fileName=fileSave.getDirectory()+"//"+fileSave.getFile();
- save(fileName);
- }
- if(e.getSource()==menuItemExit)
- {
- if(fileName!="")
- {
- if(change==false)
- System.exit(0);
- if(change==true)
- {
- save(fileName);
- System.exit(0);
- }
- }
- if(fileName=="")
- {
- if(change==false)
- System.exit(0);
- if(change==true)
- {
- myDialog.setVisible(true);
- if(myDialog.getMessage()==MyDialog.YES)
- {
- fileSave.setVisible(true);
- fileName=fileSave.getDirectory()+"//"+fileSave.getFile();
- save(fileName);
- System.exit(0);
- }
- if(myDialog.getMessage()==MyDialog.NO)
- System.exit(0);
- }
- }
- }
- if(e.getSource()==menuItemCut)
- {
- cb.setData(textArea.getSelectedText());
- textArea.replaceRange("", textArea.getSelectionStart(), textArea.getSelectionEnd());
- }
- if(e.getSource()==menuItemCopy)
- {
- cb.setData(textArea.getSelectedText());
- }
- if(e.getSource()==menuItemPase)
- {
- textArea.replaceRange(cb.getData(), textArea.getSelectionStart(), textArea.getSelectionEnd());
- }
- if(e.getSource()==menuItemDel)
- {
- textArea.replaceRange("", textArea.getSelectionStart(), textArea.getSelectionEnd());
- }
- if(e.getSource()==menuItemSelectAll)
- {
- textArea.selectAll();
- }
- if(e.getSource()==menuItemFont)
- {
- SetFont setfont=new SetFont(this,"字体设置",true);
- setfont.setVisible(true);
- textArea.setFont(setfont.myFont);
- }
- if(e.getSource()==menuItemAbout)
- {
- DialogAbout diaAbout=new DialogAbout(this,"关于文本编辑器",true);
- diaAbout.setVisible(true);
- }
- }
- public static void main(String[] args)
- {
- new Txt();
- }
- }
- //*****************保存提示框类**************
- class MyDialog extends Dialog implements ActionListener
- {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- static final int YES = 1, NO = 0;
- int message = -1;
- Button yes, no;
- MyDialog(Frame f, String s, boolean b)
- {
- super(f, s, b);
- yes = new Button("保存文件");
- yes.addActionListener(this);
- no = new Button("不保存并退出");
- no.addActionListener(this);
- setLayout(new FlowLayout());
- add(yes);
- add(no);
- setBounds(300, 300, 200, 80);
- addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- message = -1;
- setVisible(false);
- }
- });
- }
- public void actionPerformed(ActionEvent e) {
- if (e.getSource() == yes) {
- message = YES;
- setVisible(false);
- } else if (e.getSource() == no) {
- message = NO;
- setVisible(false);
- }
- }
- public int getMessage() {
- return message;
- }
- }
- //*****************关于对话框类**************
- class DialogAbout extends Dialog implements ActionListener
- {
- private static final long serialVersionUID = 1L;
- Button button;
- Label l;
- DialogAbout(Frame f, String s, boolean b)
- {
- super(f,s,b);
- setLayout(new FlowLayout());
- button=new Button("了解");
- l=new Label("菜鸟级人物编写--LECYKX");
- button.addActionListener(this);
- add(l);
- add(button);
- setBounds(300, 300, 200, 100);
- addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- setVisible(false);
- }
- });
- }
- public void actionPerformed(ActionEvent e) {
- if(e.getSource()==button)
- {
- setVisible(false);
- }
- }
- }
- //*****************剪切板类**************
- class TextClipboard
- {
- private Clipboard cb;
- public TextClipboard(){
- cb=Toolkit.getDefaultToolkit().getSystemClipboard();
- }
- public void setData(String data){
- cb.setContents(new StringSelection(data),null);
- }
- public String getData(){
- Transferable content=cb.getContents(null);
- try{
- return (String) content.getTransferData(DataFlavor.stringFlavor);
- }catch(Exception e){}
- return null;
- }
- }
- //*****************字体设置类**************
- class SetFont extends Dialog implements ActionListener
- {
- private static final long serialVersionUID = 1L;
- Panel p1,p2,p3;
- Label labelName,labelStyle,labelSize;
- List listName,listStyle,listSize;
- Button yes;
- Font myFont;
- SetFont(Frame f, String s, boolean b)
- {
- super(f,s,b);
- this.setBounds(250, 250, 420, 180);
- this.setLayout(new BorderLayout());
- p1=new Panel();
- p1.setLayout(new GridLayout(1,3));
- labelName=new Label("字体(F):",Label.LEFT);
- labelStyle=new Label("字形(Y):",Label.LEFT);
- labelSize=new Label("大小(S):",Label.LEFT);
- p1.add(labelName);
- p1.add(labelStyle);
- p1.add(labelSize);
- listName=new List(4);
- listName.add("宋体");
- listName.add("黑体");
- listName.add("华文行楷");
- listName.add("华文新魏");
- listName.add("楷体");
- listName.add("隶书");
- listName.select(0);
- listStyle=new List(4);
- listStyle.add("常规");
- listStyle.add("粗体");
- listStyle.add("斜体");
- listStyle.add("粗体斜体");
- listName.select(0);
- listSize=new List(4);
- listSize.add("8");
- listSize.add("9");
- listSize.add("10");
- listSize.add("11");
- listSize.add("12");
- listSize.add("14");
- listSize.add("16");
- listSize.add("18");
- listSize.add("20");
- listSize.select(4);
- p2=new Panel();
- p2.add(listName);
- p2.add(listStyle);
- p2.add(listSize);
- p3=new Panel();
- yes=new Button("确定");
- yes.addActionListener(this);
- p3.add(yes);
- this.add(p1,BorderLayout.NORTH);
- this.add(p2,BorderLayout.CENTER);
- this.add(p3,BorderLayout.SOUTH);
- this.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- setVisible(false);
- }
- });
- }
- public Font getFont()
- {
- int style=Font.PLAIN;;
- int size=Integer.parseInt(listSize.getSelectedItem());
- if(listStyle.getSelectedIndex()==0)
- style=Font.PLAIN;
- if(listStyle.getSelectedIndex()==1)
- style=Font.BOLD;
- if(listStyle.getSelectedIndex()==2)
- style=Font.ITALIC;
- if(listStyle.getSelectedIndex()==3)
- style=(Font.BOLD|Font.ITALIC);
- return myFont=new Font(listName.getSelectedItem(),style,size);
- }
- public void actionPerformed(ActionEvent e)
- {
- if(e.getSource()==yes)
- {
- this.getFont();
- this.setVisible(false);
- }
- }
- }