java课程设计源程序_java程序设计源程序 - CSDN
  • Java课程设计第三版代码(耿祥义),可以参考一下,用来学习
  • Java课程设计——Java记事本 借鉴了网上的一些代码,这是源码,可直接拿去运行。 package notepad; import java.awt.*; import java.awt.event.*; import java.util.*; import java.io.*; import javax....

    Java课程设计——Java记事本


    借鉴了网上的一些代码,这是源码,可直接拿去运行。

    package notepad;
    
    import java.awt.*;
    import java.awt.event.*; 
    import java.util.*;
    import java.io.*;
    import javax.swing.undo.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.datatransfer.*; 
    
    public class Notepad extends JFrame implements ActionListener, DocumentListener{
    	// 菜单
    	JMenu fileMenu, editMenu, formatMenu, viewMenu, helpMenu;
    	// 右键弹出菜单项
    	JPopupMenu popupMenu;
    	JMenuItem popupMenu_Undo, popupMenu_Cut, popupMenu_Copy, popupMenu_Paste, popupMenu_Delete, popupMenu_SelectAll;
    	// “文件”的菜单项
    	JMenuItem fileMenu_New, fileMenu_Open, fileMenu_Save, fileMenu_SaveAs, fileMenu_PageSetUp, fileMenu_Print,
    			fileMenu_Exit;
    	// “编辑”的菜单项
    	JMenuItem editMenu_Undo, editMenu_Cut, editMenu_Copy, editMenu_Paste, editMenu_Delete, editMenu_Find,
    			editMenu_FindNext, editMenu_Replace, editMenu_GoTo, editMenu_SelectAll, editMenu_TimeDate;
    	// “格式”的菜单项
    	JCheckBoxMenuItem formatMenu_LineWrap;
    	JMenuItem formatMenu_Font;
    	// “查看”的菜单项
    	JCheckBoxMenuItem viewMenu_Status;
    	// “帮助”的菜单项
    	JMenuItem helpMenu_HelpTopics, helpMenu_AboutNotepad;
    	// “文本”编辑区域
    	JTextArea editArea;
    	// 状态栏标签
    	JLabel statusLabel;
    	// 获取系统剪贴板
    	Toolkit toolkit = Toolkit.getDefaultToolkit();
    	Clipboard clipBoard = toolkit.getSystemClipboard();
    	// 创建撤销操作管理器(与撤销操作有关)
    	protected UndoManager undo = new UndoManager();
    	
    	// 其他变量
    	String oldValue;// 存放编辑区原来的内容,用于比较文本是否有改动
    	boolean isNewFile = true;// 是否新文件(未保存过的)
    	File currentFile;// 当前文件名
    
    	// 构造函数开始
    	public Notepad() {
    		super("Java记事本");
    		// 设置菜单系统内组件的字体
    		Font font = new Font("Dialog", Font.PLAIN, 12);
    		Enumeration keys = UIManager.getDefaults().keys();
    		while (keys.hasMoreElements()) {
    			Object key = keys.nextElement();
    			Object value = UIManager.get(key);
    			if (value instanceof javax.swing.plaf.FontUIResource) {
    				UIManager.put(key, font);
    			}
    		}
    
    		// 创建菜单条
    		JMenuBar menuBar = new JMenuBar();
    		// 创建文件菜单及菜单项并注册事件监听
    		fileMenu = new JMenu("文件(F)");
    		fileMenu.setMnemonic('F');// 设置快捷键ALT+F
    
    		fileMenu_New = new JMenuItem("新建(N)");
    		fileMenu_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
    		fileMenu_New.addActionListener(this);
    
    		fileMenu_Open = new JMenuItem("打开(O)...");
    		fileMenu_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
    		fileMenu_Open.addActionListener(this);
    
    		fileMenu_Save = new JMenuItem("保存(S)");
    		fileMenu_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
    		fileMenu_Save.addActionListener(this);
    
    		fileMenu_SaveAs = new JMenuItem("另存为(A)...");
    		fileMenu_SaveAs.addActionListener(this);
    
    		fileMenu_Exit = new JMenuItem("退出(X)");
    		fileMenu_Exit.addActionListener(this);
    
    		// 向菜单条添加"文件"菜单及菜单项
    		menuBar.add(fileMenu);
    		fileMenu.add(fileMenu_New);
    		fileMenu.add(fileMenu_Open);
    		fileMenu.add(fileMenu_Save);
    		fileMenu.add(fileMenu_SaveAs);
    		fileMenu.addSeparator(); // 分隔线
    		fileMenu.add(fileMenu_Exit);
    
    		// 创建编辑菜单及菜单项并注册事件监听
    		editMenu = new JMenu("编辑(E)");
    		editMenu.setMnemonic('E');// 设置快捷键ALT+E
    		// 当选择编辑菜单时,设置剪切、复制、粘贴、删除等功能的可用性
    		editMenu.addMenuListener(new MenuListener() {
    			public void menuCanceled(MenuEvent e){   // 取消菜单时调用
    				checkMenuItemEnabled();// 设置剪切、复制、粘贴、删除等功能的可用性
    			}
    
    			public void menuDeselected(MenuEvent e){  // 取消选择某个菜单时调用
    				checkMenuItemEnabled();// 设置剪切、复制、粘贴、删除等功能的可用性
    			}
    
    			public void menuSelected(MenuEvent e){  // 选择某个菜单时调用
    				checkMenuItemEnabled();// 设置剪切、复制、粘贴、删除等功能的可用性
    			}
    		});
    
    		editMenu_Undo = new JMenuItem("撤销(U)");
    		editMenu_Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
    		editMenu_Undo.addActionListener(this);
    		editMenu_Undo.setEnabled(false);// 默认禁止这一项
    
    		editMenu_Cut = new JMenuItem("剪切(T)");
    		editMenu_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
    		editMenu_Cut.addActionListener(this);
    
    		editMenu_Copy = new JMenuItem("复制(C)");
    		editMenu_Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
    		editMenu_Copy.addActionListener(this);
    
    		editMenu_Paste = new JMenuItem("粘贴(P)");
    		editMenu_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
    		editMenu_Paste.addActionListener(this);
    
    		editMenu_Delete = new JMenuItem("删除(D)");
    		editMenu_Delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
    		editMenu_Delete.addActionListener(this);
    
    		editMenu_Find = new JMenuItem("查找(F)...");
    		editMenu_Find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));
    		editMenu_Find.addActionListener(this);
    
    		editMenu_FindNext = new JMenuItem("查找下一个(N)");
    		editMenu_FindNext.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0));
    		editMenu_FindNext.addActionListener(this);
    
    		editMenu_Replace = new JMenuItem("替换(R)...", 'R');
    		editMenu_Replace.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK));
    		editMenu_Replace.addActionListener(this);
    
    		editMenu_SelectAll = new JMenuItem("全选", 'A');
    		editMenu_SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
    		editMenu_SelectAll.addActionListener(this);
    
    		// 向菜单条添加"编辑"菜单及菜单项
    		menuBar.add(editMenu);
    		editMenu.add(editMenu_Undo);
    		editMenu.addSeparator(); // 分隔线
    		editMenu.add(editMenu_Cut);
    		editMenu.add(editMenu_Copy);
    		editMenu.add(editMenu_Paste);
    		editMenu.add(editMenu_Delete);
    		editMenu.addSeparator(); // 分隔线
    		editMenu.add(editMenu_Find);
    		editMenu.add(editMenu_FindNext);
    		editMenu.add(editMenu_Replace);
    		editMenu.addSeparator(); // 分隔线
    		editMenu.add(editMenu_SelectAll);
    
    		// 创建格式菜单及菜单项并注册事件监听
    		formatMenu = new JMenu("格式(O)");
    		formatMenu.setMnemonic('O');// 设置快捷键ALT+O
    
    		formatMenu_LineWrap = new JCheckBoxMenuItem("自动换行(W)");//复选框菜单项
    		formatMenu_LineWrap.setMnemonic('W');// 设置快捷键ALT+W
    		formatMenu_LineWrap.setState(true);//默认选中
    		formatMenu_LineWrap.addActionListener(this);
    
    		formatMenu_Font = new JMenuItem("字体(F)...");
    		formatMenu_Font.addActionListener(this);
    
    		// 向菜单条添加"格式"菜单及菜单项
    		menuBar.add(formatMenu);
    		formatMenu.add(formatMenu_LineWrap);
    		formatMenu.add(formatMenu_Font);
    
    		// 创建查看菜单及菜单项并注册事件监听
    		viewMenu = new JMenu("查看(V)");
    		viewMenu.setMnemonic('V');// 设置快捷键ALT+V
    
    		viewMenu_Status = new JCheckBoxMenuItem("状态栏(S)");
    		viewMenu_Status.setMnemonic('S');// 设置快捷键ALT+S
    		viewMenu_Status.setState(true);
    		viewMenu_Status.addActionListener(this);
    
    		// 向菜单条添加"查看"菜单及菜单项
    		menuBar.add(viewMenu);
    		viewMenu.add(viewMenu_Status);
    
    		// 创建帮助菜单及菜单项并注册事件监听
    		helpMenu = new JMenu("帮助(H)");
    		helpMenu.setMnemonic('H');// 设置快捷键ALT+H
    
    		helpMenu_HelpTopics = new JMenuItem("帮助主题(H)");
    		helpMenu_HelpTopics.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
    		helpMenu_HelpTopics.addActionListener(this);
    
    		// 向菜单条添加"帮助"菜单及菜单项
    		menuBar.add(helpMenu);
    		helpMenu.add(helpMenu_HelpTopics);
    
    		// 向窗口添加菜单条
    		this.setJMenuBar(menuBar);
    
    		// 创建文本编辑区并添加滚动条
    		editArea = new JTextArea(30, 80);
    		JScrollPane scroller = new JScrollPane(editArea);
    		scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    		this.add(scroller, BorderLayout.CENTER);// 向窗口添加文本编辑区
    		editArea.setWrapStyleWord(true);// 设置单词在一行不足容纳时换行
    		editArea.setLineWrap(true);// 设置文本编辑区自动换行默认为true,即会"自动换行"
    		// this.add(editArea,BorderLayout.CENTER);
    		oldValue = editArea.getText();// 获取原文本编辑区的内容
    
    		// 编辑区注册事件监听(与撤销操作有关)
    		editArea.getDocument().addUndoableEditListener(undo);//JTextField JPasswordField中的撤销事件监听
    		editArea.getDocument().addDocumentListener(this);//文本区事件
    
    		// 创建右键弹出菜单
    		popupMenu = new JPopupMenu();
    		popupMenu_Undo = new JMenuItem("撤销(U)");
    		popupMenu_Cut = new JMenuItem("剪切(T)");
    		popupMenu_Copy = new JMenuItem("复制(C)");
    		popupMenu_Paste = new JMenuItem("粘帖(P)");
    		popupMenu_Delete = new JMenuItem("删除(D)");
    		popupMenu_SelectAll = new JMenuItem("全选(A)");
    
    		// 向右键菜单添加菜单项和分隔符
    		popupMenu.add(popupMenu_Undo);
    		popupMenu.addSeparator();
    		popupMenu.add(popupMenu_Cut);
    		popupMenu.add(popupMenu_Copy);
    		popupMenu.add(popupMenu_Paste);
    		popupMenu.add(popupMenu_Delete);
    		popupMenu.addSeparator();
    		popupMenu.add(popupMenu_SelectAll);
    
    		// 文本编辑区注册右键菜单事件
    		popupMenu_Undo.addActionListener(this);
    		popupMenu_Cut.addActionListener(this);
    		popupMenu_Copy.addActionListener(this);
    		popupMenu_Paste.addActionListener(this);
    		popupMenu_Delete.addActionListener(this);
    		popupMenu_SelectAll.addActionListener(this);
    
    		// 文本编辑区注册右键菜单事件
    		editArea.addMouseListener(new MouseAdapter() {
    			public void mousePressed(MouseEvent e) {
    				if (e.isPopupTrigger()){// 返回此鼠标事件是否为该平台的弹出菜单触发事件
    					popupMenu.show(e.getComponent(), e.getX(), e.getY());// 在组件调用者的坐标空间中的位置 显示弹出菜单
    				}
    				checkMenuItemEnabled();// 设置剪切,复制,粘帖,删除等功能的可用性
    				editArea.requestFocus();// 编辑区获取焦点
    			}
    
    			public void mouseReleased(MouseEvent e) {
    				if (e.isPopupTrigger()){// 返回此鼠标事件是否为该平台的弹出菜单触发事件
    					popupMenu.show(e.getComponent(), e.getX(), e.getY());// 在组件调用者的坐标空间中的位置 显示弹出菜单
    				}
    				checkMenuItemEnabled();// 设置剪切,复制,粘帖,删除等功能的可用性
    				editArea.requestFocus();// 编辑区获取焦点
    			}
    		});// 文本编辑区注册右键菜单事件结束
    
    		// 创建和添加状态栏
    		statusLabel = new JLabel("按F1获取帮助");
    		this.add(statusLabel, BorderLayout.SOUTH);// 向窗口添加状态栏标签
    
    		// 设置窗口在屏幕上的位置、大小和可见性
    		this.setLocation(100, 100);
    		this.setSize(800, 600);
    		this.setVisible(true);
    		
    		// 添加窗口监听器
    		addWindowListener(new WindowAdapter() {
    			public void windowClosing(WindowEvent e) {
    				exitWindowChoose();
    			}
    		});
    
    		checkMenuItemEnabled();
    		editArea.requestFocus();
    	}// 构造函数Notepad结束
    
    	// 设置菜单项的可用性:剪切,复制,粘帖,删除功能
    	public void checkMenuItemEnabled() {
    		String selectText = editArea.getSelectedText();
    		if (selectText == null) {
    			editMenu_Cut.setEnabled(false);
    			popupMenu_Cut.setEnabled(false);
    			editMenu_Copy.setEnabled(false);
    			popupMenu_Copy.setEnabled(false);
    			editMenu_Delete.setEnabled(false);
    			popupMenu_Delete.setEnabled(false);
    		} else {
    			editMenu_Cut.setEnabled(true);
    			popupMenu_Cut.setEnabled(true);
    			editMenu_Copy.setEnabled(true);
    			popupMenu_Copy.setEnabled(true);
    			editMenu_Delete.setEnabled(true);
    			popupMenu_Delete.setEnabled(true);
    		}
    		// 粘帖功能可用性判断
    		Transferable contents = clipBoard.getContents(this);  // 获取剪贴板中的内容
    		if (contents == null) {
    			editMenu_Paste.setEnabled(false);
    			popupMenu_Paste.setEnabled(false);
    		} else {
    			editMenu_Paste.setEnabled(true);
    			popupMenu_Paste.setEnabled(true);
    		}
    	}// 方法checkMenuItemEnabled()结束
    
    	// 关闭窗口时调用
    	public void exitWindowChoose() {
    		editArea.requestFocus();
    		String currentValue = editArea.getText();
    		if (currentValue.equals(oldValue) == true) {
    			System.exit(0);
    		} else {
    			int exitChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存,是否保存?", "退出提示",
    					JOptionPane.YES_NO_CANCEL_OPTION);
    			if (exitChoose == JOptionPane.YES_OPTION) { // boolean isSave=false;
    				if (isNewFile) {
    					String str = null;
    					JFileChooser fileChooser = new JFileChooser();// Java Swing提供的文件选择对话框
    					fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);// 指示仅显示文件
    					fileChooser.setDialogTitle("文件另存为……");// 设置显示在 JFileChooser 窗口标题栏的字符串。
    
    					int result = fileChooser.showSaveDialog(this);// 弹出一个 "Save File" 文件选择器对话框。
    
    					if (result == JFileChooser.CANCEL_OPTION) {
    						return;
    					}
    
    					File saveFileName = fileChooser.getSelectedFile();//这个文件可能存在,可能不存在。如果不存在,返回的是--你在对话框中输入的文件名。
    
    					if (saveFileName == null || saveFileName.getName().equals("")) {
    						JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
    					} else {
    						try {
    							FileWriter fw = new FileWriter(saveFileName);// 写文本文件
    							BufferedWriter bfw = new BufferedWriter(fw);// 嵌套
    							bfw.write(editArea.getText(), 0, editArea.getText().length());
    							bfw.flush();
    							fw.close();
    
    							isNewFile = false;
    							currentFile = saveFileName;
    							oldValue = editArea.getText();
    
    							this.setTitle(saveFileName.getName() + "  - 记事本");
    							statusLabel.setText(" 当前打开文件:" + saveFileName.getAbsoluteFile());
    							// isSave=true;
    						} catch (IOException ioException) {
    						}
    					}
    				} else {
    					try {
    						FileWriter fw = new FileWriter(currentFile);
    						BufferedWriter bfw = new BufferedWriter(fw);
    						bfw.write(editArea.getText(), 0, editArea.getText().length());
    						bfw.flush();
    						fw.close();
    						// isSave=true;
    					} catch (IOException ioException) {
    					}
    				}
    				System.exit(0);
    			} else if (exitChoose == JOptionPane.NO_OPTION) {
    				System.exit(0);
    			} else {
    				return;
    			}
    		}
    	}// 关闭窗口时调用方法结束
    
    	// 查找方法
    	public void find() {
    		final JDialog findDialog = new JDialog(this, "查找", false);// false时允许其他窗口同时处于激活状态(即无模式)
    		Container con = findDialog.getContentPane();// 返回此对话框的contentPane对象
    		con.setLayout(new FlowLayout(FlowLayout.LEFT));
    		JLabel findContentLabel = new JLabel("查找内容(N):");
    		final JTextField findText = new JTextField(15);
    		JButton findNextButton = new JButton("查找下一个(F):");
    		final JCheckBox matchCheckBox = new JCheckBox("区分大小写(C)");
    		ButtonGroup bGroup = new ButtonGroup();//多斥按钮组
    		final JRadioButton upButton = new JRadioButton("向上(U)");
    		final JRadioButton downButton = new JRadioButton("向下(D)");
    		downButton.setSelected(true);//默认向后找
    		bGroup.add(upButton);
    		bGroup.add(downButton);//装入
    
    		JButton cancel = new JButton("取消");
    		// 取消按钮事件处理
    		cancel.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				findDialog.dispose();//关闭
    			}
    		});
    		// "查找下一个"按钮监听
    		findNextButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) { 
    				int k = 0, m = 0;
    				final String str1, str2, str3, str4, strA, strB;
    				str1 = editArea.getText();//全文
    				str2 = findText.getText();//要查找的文字
    				str3 = str1.toUpperCase();//将字符串小写字符转换为大写
    				str4 = str2.toUpperCase();
    				if (matchCheckBox.isSelected())// "区分大小写(C)"的JCheckBox是否被选中
    				{
    					strA = str1;
    					strB = str2;
    				} else// 不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找
    				{
    					strA = str3;
    					strB = str4;
    				}
    				if (upButton.isSelected()) { 
    					if (editArea.getSelectedText() == null)
    						k = strA.lastIndexOf(strB, editArea.getCaretPosition() - 1 );//从光标位置从右向左寻找最后一次出现的索引
    						//k返回指定字符在此字符串中第一次出现的索引,如果此字符串中没有这样的字符,则返回 -1。
    					else
    						k = strA.lastIndexOf(strB, editArea.getCaretPosition() - findText.getText().length() - 1);
    					if (k > -1) { 
    						editArea.setCaretPosition(k);
    						editArea.select(k, k + strB.length());
    					} else {
    						JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "查找", JOptionPane.INFORMATION_MESSAGE);
    					}
    				} else if (downButton.isSelected()) {
    					if (editArea.getSelectedText() == null)
    						k = strA.indexOf(strB, editArea.getCaretPosition() + 1);//从左向右找第一次出现的位置
    					else
    						k = strA.indexOf(strB, editArea.getCaretPosition() - findText.getText().length() + 1);
    					if (k > -1) {
    						editArea.setCaretPosition(k);
    						editArea.select(k, k + strB.length());
    					} else {
    						JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "查找", JOptionPane.INFORMATION_MESSAGE);
    					}
    				}
    			}
    		});// "查找下一个"按钮监听结束
    			// 创建"查找"对话框的界面
    		JPanel panel1 = new JPanel();
    		JPanel panel2 = new JPanel();
    		JPanel panel3 = new JPanel();
    		JPanel directionPanel = new JPanel();
    		directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));
    		// 设置directionPanel组件的边框;
    		// BorderFactory.createTitledBorder(String
    		// title)创建一个新标题边框,使用默认边框(浮雕化)、默认文本位置(位于顶线上)、默认调整 (leading)
    		// 以及由当前外观确定的默认字体和文本颜色,并指定了标题文本。
    		directionPanel.add(upButton);
    		directionPanel.add(downButton);
    		panel1.setLayout(new GridLayout(2, 1));
    		panel1.add(findNextButton);
    		panel1.add(cancel);
    		panel2.add(findContentLabel);
    		panel2.add(findText);
    		panel2.add(panel1);
    		panel3.add(matchCheckBox);
    		panel3.add(directionPanel);
    		con.add(panel2);
    		con.add(panel3);
    		findDialog.setSize(410, 180);
    		findDialog.setResizable(false);// 不可调整大小
    		findDialog.setLocation(230, 280);
    		findDialog.setVisible(true);
    	}// 查找方法结束
    
    	// 替换方法
    	public void replace() {
    		final JDialog replaceDialog = new JDialog(this, "替换", false);// false时允许其他窗口同时处于激活状态(即无模式)
    		Container con = replaceDialog.getContentPane();// 返回此对话框的contentPane对象
    		con.setLayout(new FlowLayout(FlowLayout.CENTER));
    		JLabel findContentLabel = new JLabel("查找内容(N):");
    		final JTextField findText = new JTextField(15);
    		JButton findNextButton = new JButton("查找下一个(F):");
    		JLabel replaceLabel = new JLabel("替换为(P):");
    		final JTextField replaceText = new JTextField(15);
    		JButton replaceButton = new JButton("替换(R)");
    		JButton replaceAllButton = new JButton("全部替换(A)");
    		JButton cancel = new JButton("取消");
    		cancel.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				replaceDialog.dispose();
    			}
    		});
    		final JCheckBox matchCheckBox = new JCheckBox("区分大小写(C)");
    		ButtonGroup bGroup = new ButtonGroup();
    		final JRadioButton upButton = new JRadioButton("向上(U)");
    		final JRadioButton downButton = new JRadioButton("向下(D)");
    		downButton.setSelected(true);
    		bGroup.add(upButton);
    		bGroup.add(downButton);
    
    		// "查找下一个"按钮监听
    		findNextButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				int k = 0, m = 0;
    				final String str1, str2, str3, str4, strA, strB;
    				str1 = editArea.getText();
    				str2 = findText.getText();
    				str3 = str1.toUpperCase();
    				str4 = str2.toUpperCase();
    				if (matchCheckBox.isSelected())// 区分大小写
    				{
    					strA = str1;
    					strB = str2;
    				} else// 不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找
    				{
    					strA = str3;
    					strB = str4;
    				}
    				if (upButton.isSelected()) { 
    					if (editArea.getSelectedText() == null)
    						k = strA.lastIndexOf(strB, editArea.getCaretPosition() - 1);
    					else
    						k = strA.lastIndexOf(strB, editArea.getCaretPosition() - findText.getText().length() - 1);
    					if (k > -1) { 
    						editArea.setCaretPosition(k);
    						editArea.select(k, k + strB.length());
    					} else {
    						JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "查找", JOptionPane.INFORMATION_MESSAGE);
    					}
    				} else if (downButton.isSelected()) {
    					if (editArea.getSelectedText() == null)
    						k = strA.indexOf(strB, editArea.getCaretPosition() + 1);
    					else
    						k = strA.indexOf(strB, editArea.getCaretPosition() - findText.getText().length() + 1 );
    					if (k > -1) {
    						editArea.setCaretPosition(k);
    						editArea.select(k, k + strB.length());
    					} else {
    						JOptionPane.showMessageDialog(null, "找不到您查找的内容!", "查找", JOptionPane.INFORMATION_MESSAGE);
    					}
    				}
    			}
    		});// "查找下一个"按钮监听结束
    
    		// "替换"按钮监听
    		replaceButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				if (replaceText.getText().length() == 0 && editArea.getSelectedText() != null)
    					editArea.replaceSelection("");
    				if (replaceText.getText().length() > 0 && editArea.getSelectedText() != null)
    					editArea.replaceSelection(replaceText.getText());
    			}
    		});// "替换"按钮监听结束
    
    		// "全部替换"按钮监听
    		replaceAllButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				editArea.setCaretPosition(0); // 将光标放到编辑区开头
    				int k = 0, m = 0, replaceCount = 0;
    				if (findText.getText().length() == 0) {
    					JOptionPane.showMessageDialog(replaceDialog, "请填写查找内容!", "提示", JOptionPane.WARNING_MESSAGE);
    					findText.requestFocus(true);
    					return;
    				}
    				while (k > -1)// 当文本中有内容被选中时(k>-1被选中)进行替换,否则不进行while循环
    				{ // "区分大小写(C)"的JCheckBox是否被选中
    					final String str1, str2, str3, str4, strA, strB;
    					str1 = editArea.getText();
    					str2 = findText.getText();
    					str3 = str1.toUpperCase();
    					str4 = str2.toUpperCase();
    					if (matchCheckBox.isSelected())// 区分大小写
    					{
    						strA = str1;
    						strB = str2;
    					} else// 不区分大小写,此时把所选内容全部化成大写(或小写),以便于查找
    					{
    						strA = str3;
    						strB = str4;
    					}
    					if (upButton.isSelected()) {
    						if (editArea.getSelectedText() == null)
    							k = strA.lastIndexOf(strB, editArea.getCaretPosition()   );
    						else
    							k = strA.lastIndexOf(strB, editArea.getCaretPosition() - findText.getText().length()  );
    						if (k > -1) { 
    							editArea.setCaretPosition(k);
    							editArea.select(k, k + strB.length());
    						} else {
    							if (replaceCount == 0) {
    								JOptionPane.showMessageDialog(replaceDialog, "找不到您查找的内容!", "记事本",
    										JOptionPane.INFORMATION_MESSAGE);
    							} else {
    								JOptionPane.showMessageDialog(replaceDialog, "成功替换" + replaceCount + "个匹配内容!", "替换成功",
    										JOptionPane.INFORMATION_MESSAGE);
    							}
    						}
    					} else if (downButton.isSelected()) {
    						if (editArea.getSelectedText() == null)
    							k = strA.indexOf(strB, editArea.getCaretPosition()  );
    						else
    							k = strA.indexOf(strB, editArea.getCaretPosition() - findText.getText().length() );
    						if (k > -1) { 
    							editArea.setCaretPosition(k);
    							editArea.select(k, k + strB.length());
    						} else {
    							if (replaceCount == 0) {
    								JOptionPane.showMessageDialog(replaceDialog, "找不到您查找的内容!", "记事本",
    										JOptionPane.INFORMATION_MESSAGE);
    							} else {
    								JOptionPane.showMessageDialog(replaceDialog, "成功替换" + replaceCount + "个匹配内容!", "替换成功",
    										JOptionPane.INFORMATION_MESSAGE);
    							}
    						}
    					}
    					if (replaceText.getText().length() == 0 && editArea.getSelectedText() != null) {
    						editArea.replaceSelection("");
    						replaceCount++;
    					}
    
    					if (replaceText.getText().length() > 0 && editArea.getSelectedText() != null) {
    						editArea.replaceSelection(replaceText.getText());
    						replaceCount++;
    					}
    				} // while循环结束
    			}
    		});// "替换全部"方法结束
    
    		// 创建"替换"对话框的界面
    		JPanel directionPanel = new JPanel();
    		directionPanel.setBorder(BorderFactory.createTitledBorder("方向"));
    		directionPanel.add(upButton);
    		directionPanel.add(downButton);
    		JPanel panel1 = new JPanel();
    		JPanel panel2 = new JPanel();
    		JPanel panel3 = new JPanel();
    		JPanel panel4 = new JPanel();
    		panel4.setLayout(new GridLayout(2, 1));
    		panel1.add(findContentLabel);
    		panel1.add(findText);
    		panel1.add(findNextButton);
    		panel4.add(replaceButton);
    		panel4.add(replaceAllButton);
    		panel2.add(replaceLabel);
    		panel2.add(replaceText);
    		panel2.add(panel4);
    		panel3.add(matchCheckBox);
    		panel3.add(directionPanel);
    		panel3.add(cancel);
    		con.add(panel1);
    		con.add(panel2);
    		con.add(panel3);
    		replaceDialog.setSize(420, 220);
    		replaceDialog.setResizable(true);// 
    		replaceDialog.setLocation(230, 280);
    		replaceDialog.setVisible(true);
    	}// "全部替换"按钮监听结束
    
    	// "字体"方法
    	public void font() {
    		final JDialog fontDialog = new JDialog(this, "字体设置", false);
    		Container con = fontDialog.getContentPane();
    		con.setLayout(new FlowLayout(FlowLayout.LEFT));
    		JLabel fontLabel = new JLabel("字体(F):");
    		fontLabel.setPreferredSize(new Dimension(100, 20));// 构造一个Dimension,并将其初始化为指定宽度和高度
    		JLabel styleLabel = new JLabel("字形(Y):");
    		styleLabel.setPreferredSize(new Dimension(100, 20));
    		JLabel sizeLabel = new JLabel("大小(S):");
    		sizeLabel.setPreferredSize(new Dimension(100, 20));
    		final JLabel sample = new JLabel("记事本");
    		// sample.setHorizontalAlignment(SwingConstants.CENTER);
    		final JTextField fontText = new JTextField(9);
    		fontText.setPreferredSize(new Dimension(200, 20));
    		final JTextField styleText = new JTextField(8);
    		styleText.setPreferredSize(new Dimension(200, 20));
    		final int style[] = { Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD + Font.ITALIC };
    		final JTextField sizeText = new JTextField(5);
    		sizeText.setPreferredSize(new Dimension(200, 20));
    		JButton okButton = new JButton("确定");
    		JButton cancel = new JButton("取消");
    		cancel.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				fontDialog.dispose();
    			}
    		});
    		Font currentFont = editArea.getFont();
    		fontText.setText(currentFont.getFontName());
    		fontText.selectAll();
    		// styleText.setText(currentFont.getStyle());
    		// styleText.selectAll();
    		if (currentFont.getStyle() == Font.PLAIN)
    			styleText.setText("常规");
    		else if (currentFont.getStyle() == Font.BOLD)
    			styleText.setText("粗体");
    		else if (currentFont.getStyle() == Font.ITALIC)
    			styleText.setText("斜体");
    		else if (currentFont.getStyle() == (Font.BOLD + Font.ITALIC))
    			styleText.setText("粗斜体");
    		styleText.selectAll();
    		String str = String.valueOf(currentFont.getSize());
    		sizeText.setText(str);
    		sizeText.selectAll();
    		final JList fontList, styleList, sizeList;
    		GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    		final String fontName[] = ge.getAvailableFontFamilyNames();
    		fontList = new JList(fontName);
    		fontList.setFixedCellWidth(86);
    		fontList.setFixedCellHeight(20);
    		fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		final String fontStyle[] = { "常规", "粗体", "斜体", "粗斜体" };
    		styleList = new JList(fontStyle);
    		styleList.setFixedCellWidth(86);
    		styleList.setFixedCellHeight(20);
    		styleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		if (currentFont.getStyle() == Font.PLAIN)
    			styleList.setSelectedIndex(0);
    		else if (currentFont.getStyle() == Font.BOLD)
    			styleList.setSelectedIndex(1);
    		else if (currentFont.getStyle() == Font.ITALIC)
    			styleList.setSelectedIndex(2);
    		else if (currentFont.getStyle() == (Font.BOLD + Font.ITALIC))
    			styleList.setSelectedIndex(3);
    		final String fontSize[] = { "8", "9", "10", "11", "12", "14", "16", "18", "20", "22", "24", "26", "28", "36",
    				"48", "72" };
    		sizeList = new JList(fontSize);
    		sizeList.setFixedCellWidth(43);
    		sizeList.setFixedCellHeight(20);
    		sizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		fontList.addListSelectionListener(new ListSelectionListener() {
    			public void valueChanged(ListSelectionEvent event) {
    				fontText.setText(fontName[fontList.getSelectedIndex()]);
    				fontText.selectAll();
    				Font sampleFont1 = new Font(fontText.getText(), style[styleList.getSelectedIndex()],
    						Integer.parseInt(sizeText.getText()));
    				sample.setFont(sampleFont1);
    			}
    		});
    		styleList.addListSelectionListener(new ListSelectionListener() {
    			public void valueChanged(ListSelectionEvent event) {
    				int s = style[styleList.getSelectedIndex()];
    				styleText.setText(fontStyle[s]);
    				styleText.selectAll();
    				Font sampleFont2 = new Font(fontText.getText(), style[styleList.getSelectedIndex()],
    						Integer.parseInt(sizeText.getText()));
    				sample.setFont(sampleFont2);
    			}
    		});
    		sizeList.addListSelectionListener(new ListSelectionListener() {
    			public void valueChanged(ListSelectionEvent event) {
    				sizeText.setText(fontSize[sizeList.getSelectedIndex()]);
    				// sizeText.requestFocus();
    				sizeText.selectAll();
    				Font sampleFont3 = new Font(fontText.getText(), style[styleList.getSelectedIndex()],
    						Integer.parseInt(sizeText.getText()));
    				sample.setFont(sampleFont3);
    			}
    		});
    		okButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				Font okFont = new Font(fontText.getText(), style[styleList.getSelectedIndex()],
    						Integer.parseInt(sizeText.getText()));
    				editArea.setFont(okFont);
    				fontDialog.dispose();
    			}
    		});
    		JPanel samplePanel = new JPanel();
    		samplePanel.setBorder(BorderFactory.createTitledBorder("示例"));
    		// samplePanel.setLayout(new FlowLayout(FlowLayout.CENTER));
    		samplePanel.add(sample);
    		JPanel panel1 = new JPanel();
    		JPanel panel2 = new JPanel();
    		JPanel panel3 = new JPanel();
    		panel2.add(fontText);
    		panel2.add(styleText);
    		panel2.add(sizeText);
    		panel2.add(okButton);
    		panel3.add(new JScrollPane(fontList));// JList不支持直接滚动,所以要让JList作为JScrollPane的视口视图
    		panel3.add(new JScrollPane(styleList));
    		panel3.add(new JScrollPane(sizeList));
    		panel3.add(cancel);
    		con.add(panel1);
    		con.add(panel2);
    		con.add(panel3);
    		con.add(samplePanel);
    		fontDialog.setSize(350, 340);
    		fontDialog.setLocation(200, 200);
    		fontDialog.setResizable(false);
    		fontDialog.setVisible(true);
    	}
    	// 新建
    	public void actionPerformed(ActionEvent e) { 
    		if (e.getSource() == fileMenu_New) {
    			editArea.requestFocus();
    			String currentValue = editArea.getText();
    			boolean isTextChange = (currentValue.equals(oldValue)) ? false : true;
    			if (isTextChange) {
    				int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存,是否保存?", "提示",
    						JOptionPane.YES_NO_CANCEL_OPTION);
    				if (saveChoose == JOptionPane.YES_OPTION) {
    					String str = null;
    					JFileChooser fileChooser = new JFileChooser();
    					fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    					fileChooser.setDialogTitle("另存为");
    					int result = fileChooser.showSaveDialog(this);
    					if (result == JFileChooser.CANCEL_OPTION) {
    						//statusLabel.setText("您没有选择任何文件");
    						return;
    					}
    					File saveFileName = fileChooser.getSelectedFile();
    					if (saveFileName == null || saveFileName.getName().equals("")) {
    						JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
    					} else {
    						try {
    							FileWriter fw = new FileWriter(saveFileName);
    							BufferedWriter bfw = new BufferedWriter(fw);
    							bfw.write(editArea.getText(), 0, editArea.getText().length());
    							bfw.flush();// 刷新该流的缓冲
    							bfw.close();
    							isNewFile = false;
    							currentFile = saveFileName;
    							oldValue = editArea.getText();
    							this.setTitle(saveFileName.getName() + " - 记事本");
    							statusLabel.setText("当前打开文件:" + saveFileName.getAbsoluteFile());
    						} catch (IOException ioException) {
    						}
    					}
    				} else if (saveChoose == JOptionPane.NO_OPTION) {
    					editArea.replaceRange("", 0, editArea.getText().length());
    					statusLabel.setText(" 新建文件");
    					this.setTitle("无标题 - 记事本");
    					isNewFile = true;
    					undo.discardAllEdits(); // 撤消所有的"撤消"操作
    					editMenu_Undo.setEnabled(false);
    					oldValue = editArea.getText();
    				} else if (saveChoose == JOptionPane.CANCEL_OPTION) {
    					return;
    				}
    			} else {
    				editArea.replaceRange("", 0, editArea.getText().length());
    				statusLabel.setText(" 新建文件");
    				this.setTitle("无标题 - 记事本");
    				isNewFile = true;
    				undo.discardAllEdits();// 撤消所有的"撤消"操作
    				editMenu_Undo.setEnabled(false);
    				oldValue = editArea.getText();
    			}
    		} // 新建结束
    			// 打开
    		else if (e.getSource() == fileMenu_Open) {
    			editArea.requestFocus();
    			String currentValue = editArea.getText();
    			boolean isTextChange = (currentValue.equals(oldValue)) ? false : true;
    			if (isTextChange) {
    				int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存,是否保存?", "提示",
    						JOptionPane.YES_NO_CANCEL_OPTION);
    				if (saveChoose == JOptionPane.YES_OPTION) {
    					String str = null;
    					JFileChooser fileChooser = new JFileChooser();
    					fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    					fileChooser.setDialogTitle("另存为");
    					int result = fileChooser.showSaveDialog(this);
    					if (result == JFileChooser.CANCEL_OPTION) {
    						statusLabel.setText("您没有选择任何文件");
    						return;
    					}
    					File saveFileName = fileChooser.getSelectedFile();
    					if (saveFileName == null || saveFileName.getName().equals("")) {
    						JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
    					} else {
    						try {
    							FileWriter fw = new FileWriter(saveFileName);
    							BufferedWriter bfw = new BufferedWriter(fw);
    							bfw.write(editArea.getText(), 0, editArea.getText().length());
    							bfw.flush();// 刷新该流的缓冲
    							bfw.close();
    							isNewFile = false;
    							currentFile = saveFileName;
    							oldValue = editArea.getText();
    							this.setTitle(saveFileName.getName() + " - 记事本");
    							statusLabel.setText("当前打开文件:" + saveFileName.getAbsoluteFile());
    						} catch (IOException ioException) {
    						}
    					}
    				} else if (saveChoose == JOptionPane.NO_OPTION) {
    					String str = null;
    					JFileChooser fileChooser = new JFileChooser();
    					fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    					fileChooser.setDialogTitle("打开文件");
    					int result = fileChooser.showOpenDialog(this);
    					if (result == JFileChooser.CANCEL_OPTION) {
    						statusLabel.setText("您没有选择任何文件");
    						return;
    					}
    					File fileName = fileChooser.getSelectedFile();
    					if (fileName == null || fileName.getName().equals("")) {
    						JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
    					} else {
    						try {
    							FileReader fr = new FileReader(fileName);
    							BufferedReader bfr = new BufferedReader(fr);
    							editArea.setText("");
    							while ((str = bfr.readLine()) != null) {
    								editArea.append(str);
    							}
    							this.setTitle(fileName.getName() + " - 记事本");
    							statusLabel.setText(" 当前打开文件:" + fileName.getAbsoluteFile());
    							fr.close();
    							isNewFile = false;
    							currentFile = fileName;
    							oldValue = editArea.getText();
    						} catch (IOException ioException) {
    						}
    					}
    				} else {
    					return;
    				}
    			} else {
    				String str = null;
    				JFileChooser fileChooser = new JFileChooser();
    				fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    				fileChooser.setDialogTitle("打开文件");
    				int result = fileChooser.showOpenDialog(this);
    				if (result == JFileChooser.CANCEL_OPTION) {
    					statusLabel.setText(" 您没有选择任何文件 ");
    					return;
    				}
    				File fileName = fileChooser.getSelectedFile();
    				if (fileName == null || fileName.getName().equals("")) {
    					JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
    				} else {
    					try {
    						FileReader fr = new FileReader(fileName);
    						BufferedReader bfr = new BufferedReader(fr);
    						editArea.setText("");
    						while ((str = bfr.readLine()) != null) {
    							editArea.append(str);
    						}
    						this.setTitle(fileName.getName() + " - 记事本");
    						statusLabel.setText(" 当前打开文件:" + fileName.getAbsoluteFile());
    						fr.close();
    						isNewFile = false;
    						currentFile = fileName;
    						oldValue = editArea.getText();
    					} catch (IOException ioException) {
    					}
    				}
    			}
    		} // 打开结束
    			// 保存
    		else if (e.getSource() == fileMenu_Save) {
    			editArea.requestFocus();
    			if (isNewFile) {
    				String str = null;
    				JFileChooser fileChooser = new JFileChooser();
    				fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    				fileChooser.setDialogTitle("保存");
    				int result = fileChooser.showSaveDialog(this);
    				if (result == JFileChooser.CANCEL_OPTION) {
    					statusLabel.setText("您没有选择任何文件");
    					return;
    				}
    				File saveFileName = fileChooser.getSelectedFile();
    				if (saveFileName == null || saveFileName.getName().equals("")) {
    					JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
    				} else {
    					try {
    						FileWriter fw = new FileWriter(saveFileName);
    						BufferedWriter bfw = new BufferedWriter(fw);
    						bfw.write(editArea.getText(), 0, editArea.getText().length());
    						bfw.flush();// 刷新该流的缓冲
    						bfw.close();
    						isNewFile = false;
    						currentFile = saveFileName;
    						oldValue = editArea.getText();
    						this.setTitle(saveFileName.getName() + " - 记事本");
    						statusLabel.setText("当前打开文件:" + saveFileName.getAbsoluteFile());
    					} catch (IOException ioException) {
    					}
    				}
    			} else {
    				try {
    					FileWriter fw = new FileWriter(currentFile);
    					BufferedWriter bfw = new BufferedWriter(fw);
    					bfw.write(editArea.getText(), 0, editArea.getText().length());
    					bfw.flush();
    					fw.close();
    				} catch (IOException ioException) {
    				}
    			}
    		} // 保存结束
    			// 另存为
    		else if (e.getSource() == fileMenu_SaveAs) {
    			editArea.requestFocus();
    			String str = null;
    			JFileChooser fileChooser = new JFileChooser();
    			fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    			fileChooser.setDialogTitle("另存为");
    			int result = fileChooser.showSaveDialog(this);
    			if (result == JFileChooser.CANCEL_OPTION) {
    				statusLabel.setText("您没有选择任何文件");
    				return;
    			}
    			File saveFileName = fileChooser.getSelectedFile();
    			if (saveFileName == null || saveFileName.getName().equals("")) {
    				JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE);
    			} else {
    				try {
    					FileWriter fw = new FileWriter(saveFileName);
    					BufferedWriter bfw = new BufferedWriter(fw);
    					bfw.write(editArea.getText(), 0, editArea.getText().length());
    					bfw.flush();
    					fw.close();
    					oldValue = editArea.getText();
    					this.setTitle(saveFileName.getName() + "  - 记事本");
    					statusLabel.setText(" 当前打开文件:" + saveFileName.getAbsoluteFile());
    				} catch (IOException ioException) {
    				}
    			}
    		} // 另存为结束
    			
    		// 退出
    		else if (e.getSource() == fileMenu_Exit) {
    			int exitChoose = JOptionPane.showConfirmDialog(this, "确定要退出吗?", "退出提示", JOptionPane.OK_CANCEL_OPTION);
    			if (exitChoose == JOptionPane.OK_OPTION) {
    				System.exit(0);
    			} else {
    				return;
    			}
    		} // 退出结束
    
    		// 撤销
    		else if (e.getSource() == editMenu_Undo || e.getSource() == popupMenu_Undo) {
    			//editArea.requestFocus();
    			if (undo.canUndo()) {
    				try {
    					undo.undo();
    				} catch (CannotUndoException ex) {
    					System.out.println("Unable to undo:" + ex);
    					// ex.printStackTrace();
    				}
    			}
    			if (!undo.canUndo()) {
    				editMenu_Undo.setEnabled(false);
    			}
    		} // 撤销结束
    
    		// 剪切
    		else if (e.getSource() == editMenu_Cut || e.getSource() == popupMenu_Cut) {
    			editArea.requestFocus();
    			String text = editArea.getSelectedText();
    			StringSelection selection = new StringSelection(text);
    			clipBoard.setContents(selection, null);
    			editArea.replaceRange("", editArea.getSelectionStart(), editArea.getSelectionEnd());
    			checkMenuItemEnabled();// 设置剪切,复制,粘帖,删除功能的可用性
    		} // 剪切结束
    
    		// 复制
    		else if (e.getSource() == editMenu_Copy || e.getSource() == popupMenu_Copy) {
    			editArea.requestFocus();
    			String text = editArea.getSelectedText();
    			StringSelection selection = new StringSelection(text);
    			clipBoard.setContents(selection, null);
    			checkMenuItemEnabled();// 设置剪切,复制,粘帖,删除功能的可用性
    		} // 复制结束
    
    		// 粘帖
    		else if (e.getSource() == editMenu_Paste || e.getSource() == popupMenu_Paste) {
    			editArea.requestFocus();
    			Transferable contents = clipBoard.getContents(this);
    			if (contents == null)
    				return;
    			String text = "";
    			try {
    				text = (String) contents.getTransferData(DataFlavor.stringFlavor);
    			} catch (Exception exception) {
    			}
    			editArea.replaceRange(text, editArea.getSelectionStart(), editArea.getSelectionEnd());
    			checkMenuItemEnabled();
    		} // 粘帖结束
    
    		// 删除
    		else if (e.getSource() == editMenu_Delete || e.getSource() == popupMenu_Delete) {
    			editArea.requestFocus();
    			editArea.replaceRange("", editArea.getSelectionStart(), editArea.getSelectionEnd());
    			checkMenuItemEnabled(); // 设置剪切、复制、粘贴、删除等功能的可用性
    		} // 删除结束
    
    		// 查找
    		else if (e.getSource() == editMenu_Find) {
    			editArea.requestFocus();
    			find();
    		} // 查找结束
    
    		// 查找下一个
    		else if (e.getSource() == editMenu_FindNext) {
    			editArea.requestFocus();
    			find();
    		} // 查找下一个结束
    
    		// 替换
    		else if (e.getSource() == editMenu_Replace) {
    			editArea.requestFocus();
    			replace();
    		} // 替换结束
    
    		// 全选
    		else if (e.getSource() == editMenu_SelectAll || e.getSource() == popupMenu_SelectAll) {
    			editArea.selectAll();
    		} // 全选结束
    
    		// 自动换行(已在前面设置)
    		else if (e.getSource() == formatMenu_LineWrap) {
    			if (formatMenu_LineWrap.getState())
    				editArea.setLineWrap(true);
    			else
    				editArea.setLineWrap(false);
    		} // 自动换行结束
    
    		// 字体设置
    		else if (e.getSource() == formatMenu_Font) {
    			editArea.requestFocus();
    			font();
    		} // 字体设置结束
    
    		// 设置状态栏可见性
    		else if (e.getSource() == viewMenu_Status) {
    			if (viewMenu_Status.getState())
    				statusLabel.setVisible(true);
    			else
    				statusLabel.setVisible(false);
    		} // 设置状态栏可见性结束
    
    		// 帮助主题
    		else if (e.getSource() == helpMenu_HelpTopics) {
    			editArea.requestFocus();
    			JOptionPane.showMessageDialog(this, "Java记事本", "帮助主题", JOptionPane.INFORMATION_MESSAGE);
    		} // 帮助主题结束
    
    	}// 方法actionPerformed()结束
    
    	// 实现DocumentListener接口中的方法(与撤销操作有关)
    	public void removeUpdate(DocumentEvent e) {
    		editMenu_Undo.setEnabled(true);
    	}
    
    	public void insertUpdate(DocumentEvent e) {
    		editMenu_Undo.setEnabled(true);
    	}
    	
    	public void changedUpdate(DocumentEvent e) {
    		editMenu_Undo.setEnabled(true);
    	}// DocumentListener结束
    
    	// main函数开始
    	public static void main(String args[]) {
    		Notepad notepad = new Notepad();
    		notepad.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 使用 System exit方法退出应用程序
    	}// main函数结束
    
    }
    
    
    展开全文
  • java课程设计 蜘蛛纸牌 内含代码 打包发布
  • java课程设计源代码,提供后台数据库内容。
  • JAVA课程设计第2版 耿祥义的,电子书与代码都有
  • JAVA 课程设计

    2018-07-03 11:12:12
    课程设计目的:复习、巩固Java语言的基础知识,进一步加深对Java可视化程序设计的理解和掌握;课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决...

     

    一、设计内容与设计要求

    1.课程设计目的:

    复习、巩固Java语言的基础知识,进一步加深对Java可视化程序设计的理解和掌握;课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力;为后继课程的实验以及课程设计打下较扎实的基础。

    2.设计要求:

    掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的中型问题,为将来开发软件积累一些典型的案例处理经验。具体要求如下:

    1)设计课题题目: 实验选课系统 

    ⑵根据自己对应的课题完成以下主要工作:①完成系统需求分析:包括系统设计目的与意义;系统功能需求;输入输出的要求。②完成系统概要设计:程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。③完成系统详细设计:包括采用java语言定义相关的数据类型;写出各模块的算法;画出函数的调用关系图。④调试分析、设计体会、测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。⑤关键源程序(带注释)

    ⑶按规定格式完成课程设计报告,将其打印稿(A4)上交给老师存档。

    ⑷不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。

     

     

     

       

    随着计算机的普及,计算机技术有快速的发展,计算机在各行各业的应用也越来越广泛,为了满足时代的需要,我们开发了许多与实际相应的应用系统,实验选课系统就是一个很好的例子。实验选课系统的用处非常大,它是记录学生选课以及教师等相关信息的软件,应用不同的用户权限加以控制,解决了数据的安全性问题。使用简单、方便,对学校的选课有很大的帮助。

     

     

    关键词:数据库应用;学生实验选课;权限;数据库


     



      言

    数据结构在计算机应用中的作用非常大,程序=数据结构+算法,算法的实现也离不开数据结构,一个好的算法必须要有合适的数据结构加以实现,才能保证算法的优越性。课程设计实际上就是程序的集合,是数据结构和算法方面的综合应用,课程设计不仅仅是考验我们的编程,对语言的学习能力,更主要的是培养我们对系统软件开发的方法的学习和团队合作能力的考验。当然,课程设计的意义并不是完全局限于此,每个人在课程设计中都可以得到不同的锻炼。本次课程设计的题目是实验选课系统。

    主要任务:1实验选课系统分为教师,学生及系统管理员三类用户,学生的功能包括选课,查寻实验信息等,教师的功能包括考勤,学生实验成绩录入,查寻实验信息等。管理员的功能包括新建教师,学生账户,设定实验课程信息(设定实验时间,地点,任课教师)。2、管理员可对教师,学生及实验课程信息进行修改;教师可对任课的考勤,成绩进行修改;学生可以对自己选修的课程重选,退选。3、管理员可删除教师,学生及实验课程信息。4、教师可查询所任课程的学生名单,实验时间,考勤及实验成绩,并可按成绩分数段进行统计;学生可查寻所学课程的实验时间,教师名单;管理员具有全系统的查寻功能。

    本次设计采用了SQL Sever2008VS2010等软件实现系统。


    1 需求分析

    系统用户分为三类:学生、教师、管理员;

    学生有选课、退选、查询成绩和课程信息、教师名单等功能。

    教师有添加成绩,查询学生名单和课程信息、统计、考勤等功能。

    管理员具有全系统的使用功能。

    1.1 系统分析

    实验选课系统针对不同的用户,对系统有着不同的使用权限,因此要求系统有密码登录功能。

    1.2 用户需求

    l  实验选课系统分为教师,学生及系统管理员三类用户,学生的功能包括选课,查寻实验信息等,教师的功能包括考勤,学生实验成绩录入,查寻实验信息等。管理员的功能包括新建教师,学生账户,设定实验课程信息(设定实验时间,地点,任课教师)。

    l  管理员可对教师,学生及实验课程信息进行修改;教师可对任课的考勤,成绩进行修改;学生可以对自己选修的课程重选,退选。

    l  管理员可删除教师,学生及实验课程信息。

    l  教师可查询所任课程的学生名单,实验时间,考勤及实验成绩,并可按成绩分数段进行统计;学生可查寻所学课程的实验时间,教师名单;管理员具有全系统的查寻功

     

     

     

     

     

     

     

     

    2 概要设计  

    2.1系统流程图

    2-1 系统流程图

    2.2 系统功能模块设计

    系统主要功能如下所示:



    2-2 系统功能模块

     

     

    2.3 系统总体设计

    实验选课系统分为教师,学生管理员三个功能模块。

    学生模块:选课、查寻实验信息、教师名单等功能。

    教师模块:考勤、成绩统计、学生实验成绩录入、查寻实验信息、所任课程的学生名单等功能。

    管理员模块:具有全系统的查询、更新功能。

    3 数据库设计

    3.1 概念模型设计

    3.1.1 设计原理

    通过对系统的总体结构的把握,采用自顶向下和自底向上像结合的混合策略,先采用自顶下策略设计出全局概念结构,再使用自底向上的方法设计出各局部概念结构。

    3.1.2 概念模型

    经过对实验选课系统所涉及到的数据进行分析,得到如下的实体:

    (1)    学生:属性包括学号、姓名、密码。

    (2)    课程:属性包括课程号、课程名称、课程信息(包括上课时间、上课地点、上课教师)。

    (3)    教师:职工号、教师姓名、密码。

    (4)    管理员:管理员编号、管理员姓名、密码。

    联系有:

    (1)    考勤:表示教师、实验课程、学生之间的关系。它有属性:状态

    (2)    选课:表示学生与实验课程之间的关系。它有属性:成绩。

    所设计的概念模型(E-R图)

                                
                                          图3-1 系统E-R

                         

        图 3-2 管理员分E-R

                               

    3-3 学生分E-R

     



    图 3-4 教师分E-R

     



    图 3-5 实验课程分E-R

     

     

    3.2 逻辑结构设计

    3.2.1 将实体转换为关系模式

    S(Sno,Sname,password)

    C(Cno,Cname,Ctine,Cplace,Tno)

    T(Tno,Tname,password)

    A(Ano,Aname,password)

    3.2.2将联系转换为关系模式

    SC(Sno,Cno,grade)

    TCS(Tno,Cno,Sno,status)

    3.3 物理结构设计

    3.3.1  基本表设计

    1、学生表:

    3-1 职工信息表

    字段名

    字段描述

    字段类型

    备注

    Sno

    学号

    Char(10)

    主键

    Sname

    姓名

    Char(10)

    password

    密码

    Char(10)

     

    创建学生表的SQL语句如下:

    Create table S

    (

    Sno char(10) primary key,

    Sname char(10),

    Password char(10)

    );

    2、教师表:

    3-2 教师信息表

    字段名

    字段描述

    字段类型

    备注

    Tno

    职工号

    Char(10)

    主键

    Tname

    教师姓名

    Char(10)

    password

    密码

    Char(10)

     

    创建教师表的SQL语句如下:

    Create table T

    (

    Tno char(10) primary key,

    Tname char(10),

    Password char(10)

    );

     

    3、管理员表:

    3-3 管理员信息表

    字段名

    字段描述

    字段类型

    备注

    Ano

    管理员编号

    Char(10)

    主键

    Aname

    姓名

    Char(10)

    password

    密码

    Char(10)

     

    创建管理员表的SQL语句如下:

    Create table A

    (

    Ano char(10) primary key,

    Aname char(10),

    Password char(10)

    );

     

    4、实验课程表:

    3-4 实验课程信息表

    字段名

    字段描述

    字段类型

    备注

    Cno

    课程号

    Char(10)

    主键

    Cname

    课程名称

    Char(20)

    Ctime

    上课时间

    Char(20)

    Cplace

    上课地点

    Char(10)

    Tno

    任课教师

    Char(10)

    T表外键

     

    创建实验课程表的SQL语句如下:

    Create table C

    (

    Cno char(10) primary key,

    Cname char(20),

    Ctime char(20),

    Cplace char(10),

    Tno char(10) foreign key references T(Tno)

    );

     

    5、学生选课表:

    3-5 学生选课信息表

    字段名

    字段描述

    字段类型

    备注

    Sno

    学号

    Char(10)

    主键

    Cno

    课程号

    Char(10)

    主键

    grade

    成绩

    Int

     

    创建学生选课表的SQL语句如下:

    Create table SC

    (

    Sno char(10) foreign key references S(Sno),

    Cno char(10) foreign key references S(Sno),

    grade int,

    primary key(Sno,Cno)

    );

    6、考勤表:

    3-6 考勤信息表

    字段名

    字段描述

    字段类型

    备注

    Tno

    职工号

    Char(10)

    主键

    Cno

    课程号

    Char(20)

    主键

    Sno

    学号

    Char(20)

    主键

    status

    状态

    Char(10)

    创建考勤表的SQL语句如下:

    Create table TCS 

    (

    Tno char(10) foreign key references T(Tno),

    Cno char(10) foreign key references S(Sno),

    Sno char(10) foreign key references S(Sno),

    status char(10),

    primary key(Tno,Cno,Sno)

    );

     

    4 程序模块设计

    4.1 开发环境及数据库连接

    本系统使用VS2010编程环境编写,使用SQL Sever (SQLEXPRESS)数据库,基于JFrame窗体设计,采用ADO.NET数据库访问技术。

    4.2 学生模块设计

    4.2.1设计思路

    根据任务书的内容,明确学生模块需要实现的功能,根据功能使用不同的方法设计不同的子模块。

    4.2.2实现方法(以程序流程图或伪码表示 )

    学生模块代码:

    private void 学生选课ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new Sxuanke().Show();

    }

    private void 已选课程ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new Syixuan().Show();

    }

     

     

    private void 查询实验信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectshiyan().Show();

    }

    private void 教师名单ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new Tmingdan().Show();

     }

    private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         this.Close();

         new login().Show();

    }

    4.3教师模块设计

    4.3.1设计思路

    根据任务书的内容,明确教师模块需要实现的功能,根据功能使用不同的方法设计不同的子模块。

    4.2.2实现方法(以程序流程图或伪码表示 )

    private void 录入成绩ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new gradeAdd().Show();

    }

    private void 查询实验课程信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectshiyan().Show();

    }

    private void 学生名单ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new xueshengmingdan().Show();

    }

    private void 考勤ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new kaoqing().Show();

    }

    private void 统计ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new tongji().Show();

    }

    private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         this.Close();

         new login().Show();

    }

    4.4 管理员模块设计

    4.4.1设计思路

    根据任务书的内容,明确管理员模块需要实现的功能,根据功能使用不同的方法设计不同的子模块。

    4.2.2实现方法(以程序流程图或伪码表示 )

    private void 添加学生用户ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new AddS().Show();

    }

    private void 添加教师用户ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new AddT().Show();

    }

    private void 添加实验课程信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new AddC().Show();

    }

    private void 学生信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectS().Show();

    }

    private void 教师信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectT().Show();

    }

    private void 实验课程信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectC().Show();

     }

    private void 学生选课信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectSC().Show();

    }

    private void 考勤信息ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         new selectTCS().Show();

    }

     

    private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)

    {

         this.Close();

         new login().Show();

    }

    5.系统测试

    5.1测试环境

    系统测试的时候主要是黑盒测试,进行功能的验证。

    工具:Windows 10 、VS2010SQL Sever

    5.2 测试用例及结果

    5.2.1 界面测试

    测试界面是否整洁美观,人机对话是否友好,检查所有的页面是否能够正确的显示,每个页面的风格是否一致,界面是否有错别字,页面每一个链接是否有对应的界面,页面控件和操作按钮的位置是否合理,界面中的下拉列表的值是否正确,是否有重复的值。

    界面测试结果,界面整洁美观,界面友好,界面风格一致,无错别字,控件按钮位置合适易于操作,输入框、下拉列表等显示正确。

    5.2.2功能测试

    1、登录测试

     



    5-1管理员登录测试1



    5-2登录失败测试

     




    学生登录测试



    查询结果



       

    通过本次数据库课程设计,对数据库的使用有了更深的了解,对于数据库的设计过程和方法有了更全面的认识。当然,本次课程设计使用的是数据库语言,对这门语言也有了初步的认识。在完成系统的过程中,让我认识到了自己的不足,自己在项目综合实训方面还比较欠缺。本次课程设计完成了任务书的全部内容,系统的详细设计还有欠缺,系统界面还有待完善。对数据库安全的方面了解甚少,以至于不知道怎样去维护,在数据库的设计方面花了很多时间,但是,有些问题还没有考虑进去。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    参考文献

    1]梁勇JAVA语言程序设计(基础篇)第十版,机械工业出版社

    2Bain T. SQL server 2008数据仓库与Analysis Services. 中国电出版社  

    3周龙骧.《数据库管理系统实现技术》.中国地质大学出版社

     

    展开全文
  • JAVA课程设计报告:记事本的设计与实现 首先声明:  由于正在学习Java,正好找到了关于记事本的许多资料,所以就参考网上的课程设计和代码,自己翻版一个记事本小程序,目的只在于熟悉应用Java中所学知识点.总结一下...

                                           JAVA课程设计报告:记事本的设计与实现

    首先声明:
         由于正在学习Java,正好找到了关于记事本的许多资料,所以就参考网上的课程设计和源代码,自己翻版一个记事本小程序,目的只在于熟悉应用Java中所学知识点.总结一下所有相关的知识点,方便自己和他人查看和学习.

    一:课程设计:

    1.总体框架:
           包括概要,前言,需求分析,概要设计,详细设计,系统测试和小结.

    2.目录:

    摘要1

    第1章  前言

        1.1 研究背景

        1.2 开发意义

        1.3 本文的组织结构

    第2章 需求分析

            2.1系统功能分析

            2.2 设计目标

    第3章 概要设计

    第4章 详细设计

           4.1文件模块的详细设计

           4.2编辑模块的详细设计

           4.3格式模块的详细设计

    第5章  系统测试

           5.1 程序主界面

           5.2文件界面

           5.3编辑菜单

    第6章 小 结

    参考文献


    3.主要部分的内容展示:

     

    (1).第2章 需求分析

             系统的需求分析根据记事本建立的一般流程,分析了系统的具体功能,对系统做了总体的规划,提出了系统的设计目标,介绍了系统的开发及运行环境。


    (2).第3章 概要设计

                                

             

                                      图3.1主模块

       

                         图3.2 实现文件功能的模块

                 

                         图3.3 文档编辑模块

                   

     

                         图3.4  格式设置模块


    (3).第4章 详细设计

     

    4.1文件模块的详细设计

            4.1.1新建模块的详细设计:

           用户选择新建后,先检测当前的文本内容是否修改过。如果未修改过,则新建一个空文本文档。如果修改过,先弹出提示保存对话框,提示用户是否保存,如果选择“是”,先保存当前文本内容,再新建一个空文本文档。如果选择“否”,则直接新建一个空文本文档。

             4.1.2打开模块的详细设计

        用户选择打开后,先检测当前的文本内容是否修改过。如果未修改过,则打开选择的文本文件。如果修改过,先弹出提示保存对话框,提示用户是否保存,如果选择“是”,先保存当前文本内容,再打开文本文件。如果选择“否”,则直接打开文件。

                

                     图4.2  打开模块流程图

             4.1.3保存、另存模块的详细设计

             当用户选择保存或另存时,先检测文件内容是否修改过。如果修改过,保存对文档的修改。如图4.3所示

                              

    图4.3 保存、另存模块流程图

         4.1.4退出模块的详细设计

        当用户选择退出时,弹出提示保存对话框,询问用户是否保持。如果选择“是”,先保存文档,再退出程序。如果选择“否”,直接退出程序。如图4.4所示:

                                     

                      图4.4  退出模块流程图


    4.2编辑模块的详细设计

            4.2.1撤销模块的详细设计

            打开一个文本文档,当用户选择编辑或右键弹出菜单中的撤消操作后,判断一个文本是否已被修改,若已修改,撤消上一步的操作,否则不进行任何操作。如图4.5所示:

           4.2.2剪切模块的详细设计

            打开一个文本文档,当用户选择编辑菜单或右键弹出菜单中的剪切操作后,判断一个文本是否被选中,若已选中,删除选中的文字,并将选中的文字传输到系统剪切板中,否则不进行任何操作。如图4.6所示:

     4.2.3复制模块的详细设计

         打开一个文本文档,当用户选择编辑菜单或右键弹出菜单中的复制操作后,判断一个文本是否被选中,若已选中,将选中的文字传输到系统剪切板中,否则不进行任何操作。如图4.7所示:

                                                          

                                                       图4.6剪切模块流程图                                                                         

    图4.7复制模块流程图

     

          4.2.4粘贴模块的详细设计

             运行程序,打开一个文本文档,在菜单栏上选中编辑菜单或者在文档中右键鼠标菜单,选中“粘贴”,判断文本文档是否进行了复制和剪切操作(即判断系统剪切板是否有内容),如果有就将剪切板的内容粘贴到光标处,没有就继续执行其他操作步骤。如图4.8所示:

         4.2.5删除模块的详细设计

             运行程序,打开一个文本文档,在菜单栏上选中编辑菜单或者在文档中右键鼠标菜单选中“删除”,程序判断文本文档是否有已选中的内容,如果有就将选中的内容删除掉,没有就执行其他操作。如图4.9所示:


                                     




    展开全文
  • 这是我在大二上学期的java课程设计,我的课程设计是做一个简易记事本。其中有这些要求:1. 摸拟windows操作系统中的记事本软件,开发一款简易记事本2. 具有新建文件、保存文件、复制和粘贴功能3. 可以根据自身能力...

    **

    java课程设计《简易记事本》

    **
    第一次在博客上发布文章。这是我在大二上学期的java课程设计,我的课程设计是做一个简易记事本。其中有这些要求:1. 摸拟windows操作系统中的记事本软件,开发一款简易记事本2. 具有新建文件、保存文件、复制和粘贴功能3. 可以根据自身能力添加其它功能。
    一、设计概述
    该程序为简易记事本,目的是摸拟windows操作系统中的记事本软件,开发一款简易记事本,是开发的记事本具有新建文件、保存文件、打开文件、复制、剪切、粘贴、设置背景颜色和字体等功能。
    本程序使用了窗口交互界面,主要运用了Java swing组件和动作事件监听器,还用到了文件的输入输出流。记事本的界面参考了Window中记事本界面,并且根据课程设计要求做了适当的调整,相应地添加了其他功能。

    二、总体设计
    2.1程序设计思路
    在本程序中,设计了一个菜单栏和文本区。设计过程中用了JMenuBar,JFileChooser,JScrollPane,JMenu等。JMenuBar包括用来制作”文件”,“工具”,“背景”,“字体”,“关于”。JTextArea主要用来输入文本。
    2.2总体设计
    这次编写的简易记事本一共有4个源文件。类之间的主要关系如图所示。主类是NoteBook;子类有Mytext,BackgroundClorListener,HandkeListener。
    NoteBook.java文件生成的类负责创建简易记事本的“窗口”和设置窗口的相关信息。该类含有main方法,整个程序从该类开始执行。
    Mytext.java文件生成的类Mytext继承JFrame类作为底层容器,负责添加窗口的组件和为组件添加监视器。整个记事本分为两块菜单栏和内容输入区;为了实现相关功能,添加监听事件。本程序为了实现ActionListener接口,用来监听并处理部分菜单项和内容输入区为事件源的事件。
    BackgroundColorListener.java文件生成的类BackgroundColorLisener负责重写监视器方法,实现设置文本区背景颜色的功能。
    HandleListener.javajava文件生成的类HandleListener负责重写监视器的方法,负责实现复制、剪切、粘贴的功能。
    2.3详细设计代码

    //主函数
    Jishiben.java
    public class Jishiben{
    	public static  void main(String args[]){
    		Mytext text=new Mytext(“&随手一记”,100,90,600,600”);
    //创建窗口、设置窗口名称和大小
    	}
    }
    Mytext.java
    //Mytext类
    import javax.swing.*;
    import java.awt.*;
    import javax.swing.event.*;
    import java.awt.event.InputEvent;
    import java.awt.event.KeyEvent;
    import java.awt.event.*;
    import  javax.swing.JFrame.*;
    import java.io.*;
    import javax.swing.filechooser.*;
    public class Mytext extends JFrame implements ActionListener{
    JTextArea area;//创建文本区
    JMenuBar menubar;//创建菜单条
    JButton button;//创建按钮
    JFileChooser fileDialog;//创建对话框
    BufferedReader in;//创建缓冲输入流
    FileReader fileReader;//创建文件字符输入流
    BufferedWriter out;//缓冲输出流
    FileWriter fileWriter;//创建文件字符输出流
    JMenu menu1,menu2,menu3,menu4,menu5,menu6,menu7,menu8,menu9;//创建菜单、子菜单
    JmenuItem item1,item2,item3,item4,item5,item6,item7,item8,item9,item10,item11,item12,item13,
    item14,item15,item16,item17,item18,item19,item20,item21,item22,item23,item24,
    item25,item26,item27,item28,item29;//创建菜单项
    //添加组件方法
    public  Mytext(String s,int x,int y,int h,int w){
    	init(s);
    	setLocation(x,y);
    	setSize(h,w);
    	setVisible(true);
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//使用结束后释放该窗口,退出程序
    	}
    	void init(String s){
    	setTitle(s);
    	menubar=new JMenuBar();
    button=new JButton();
    	area=new JTextArea();
    	menu1=new JMenu("文件(File)");
    	menu2=new JMenu("工具(Tool)");
    	menu3=new JMenu("颜色(Color)");
    	menu4=new JMenu("背景(Background)");
    	menu5=new JMenu("字体(Font)");
    	menu6=new JMenu("字号");
    	menu7=new JMenu("字形");
    	menu8=new JMenu("恢复原字体");
    	menu9=new JMenu("关于");
    	item1=new JMenuItem("复制(Copy)");
    item2=new JMenuItem("剪切(Cut)");
    	item3=new JMenuItem("粘贴(Paste)");
    	item4=new JMenuItem("新建(Newset)");
    	item5=new JMenuItem("保存(Paste)");
    	item6=new JMenuItem("灰色(Gray)");
    	item7=new JMenuItem("粉色(Pink)");
    	item8=new JMenuItem("白色(White)");
    	item9=new JMenuItem("红色(Red)");
    	item10=new JMenuItem("黑色(Black)");
    	item11=new JMenuItem("绿色(Green)");
    	item12=new JMenuItem("黄色(Yellow)");
    	item13=new JMenuItem("粉色(Pink)");
    	item14=new JMenuItem("白色(White)");
    	item15=new JMenuItem("红色(Red)");
    	item16=new JMenuItem("黑色(Black)");
    	item17=new JMenuItem("绿色(Green)");
    	item18=new JMenuItem("黄色(Yellow)");
    	item19=new JMenuItem("30");
    	item20=new JMenuItem("40");
    	item21=new JMenuItem("50");
    	item22=new JMenuItem("加粗");
    	item23=new JMenuItem("楷体");
    	item24=new JMenuItem("华文新魏");
    	item25=new JMenuItem("行书");
    	item26=new JMenuItem("格式化");
    	item27=new JMenuItem("相关提示");
    	item28=new JMenuItem("退出(格式化)");
    	item29=new JMenuItem("打开(Open)");
    	area.setLineWrap(true);//自动换行
    	button.add(item28);
    	add(button,BorderLayout.SOUTH);//添加按钮,在南面
    add(new JScrollPane(area),BorderLayout.CENTER);
    //创建滚动条,将文本区在中间位置,BordedLayout布局
    	area.setFont(new Font("宋体",0,20));
    	//默认字体为宋体,0是不加粗字体,1是加粗的,字号为20
    	fileDialog=new JFileChooser();
    	FileNameExtensionFilter filter=new FileNameExtensionFilter("文本文件","html","java");
    	//文件对话框可见的类型
    	fileDialog.setFileFilter(filter);
    	//设置对话框默认打开或显示的文件类型
    	item1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
    	//设置复制的功能的快捷键为Ctrl+C
    item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
    //设置剪切的功能的快捷键为Ctrl+Q
    item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
    //设置粘贴的功能的快捷键为Ctrl+V
    item4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
    //设置新建的功能的快捷键为Ctrl+N
    item5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
    //设置保存的功能的快捷键为Ctrl+P
    item5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
    //设置打开的功能的快捷键为Ctrl+O
    item28.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK));
    //设置的功能的快捷键为Ctrl+T
    item1.setActionCommand("copy");
    //设置出发item1事件后封装到事件中的一个为"copy"字符串
    item2.setActionCommand("cut");
    //设置出发item2事件后封装到事件中的一个为"cut"字符串
    item3.setActionCommand("paste");
    //设置出发item3事件后封装到事件中的一个为"paste"字符串
    item6.setActionCommand("gray");
    //设置出发item6事件后封装到事件中的一个为"gray"字符串
    item7.setActionCommand("pink");
    //设置出发item7事件后封装到事件中的一个为"pink"字符串
    item8.setActionCommand("white");
    //设置出发item8事件后封装到事件中的一个为"white"字符串
    item9.setActionCommand("red");
    //设置出发item9事件后封装到事件中的一个为"red"字符串
    item10.setActionCommand("black");
    //设置出发item10事件后封装到事件中的一个为"black"字符串
    item11.setActionCommand("green");
    //设置出发item11事件后封装到事件中的一个为"green"字符串
    item12.setActionCommand("yellow");
    //设置出发item12事件后封装到事件中的一个为"yellow"字符串
    			menu2.add(item1);//添加菜单项
    			menu2.addSeparator();//设置分格条,下面的都一样
    			menu2.add(item2);
    			menu2.addSeparator();
    			menu2.add(item3);
    			menu1.add(item4);
    			menu1.addSeparator();
    			menu1.add(item5);
    			menu1.addSeparator();
    			menu1.add(item29);
    			menu3.add(item13);
    			menu3.addSeparator();
    			menu3.add(item14);
    			menu3.addSeparator();
    			menu3.add(item15);
    			menu3.addSeparator();
    			menu3.add(item16);
    			menu3.addSeparator();
    			menu3.add(item17);
    		    menu3.addSeparator();
    			menu3.add(item18);
    			menu4.add(item6);
    			menu4.addSeparator();
    			menu4.add(item7);
    			menu4.addSeparator();
    			menu4.add(item8);
    			menu4.addSeparator();
    			menu4.add(item9);
    			menu4.addSeparator();
    			menu4.add(item10);
    			menu4.addSeparator();
    			menu4.add(item11);
    			menu4.addSeparator();
    			menu4.add(item12);
    			menu6.add(item19);
    			menu6.addSeparator();
    			menu6.add(item20);
    			menu6.addSeparator();
    			menu6.add(item21);
    			menu7.add(item22);
    			menu7.addSeparator();
    			menu7.add(item23);
    			menu7.addSeparator();
    			menu7.add(item24);
    			menu7.addSeparator();
    			menu7.add(item25);
    			menu8.add(item26);
    			menu9.add(item27);
    			menu5.add(menu3);
    			menu5.add(menu6);
    			menu5.add(menu7);
    		    menu5.add(menu8);
    		    menubar.add(menu1);
    			menubar.add(menu2);
    			menubar.add(menu4);
    			menubar.add(menu5);
    			menubar.add(menu9);
    			setJMenuBar(menubar);//设置菜单条
    HandleListener handleListener=new  HandleListener();//创建复制、剪切、粘贴监视器对象
    colorListener=new BackgroundColorListener();//创建灰、粉、白、红、黑、绿、黄监视器对象
    handleListener.setInputText(area);
    colorListener.setInputText(area);
    item1.addActionListener(handleListener);//item1将handleListener注册为监视器
    item2.addActionListener(handleListener);//item2将handleListener注册为监视器
    item3.addActionListener(handleListener);//item3将handleListener注册为监视器
    item4.addActionListener(this);//动作监视器this是指当前对象,不能被子类继承
    item5.addActionListener(this);
    item29.addActionListener(this);
    item6.addActionListener(colorListener);//item6将colorListener注册为监视器
    item7.addActionListener(colorListener);//item7将colorListener注册为监视器
    item8.addActionListener(colorListener);//item8将colorListener注册为监视器
    item9.addActionListener(colorListener);//item9将colorListener注册为监视器
    item10.addActionListener(colorListener);//item10将colorListener注册为监视器
    item11.addActionListener(colorListener);//item11将colorListener注册为监视器
    item12.addActionListener(colorListener);//item12将colorListener注册为监视器
    item13.addActionListener(this);//动作监视器this是指当前对象
    item14.addActionListener(this);
    item15.addActionListener(this);
    item16.addActionListener(this);
    item17.addActionListener(this);
    item18.addActionListener(this);
    item19.addActionListener(this);
    item20.addActionListener(this);
    item21.addActionListener(this);
    item22.addActionListener(this);
    item23.addActionListener(this);
    item24.addActionListener(this);
    item25.addActionListener(this);
    item26.addActionListener(this);
    item27.addActionListener(this);
    item28.addActionListener(this);
    }
    //下面是实现菜单里菜单项新建和保存的功能的方法
    public void actionPerformed(ActionEvent e){
    if(e.getSource()==item4){//监听"新建”事件
    int state=fileDialog.showOpenDialog(this);// 显示文件选取的对话框
    if(state==JFileChooser.APPROVE_OPTION){// 如果使用者按下确认键
    {area.setText(null);//将文本清空
    	area.setBackground(Color.white);
    area.setForeground(Color.black);}
    try{ 
    File dir=fileDialog.getCurrentDirectory();//获取当前对话框
    String name=fileDialog.getSelectedFile().getName();
    File file=new File(dir,name);//获取目录和文件名
    fileReader=new FileReader(file);
    in=new BufferedReader(fileReader);//创建文件的输出流
    String s=null;
    while((s=in.readLine())!=null){//从文件中读取一行文本
    area.append(s+"\n");}
    in.close();
    fileReader.close();//关闭输入流
     }
    catch(IOException exp){}//捕获文件读写发生的异常
    }
    else if(e.getSource()==item5){//监听保存事件
        int state=fileDialog.showSaveDialog(this);
    if(state==JFileChooser.APPROVE_OPTION){
             try{
               File dir=fileDialog.getCurrentDirectory();//获取当前对话框
                String name=fileDialog.getSelectedFile().getName();
                File file=new File(dir,name);
                fileWriter=new FileWriter(file);//写入字符文件
                out=new BufferedWriter(fileWriter);//将文本写入字符输出流
                out.write(area.getText());//获取文本区文字写入目的地
    out.flush();//强制把缓冲区里的内容写到目的地
                out.close();
                fileWriter.close();//关闭
                }
               catch(IOException exp){}//捕获文件读写发生的异常
    	   }
    }
    else if(e.getSource()==item29){//监听"打开"事件
            int state=fileDialog.showOpenDialog(this);
            if(state==JFileChooser.APPROVE_OPTION){
                 area.setText(null);
            try{
                File dir=fileDialog.getCurrentDirectory();
                String name=fileDialog.getSelectedFile().getName();
                File file=new File(dir,name);
                fileReader=new FileReader(file);
                in=new BufferedReader(fileReader);
       String s=null;
    		    while((s=in.readLine())!=null){
    				area.append(s+"\n");}
                    in.close();
                    fileReader.close();//关闭流
                }
             catch(IOException exp){}//捕获文件读写发生的异常}	
    else if(e.getSource()==item13){//监听"文字粉色"事件
    	area.setForeground(Color.pink);
    }
    else if(e.getSource()==item14){//监听"文字白色"事件
    	area.setForeground(Color.white);
    }
    else if(e.getSource()==item15){//监听"文字红色"事件
    	area.setForeground(Color.red);
    }
    else if(e.getSource()==item16){//监听"文字黑色"事件
    	area.setForeground(Color.black);
    }
    else if(e.getSource()==item17){//监听"文字绿色"事件
    	area.setForeground(Color.green);
    }
    else if(e.getSource()==item18){//监听"文字黄色"事件
    	area.setForeground(Color.yellow);
    }
    else if(e.getSource()==item19){//监听"Size30"事件
        area.setFont(new Font("宋体",0,30));
    }
    else if(e.getSource()==item20){//监听"Size40"事件
    	area.setFont(new Font("宋体",0,40));
    }
    else if(e.getSource()==item21){//监听"Size50"事件
    	area.setFont(new Font("宋体",0,50));
    }
    else if(e.getSource()==item22){//监听"文字加粗"事件
    	area.setFont(new Font("宋体",1,20));
    }
    else if(e.getSource()==item23){//监听"楷体"事件
    	area.setFont(new Font("楷体",0,20));
    }
    else if(e.getSource()==item24){//监听"华文新魏"事件
    	area.setFont(new Font("华文新魏",0,20));
    }
    else if(e.getSource()==item24){//监听"行书"事件
    	area.setFont(new Font("行书",0,20));
    }
    else if(e.getSource()==item26){//监听"恢复原设置"事件
    {
    	area.setFont(new Font("宋体",0,20));
    	area.setBackground(Color.white);
    	area.setForeground(Color.black);
    			}
    		}
    else if(e.getSource()==item28){监听"退出"事件
    	area.setText(null);
    }
    else if(e.getSource()==item27){监听"相关提示"事件
    { 
    	area.setBackground(Color.pink);//默认背景颜色为白色
    	area.setForeground(Color.black);//默认字体颜色为黑色
    area.setFont(new Font("新文华谓",1,20));
    area.append("该程序存在很多不足之处,建议使用前建议查询该网站了解相关信息\n");
    area.append("该网址是:https://...\n");
    int n=JOptionPane.showConfirmDialog(this,"您是否要复制该网址","温馨提示",JOptionPane.YES_NO_OPTION);//显示确认对话框
    if(n==JOptionPane.YES_OPTION){//用户单击对话框上的按钮“是”
    area.append("【注意】1、复制网址后,使用快捷键Ctrl+T,也可以继续编写文件。\n");
    area.append("谢谢您的使用!");
    }
    if(n==JOptionPane.NO_OPTION)//用户单击对话框上的按钮“是”
    	area.setText(null);
    		}
    	}
      }
    }
    BackgroundColorListener.java
    //BackgroundListener
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    //下面是实现背景颜色设置功能的方法
    public class BackgroundColorListener  implements ActionListener{
    JTextArea area;
    public void setInputText(JTextArea text){
    area=text;
    }
    public void actionPerformed(ActionEvent e){
    String str=e.getActionCommand();
    if(str.equals("gray"))
    area.setBackground(Color.gray);
    else if(str.equals("pink"))
    area.setBackground(Color.pink);
    else if(str.equals("white"))
    area.setBackground(Color.white);
    else if(str.equals("black"))
    area.setBackground(Color.black);
    else if(str.equals("green"))
       area.setBackground(Color.green);
    else if(str.equals("yellow"))
     area.setBackground(Color.yellow);
    else if(str.equals("red"))
    area.setBackground(Color.red);}
    }
    HandleListener.java
    //HandleListener类
    import java.awt.event.*;
    import javax.swing.*;
    //下面是实现工具里菜单项”复制”、剪切和粘贴的功能的方法
    public class HandleListener  implements ActionListener{
    JTextArea area;
    public void setInputText(JTextArea text){
    area=text;
    }
    public void actionPerformed(ActionEvent e){
    String str=e.getActionCommand();
    if(str.equals("copy"))
    	area.copy();
    else if(str.equals("cut"))
    	area.cut();
    else if(str.equals("paste"))
    	area.paste();
    }
    }
    

    4.1问题及解决办法
    (1)在文本区加入滚动条,该语句是:JScrollPane p=new JscrollPane();area.add§;运行后发现并没有滚动条;在看书查询后知道了不能直接添加,需要将窗格添加到面板,再将面板添加到文本区,这样才能成功的加入滚动条;后来被语句改为最简短的语add(new JScrollPane(area),BorderLayout.CENTER);
    滚动条已加入文本区。
    (2)为了是该记事本增加背景颜色和字体颜色的功能,一开始想一种颜色用一个菜单项就可以加入到菜单“背景”和“字体”中的,经过好多次运行发现这种办法是不可行的。后来只能多创建几个菜单项来分别引用。
    (3)在实现新建、保存和打开的功能的方法时,原打算和实现复制剪切粘贴功能一样新建一个java文件来实现这些功能的;运行后发现不可行,getActionCommand()对于文本框,当发生ActionEvent事件时,默认的字符串是文本框中的文本,并不是事件源对象的引用;因此就用关键字this作为新建、保存和打开的监视器,this指的是当前对象,可以调用getSource()方法可以获取发生ActionListener事件的事件源对象的引用,这样才能调用getCurrentDirectory()、showOpenDialog()等方法,这样才能实现新建、保存和粘贴功能。
    4.2存在不足
    (1)功能不全面,背景颜色不能保存到文件中
    (2)在增加字体这一功能设计还不够好
    (3)代码太长,不够精简
    五 心得体会
    经过努力,基本上完成我的Java课程设计一简单的记事本程序。也基本上实现了老师需求分析时所预期的功能。在这次课程设计中,我遇到了很多问题,也学会了解决这些问题的方法。通过这次的课程设计,使将我从技本上学习到的理论知识用到了实践上.从而进一步巩固和丰富了我所学过的知识,让我更深层次地认识到Java及其强大的功能。虽然过程有点难,但做这Java课程设计也进-步加强了我的动手能力和提高了我的兴趣。为了完成好这次课程设计,我一边上网查找相关资料,另一方面查阅相关书籍。在这过程中也无形中锻炼了我的思维分析、遇到问题及想方设法通过各种途径解决问题的能力。

    第一次写博客文章,有很多不足,希望大家多多指教

    展开全文
  • JAVA课程 设 计 报 告  1206401-18 瞿杰 一、设计时间  2013年6月 24日-----6月28日 二、设计地点  湖南城市学院实验楼计算机506机房 三、设计目的  1、巩固学习VB基础知识方面的基本算法,进一步熟悉...
  • Java Web课程设计

    2019-07-02 20:43:44
    为时两周的Java Web课程设计,使用目前流行的Spring Boot后端框架,Layui前端框架,做了一个业务逻辑较简单,具有前后台的图书借阅管理系统,还有很多很多很多的不足,该项目已放在github上,欢迎交流,批评指正~~~ ...
  • import java.awt.*; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseEvent; public class ChessBoard extends JPanel imple...
  • 俄罗斯方块 可实现功能 ...2.游戏实现:移动、旋转、消除方块统计得分、暂停游戏、暂停后继续游戏、此轮游戏未结束开启新一轮游戏、游戏未结束退出游戏。 3.排行榜:按分数排名、按局数排名(尚待改进) ...
  • 这个程序是自从学习Java以来写的第一个比较大的图形界面程序,花费了大约一周的时间,作为期末的课程设计,也算是基本上完成了任务,当然由于作者的编程能力有限,代码中难免存在BUG,不太简练,今天搬到博客上来,...
  • 一、 概要设计 2 1.1 游戏规则 2 1.2 游戏界面和操作方式 2 1.3 程序的主要运行过程 2 1.4 本程序需要解决的有关技术问题 2 二、 系统详细设计 3 2.1构建游戏主类TankClient 3 2.2构建坦克类Tank 3 2.3添加炮弹...
  • JAVA课程设计:ATM用户界面实现 最近一段时间因课程要求做了java的课程设计,所做的是ATM用户界面实现,挺简单的一个小设计,做之前有参考网上其他人的 大体思路,于是做完之后就打算把它上传到网上,以方便之后有...
  • Java课程设计题目

    2008-11-17 20:48:00
    Java课程设计题目1、编写一个记事本程序要求:用图形用户界面实现。能实现编辑、保存、另存为、查找替换等功能。提示:使用文件输入输出流。2、模拟龟兔赛跑要求:用图形用户界面实现。能设置比赛时间,马匹的数量...
  • 宿舍一起完成了一个课程设计,发出来分享下,完成这个题目后,自己对线程的理解深入了许多,也更加了解了Java的封装性 效果图 数据库中的初始数据 ClientLogin类 此类实现客户端的UI显示,输入信息...
  • 本系统为电话号码查询系统,拥有查询、浏览、打印、添加、删除、备份、修改等功能模块,代码简单易懂!
  • 大小用灵活的能够跟着屏幕大小变动的设计,用Dimension dim=getToolkit().getscreenseize来获取屏幕大小然后设置文本编辑器的时候就用这个dim去设。布局的话采用BorderLayout布局管理,将textArea文本框放在中心以...
1 2 3 4 5 ... 20
收藏数 21,696
精华内容 8,678
关键字:

java课程设计源程序