实现一个基本的Windows下记事本的功能 PS最后附上GitHub源代码下载地址
首先要编写记事本,需要知道记事本的功能有哪些,然后把框架搭建起来
模块框架划分
主要分为四个部分:
(1)图形框架的初始化
(2)记事本菜单栏及菜单栏中菜单选项的初始化
(3)文本编辑区功能的实现
(4)文件的处理
1。。。首先介绍图形框架的搭建:
首先新建类MyFrame继承自JFrame,这个类主要是用来初始化GUI界面
public class MyFrame extends JFrame然后为了接下来整个代码的编写的易读性,将框架初始化写成函数,
这个函数时框架的初始化:主要设置框架的大小和图标
public void initFrame(){ //Properties p = new Properties(); //通过获取系统屏幕的分辨率设置窗体大小位置 Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); int screenWidth = screenSize.width; int screenHeight = screenSize.height; this.setSize(screenWidth/2, screenHeight/2); //this.setSize(640,480); this.setLocationRelativeTo(null); //设置主对话框可以被关闭 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置图标 Image img = new ImageIcon("image/logo.jpg").getImage(); this.setIconImage(img); //设置标题名称 this.setTitle("记事本 by Wilson"); }//初始化窗体结束
2。。。设置菜单栏及其菜单选项
从windows中的记事本可以看到菜单栏中有“文件”“编辑”“格式”“查看”“帮助”五个菜单,每个下面有许多个菜单选项,
(1)首先就是先把这些菜单的内容先简单的添加进去,
public void initMenu() { JMenuBar menuBar = new JMenuBar(); //创建一个菜单栏 setJMenuBar(menuBar); //将菜单栏添加到框架上 //创建文件菜单 fileMenu = new JMenu("文件(F)"); fileMenu.setMnemonic('F'); //设置快捷键Alt+F menuBar.add(fileMenu); fileNew = new JMenuItem("新建(N)"); //新建菜单项 //设置快捷键 fileNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK)); fileNew.addActionListener(this); //添加事件监听 fileMenu.add(fileNew); //添加菜单项 fileOpen = new JMenuItem("打开(O)"); fileOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)); fileOpen.addActionListener(this); fileMenu.add(fileOpen); fileSave = new JMenuItem("保存(S)"); fileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)); fileSave.addActionListener(this); fileMenu.add(fileSave); fileSaveAs = new JMenuItem("另存为(A)..."); fileSaveAs.addActionListener(this); fileMenu.add(fileSaveAs); fileMenu.addSeparator(); filePageSet = new JMenuItem("页面设置(U)..."); filePageSet.addActionListener(this); fileMenu.add(filePageSet); filePrint = new JMenuItem("打印(P)"); filePrint.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK)); filePrint.addActionListener(this); fileMenu.add(filePrint); fileMenu.addSeparator(); fileExit = new JMenuItem("退出“X"); fileExit.addActionListener(this); fileMenu.add(fileExit); //创建编辑菜单 editMenu = new JMenu("编辑(E)"); editMenu.setMnemonic('E'); menuBar.add(editMenu); //当选择编辑菜单时,设置剪切、复制、粘贴、删除等功能的可用性 editMenu.addMenuListener(new MenuListener(){ public void menuCanceled(MenuEvent e) { //当取消菜单的时候调用 checkMenuItemEnabled(); //设置功能的可用性 } public void menuDeselected(MenuEvent e) { //当取消选择某个菜单时选择使用 checkMenuItemEnabled(); } public void menuSelected(MenuEvent e) { //当选择某个菜单时调用 checkMenuItemEnabled(); } }); editUndo = new JMenuItem("撤销(U)"); editUndo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, ActionEvent.CTRL_MASK)); editUndo.addActionListener(this); editUndo.setEnabled(false); //设置没有写入文字之前不可用 editMenu.add(editUndo); editCut = new JMenuItem("剪切(T)"); editCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK)); editCut.addActionListener(this); editCut.setEnabled(false); editMenu.add(editCut); editCopy = new JMenuItem("复制(C)"); editCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); editCopy.addActionListener(this); editCopy.setEnabled(false); editMenu.add(editCopy); editPaste = new JMenuItem("粘贴(P)"); editPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK)); editPaste.addActionListener(this); editPaste.setEnabled(false); editMenu.add(editPaste); editDelete = new JMenuItem("删除(L)"); editDelete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); editDelete.addActionListener(this); editMenu.add(editDelete); editMenu.addSeparator(); editFind = new JMenuItem("查找(F)"); editFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK)); editFind.addActionListener(this); editMenu.add(editFind); editFindNext = new JMenuItem("查找下一个(N)"); editFindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0)); editFindNext.addActionListener(this); editMenu.add(editFindNext); editReplace = new JMenuItem("替换(R)..."); editReplace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, ActionEvent.CTRL_MASK)); editReplace.addActionListener(this); editMenu.add(editReplace); editGoTo = new JMenuItem("转到(G)..."); editGoTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, ActionEvent.CTRL_MASK)); editGoTo.addActionListener(this); editMenu.add(editGoTo); editMenu.addSeparator(); editSelectAll = new JMenuItem("全选(A)"); editSelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK)); editSelectAll.addActionListener(this); editMenu.add(editSelectAll); editDate = new JMenuItem("时间/日期(D)"); editDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0)); editDate.addActionListener(this); editMenu.add(editDate); //创建格式菜单 formatMenu = new JMenu("格式(O)"); formatMenu.setMnemonic('O'); menuBar.add(formatMenu); formatLineWrap = new JMenuItem("自动换行(W)"); formatLineWrap.setMnemonic('W'); //formatLineWrap.setState(true); formatLineWrap.addActionListener(this); formatMenu.add(formatLineWrap); formatFont = formatMenu.add(new JMenuItem("字体(F)")); formatFont.addActionListener(this); //创建查看菜单 viewMenu = menuBar.add(new JMenu("查看(V)")); viewMenu.setMnemonic('V'); stateItem = viewMenu.add(new JCheckBoxMenuItem("状态栏(S)", true)); //状态栏一开始就被选中 stateItem.addActionListener(this); //创建帮助菜单 helpMenu =menuBar.add( new JMenu("帮助(H)")); helpMenu.setMnemonic('H'); lookHelp = helpMenu.add(new JMenuItem("查看帮助(H)")); lookHelp.addActionListener(this); helpMenu.addSeparator(); aboutNote = helpMenu.add(new JMenuItem("关于笔记本(A)")); aboutNote.addActionListener(this); }
其实主要就是利用JMenu这个类来创建菜单,然后用JMenuItem这个类将菜单选项添加进去,至于快捷键和事件监听也是很简单的重复
到此为止,我们把能看到的界面整个搭建完成,至于菜单栏功能的实现
请参照JAVA——Swing应用编写简单的记事本——源代码分析实战(二)
https://blog.csdn.net/wilsonsong1024/article/details/79657956
JAVA——Swing应用编写简单的记事本——源代码分析实战(二)里有些偏僻功能如页面设置,打印,转到,替换这些功能的具体的介绍。