基于Swing的Mini记事本源程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

 
Mini 记事本源程序 
目录 
1.程序入口  Notepad.java ........................................................................................................  1  2.工具栏按钮类 ToolBarButton.java ........................................................................................  1  3.字体对话框类 JFontChooser.java .........................................................................................  2  4.记事本核心类 FormMain.java  ...............................................................................................  6  5.在项目中创建属性文件 notepad.properties ................................................................. 21 
 
 
说明:本程序是学习 Swing、文件流的练习程序,部分代码没有 没有实现,发现后自己补充;如果测试出 bug,自行改正。

   
1.程序入口  Notepad.java 
package notepad; public class NotePad { public static void main(String[] args) { FormMain win = new FormMain("Mini记事本"); win.setVisible(true); } }
 
2.工具栏按钮类 ToolBarButton.java 
package notepad;     


 
import javax.swing.Icon;  import javax.swing.ImageIcon;  import javax.swing.JButton;    /**      * @author  孙丰伟  E‐mail: sunfengweimail@    * @version  创建时间:May 3, 2008 12:49:50 PM      * @see      */  public class ToolBarButton extends JButton {      public ToolBarButton(Icon icon) {     super(icon);     setVerticalTextPosition(BOTTOM);     setHorizontalTextPosition(CENTER);    }      public ToolBarButton(String imageFile) {     this(new ImageIcon(imageFile)); // this 调用构造方法    }  } // end class ToolBarButton   
3.字体对话框类 JFontChooser.java 
package notepad;    import java.awt.BorderLayout;  import java.awt.Container;  import java.awt.FlowLayout;  import java.awt.Font;  import java.awt.GraphicsEnvironment;  import java.awt.event.ActionEvent;  import java.awt.event.ActionListener;  import java.awt.event.ItemEvent;  import java.awt.event.ItemListener;    import javax.swing.*;  /******************************************    *  类    名: JFontChooser    *  作    者:孙丰伟    E‐mail: sunfengweimail@    *  时    间:2008‐4‐24    *  描    述:实现简单的字体设置 


 
  ******************************************/    public class JFontChooser extends JDialog implements ActionListener {    private Font font;    private Container contentPane;    private JButton btnOK,btnCancel;    private JComboBox comboFont,comboSize,comboStyle;    private JTextField txtFontName,txtFontSize,txtFontStyle;    private Box baseBoxV,fontBox,boxV1,boxV2,boxV3;    private JPanel btnPanel,labPanel;    private JLabel labFont,labStyle,labSize,labDemo;    public JFontChooser(JFrame frame,String title,boolean flag,Font font) {     super(frame,title,flag);       this.font=font;     this.initForm();      }      private void initForm() {     this.contentPane = this.getContentPane();     //     //  取系统中支持字体     //     GraphicsEnvironment gl = GraphicsEnvironment.getLocalGraphicsEnvironment();     String[] fontName = gl.getAvailableFontFamilyNames();     comboFont=new JComboBox(fontName);       labFont=new JLabel("字体:");     labStyle=new JLabel("样式:");     labSize=new JLabel("大小:");     txtFontName=new JTextField(font.getFamily());     txtFontSize=new JTextField(String.valueOf(font.getSize()));     txtFontStyle=new JTextField(String.valueOf(font.getStyle()));     labDemo=new JLabel("Hello,这是字体样例!");     labDemo.setFont(font);     labDemo.setHorizontalAlignment(JLabel.LEFT);          String[] fontStyle = { "常规", "粗体", "斜体"};     comboStyle=new JComboBox(fontStyle);       //大小          comboSize=new JComboBox();          for(int size=8;size<=72;size++)     { 


 
                                                                                                                                   
comboSize.addItem(size);    }      //  //  为组合框设置事件  //  HandleItemListener itemListener=new HandleItemListener();  comboFont.addItemListener(itemListener);  comboStyle.addItemListener(itemListener);  comboSize.addItemListener(itemListener);    boxV1=Box.createVerticalBox();  boxV1.add(labFont);  boxV1.add(txtFontName);  boxV1.add(comboFont);    fontBox=Box.createHorizontalBox();  fontBox.add(boxV1);    boxV2=Box.createVerticalBox();  boxV2.add(labStyle);  boxV2.add(txtFontStyle);  boxV2.add(comboStyle);    boxV3=Box.createVerticalBox();  boxV3.add(labSize);  boxV3.add(txtFontSize);  boxV3.add(comboSize);      fontBox.add(boxV2);  fontBox.add(boxV3);    baseBoxV=Box.createVerticalBox();  baseBoxV.add(fontBox);  baseBoxV.add(Box.createVerticalStrut(20));  labPanel=new JPanel();  FlowLayout flow=new FlowLayout();  flow.setAlignment(FlowLayout.LEFT);  labPanel.setLayout(flow);  labPanel.add(labDemo);    baseBoxV.add(labPanel);   


 
        this.contentPane.add(baseBoxV);     btnPanel=new JPanel();     btnOK=new JButton("确定");     btnCancel=new JButton("取消");          btnOK.addActionListener(this);     btnCancel.addActionListener(this);          btnPanel.add(btnOK);     btnPanel.add(btnCancel);     this.contentPane.add(btnPanel, BorderLayout.SOUTH);     this.setLocationRelativeTo(null);     this.setResizable(false);     this.setSize(450, 200);     this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);     this.setVisible(true);    }    class HandleItemListener implements ItemListener    {       @Override     public void itemStateChanged(ItemEvent e) {       // TODO Auto‐generated method stub       if(e.getSource()==comboFont)       {         txtFontName.setText(comboFont.getSelectedItem().toString());       }       if(e.getSource()==comboStyle)       {         txtFontStyle.setText(comboStyle.getSelectedItem().toString());       }       if(e.getSource()==comboSize)       {         txtFontSize.setText(comboSize.getSelectedItem().toString());       }       //setTitle(String.valueOf(comboStyle.getSelectedIndex()));       font=font=new  Font(txtFontName.getText(),comboStyle.getSelectedIndex(),Integer.parseInt(txtFontSize.getT ext()));       labDemo.setFont(font);     }           


 
  }    @Override    public void actionPerformed(ActionEvent e) {     // TODO Auto‐generated method stub     System.out.println(comboFont.getSelectedItem().toString());     System.out.println(Integer.parseInt(comboSize.getSelectedItem().toString()));     if(e.getSource()==btnOK)     {       //font=new  Font(comboFont.getSelectedItem().toString(),comboSize.getSelectedIndex(),Integer.parseInt( comboSize.getSelectedItem().toString()));       this.dispose();     }     else     {       font=null;       this.dispose();      }           }       public static void main(String[] args)    {     Font font=new Font("新宋体",Font.ITALIC,20);     JFontChooser fontChooser=new JFontChooser(null,"设置字体",true,font);              }    public Font getNoteFont() {          return font;    }  } 
4.记事本核心类 FormMain.java 
/******************************************    *  文件名: FormMain.java    *  作    者:孙丰伟    *  时    间:2008‐4‐24    *  描    述:保存 FormMain 类,是记事本程序的核心类    *  测    试:本程序使用 Elipse 编写,JDK1.6 测试运行      ******************************************/ 


 
  package notepad;    import java.awt.*;  import javax.swing.*;  import javax.swing.border.Border;  import javax.swing.event.DocumentEvent;  import javax.swing.event.DocumentListener;  import javax.swing.event.UndoableEditEvent;  import javax.swing.event.UndoableEditListener;  import javax.swing.undo.CannotRedoException;  import javax.swing.undo.CannotUndoException;  import javax.swing.undo.UndoManager;  import javax.swing.filechooser.*;  import java.awt.event.*;  import java.io.*;  import java.util.Properties;  /**    *      *  枚举类型:  用于标识视图菜单    *    */  enum VIEW{                //视图菜单    STATUS,              //状态栏    FOREGROUND,      //前景颜色    BACKGROUND        //背景颜色  }  /**    *      *  枚举类型:  用于标识文件菜单    *    */  enum FILE{                //用于文件菜单    NEW,                    //新建文件    OPEN,                  //打开文件      SAVE,                  //保存文件    SAVEAS,              //另存为    EXIT                    //退出  }  /**    *      *  枚举类型:  用于标识编辑菜单    *    */ 


 
enum EDIT                  //用于编辑菜单    {    COPY,                  //复制    CUT,                    //剪切    PASTE,                //粘贴    DELETE,              //删除    UNDO,                  //撤销      REDO                    //恢复  }  /******************************************    *  类    名: FormMain    *  作    者:孙丰伟    *  时    间:2008‐4‐24    *  描    述:记事本程序    *  内部类:    *      1. TxtNoteActionListener:编辑菜单监听    *      2. FileActionListener:文件菜单监听    *      3. ViewActionListener:视图菜单监听    *  方    法:      *            1. initialize()    初始窗体    *            2. saveFile()        保存文件    *            3. openFile()        打开文件    ******************************************/  class FormMain extends JFrame {       private Container contentPane;              //  内容面板    private JMenuBar mnuBar;              //  菜单容器    private JMenu mnuFile, mnuEdit,mnuFormat, mnuView;    //  主菜单    private JMenuItem mnuFileOpen, mnuFileSaveAs, mnuFileSave, mnuFileNew,  mnuFileExit;          //文件菜单项    private JMenuItem mnuEditCut, mnuEditPaste, mnuEditCopy,  mnuEditDelete,mnuEditUndo, mnuEditRedo; //编辑菜单项     private JMenuItem mnuPCut, mnuPPaste, mnuPCopy, mnuPDelete; //编辑菜单项 ____右键弹出菜单    private JCheckBoxMenuItem mnuViewStatus;            //  带复选的菜单, 控制状态栏是否出现    private JMenuItem mnuViewForeColor, mnuViewBackColor;        //前景与背景颜 色项    private JMenuItem mnuFormatFont;    //  字体菜单项    private JPopupMenu popupMenu;         //  右键菜单    private JToolBar toolBar;                 //  工具栏        private ToolBarButton toolNew, toolOpen, toolSave, toolExit; //工具栏按钮    private JTextArea txtNote;        //  记事本文本域    private JLabel labStatus;          //  状态栏 


 
  private final UndoManager undo = new UndoManager(); //  用于撤销    private JFileChooser fileChooser;  //  文件对话框    private boolean isChange = false;   //  文件内容是否改变    private String fileName = null;    //  保存文件名    private Font font;          //  文本域字体    private FileNameExtensionFilter filter = new FileNameExtensionFilter("文本文件",  "txt");      //设置文件过滤器      private Properties properties;    FormMain(String title) {     super(title);     initialize();    }      private void initialize() {     /*  程序窗口居中  */     this.setLocationRelativeTo(this);     this.setSize(600, 500);     this.setExtendedState(JFrame.MAXIMIZED_BOTH);     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       // JTextArea  事件监听器       TxtNoteActionListener txtListener = new TxtNoteActionListener();       //  文件监听器       FileActionListener fileListener = new FileActionListener();     //       //  设置工具栏     //     toolBar = new JToolBar("记事本");       toolSave = new ToolBarButton(new ImageIcon("images\\saveHS.GIF"));     toolOpen = new ToolBarButton(new ImageIcon("images\\OPENFOLD.GIF"));       toolSave.setText("保存文件");     toolOpen.setText("打开文件");       toolSave.setActionCommand("保存");     toolOpen.setActionCommand("打开");       toolSave.addActionListener(fileListener);     toolOpen.addActionListener(fileListener); 


 
     toolBar.add(toolOpen);     toolBar.addSeparator();     toolBar.add(toolSave);     toolBar.addSeparator();       Border toolBorder = BorderFactory.createBevelBorder(1);     toolBar.setBorder(toolBorder);     // ‐‐‐‐‐设置工具栏结束‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐          //     //  设置状态栏     //     labStatus = new JLabel("作者:孙丰伟");     labStatus.setBorder(BorderFactory.createBevelBorder(1));     this.add(bStatus, BorderLayout.SOUTH);     //     //  设置菜单     //     JMenuBar mnuBar = new JMenuBar();       this.setJMenuBar(mnuBar);     //     //  文件菜单     //     mnuFile = new JMenu("文件(F)");     Font mnuFont = new Font("新宋体", 0, 12);     mnuFile.setFont(mnuFont);     mnuFile.setMnemonic('F');       mnuFileNew = new JMenuItem("新建(N)");     mnuFileOpen = new JMenuItem("打开(O)");     mnuFileSave = new JMenuItem("保存(S)");     mnuFileSaveAs = new JMenuItem("另存为(A)");     mnuFileExit = new JMenuItem("退出(E)");       mnuFileNew.setMnemonic('N');     mnuFileOpen.setMnemonic('O');     mnuFileSave.setMnemonic('S');     mnuFileExit.setMnemonic('E');     mnuFileSaveAs.setMnemonic('A');       this.mnuFileNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,  InputEvent.CTRL_MASK)); 


 
   this.mnuFileOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,  InputEvent.CTRL_MASK));     this.mnuFileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,  InputEvent.CTRL_MASK));       mnuFileNew.setActionCommand(FILE.NEW.toString());     mnuFileOpen.setActionCommand(FILE.OPEN.toString());     mnuFileSave.setActionCommand(FILE.SAVE.toString());     mnuFileSaveAs.setActionCommand(FILE.SAVEAS.toString());     mnuFileExit.setActionCommand(FILE.EXIT.toString());       mnuFileNew.addActionListener(fileListener);     mnuFileOpen.addActionListener(fileListener);     mnuFileSave.addActionListener(fileListener);     mnuFileSaveAs.addActionListener(fileListener);     mnuFileExit.addActionListener(fileListener);       mnuFile.add(mnuFileNew);     mnuFile.add(mnuFileOpen);     mnuFile.add(mnuFileSave);     mnuFile.addSeparator();     mnuFile.add(mnuFileExit);     mnuBar.add(mnuFile);       //  文件菜单设置结束‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐          //     //  编辑菜单     //     mnuEdit = new JMenu("编辑(E)");     mnuEdit.setFont(mnuFont);     mnuEdit.setMnemonic('E');       mnuEditCopy = new JMenuItem("复制(C)");     mnuEditCut = new JMenuItem("剪切(X)");     mnuEditPaste = new JMenuItem("粘贴(V)");     mnuEditDelete = new JMenuItem("删除(L)");     mnuEditUndo = new JMenuItem("撤销(U)");     mnuEditRedo = new JMenuItem("恢复(R)");       mnuEditCopy.setMnemonic('C');     mnuEditCut.setMnemonic('X');     mnuEditPaste.setMnemonic('V');     mnuEditDelete.setMnemonic('L'); 


 
   mnuEditUndo.setMnemonic('U');     mnuEditRedo.setMnemonic('R');       mnuEditCopy.setActionCommand(EDIT.COPY.toString());     mnuEditCut.setActionCommand(EDIT.CUT.toString());     mnuEditPaste.setActionCommand(EDIT.PASTE.toString());     mnuEditDelete.setActionCommand(EDIT.DELETE.toString());     mnuEditUndo.setActionCommand(EDIT.UNDO.toString());     mnuEditRedo.setActionCommand(EDIT.REDO.toString());       mnuEditCopy.addActionListener(txtListener);     mnuEditCut.addActionListener(txtListener);     mnuEditPaste.addActionListener(txtListener);     mnuEditDelete.addActionListener(txtListener);     mnuEditUndo.addActionListener(txtListener);     mnuEditRedo.addActionListener(txtListener);       this.mnuEditCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,  InputEvent.CTRL_MASK));     this.mnuEditCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,  InputEvent.CTRL_MASK));     this.mnuEditPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,  InputEvent.CTRL_MASK));     this.mnuEditDelete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,  InputEvent.CTRL_MASK));     this.mnuEditUndo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,  InputEvent.CTRL_MASK));     this.mnuEditRedo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y,  InputEvent.CTRL_MASK));       mnuEdit.add(mnuEditUndo);     mnuEdit.add(mnuEditRedo);     mnuEdit.addSeparator();     mnuEdit.add(mnuEditCopy);     mnuEdit.add(mnuEditCut);     mnuEdit.add(mnuEditPaste);     mnuEdit.addSeparator();     mnuEdit.add(mnuEditDelete);     mnuBar.add(mnuEdit);          //  编辑菜单设置结束‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐          //     //  弹出式菜单 


 
   //     popupMenu = new JPopupMenu("我的记事本");       mnuPCopy = new JMenuItem("复制(C)");     mnuPCut = new JMenuItem("剪切(X)");     mnuPPaste = new JMenuItem("粘贴(V)");     mnuPDelete = new JMenuItem("删除(L)");       mnuPCopy.setActionCommand(EDIT.COPY.toString());     mnuPCut.setActionCommand(EDIT.CUT.toString());     mnuPPaste.setActionCommand(EDIT.PASTE.toString());     mnuPDelete.setActionCommand(EDIT.DELETE.toString());          mnuPCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,  InputEvent.CTRL_MASK));     mnuPCopy.addActionListener(txtListener);     mnuPCut.addActionListener(txtListener);     mnuPPaste.addActionListener(txtListener);     mnuPDelete.addActionListener(txtListener);       mnuPCopy.setMnemonic('C');     mnuPCut.setMnemonic('X');     mnuPPaste.setMnemonic('V');     mnuPDelete.setMnemonic('L');     popupMenu.add(mnuPCopy);     popupMenu.add(mnuPCut);     popupMenu.add(mnuPPaste);     popupMenu.addSeparator();     popupMenu.add(mnuPDelete);       //  弹出式菜单设置结束‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐       //     //  格式菜单     //       mnuFormat=new JMenu("格式(O)");     mnuFormat.setMnemonic('O');          mnuFormatFont=new JMenuItem("字体(F)");     mnuFormatFont.setMnemonic('F');     //     //  字体菜单事件,调用字体窗口 JFontChooser     //     mnuFormatFont.addActionListener(new ActionListener(){ 


 
     public void actionPerformed(ActionEvent e)       {         Font tempFont=new Font(font.getFamily(),font.getStyle(),font.getSize());         JFontChooser fontChooser=new JFontChooser(FormMain.this,"设置字 体",true,tempFont);               if(fontChooser.getNoteFont()!=null)               {             font=fontChooser.getNoteFont();             txtNote.setFont(font);             //             //  将字体写回属性文件             //               properties=new Properties();               properties.setProperty("fontName", font.getFamily());               properties.setProperty("fontStyle",  String.valueOf(font.getStyle()));               properties.setProperty("fontSize", String.valueOf(font.getSize()));               try {             properties.store(new FileWriter("notepad.properties"), null);           } catch (IOException e1) {             // TODO Auto‐generated catch block             e1.printStackTrace();           }               }       }       });          mnuFormat.add(mnuFormatFont);     mnuBar.add(mnuFormat);     //     //  视图菜单     //     ViewActionListener viewAction = new ViewActionListener();     mnuView = new JMenu("视图(V)");     mnuView.setMnemonic('V');     mnuBar.add(mnuView);     mnuViewStatus = new JCheckBoxMenuItem("状态栏", true);     mnuViewForeColor = new JMenuItem("前景颜色"); //  设置文本颜色     mnuViewBackColor = new JMenuItem("背景颜色"); //  设置背景颜色          mnuViewStatus.setActionCommand(VIEW.STATUS.toString());     mnuViewForeColor.setActionCommand(VIEW.FOREGROUND.toString());     mnuViewBackColor.setActionCommand(VIEW.BACKGROUND.toString());      

相关文档
最新文档