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