JAVA——Swing应用编写简单的记事本——源代码分析实战(一)

实现一个基本的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应用编写简单的记事本——源代码分析实战(二)里有些偏僻功能如页面设置,打印,转到,替换这些功能的具体的介绍。

源代码下载地址:

https://github.com/songwell1024/NotePad

猜你喜欢

转载自blog.csdn.net/wilsonsong1024/article/details/79631075