1、制作一个文本编辑器java课程设计报告322020年4月19日文档仅供参考,不当之处,请联系改正。Java语言程序设计课程设计报告设计题目: 制作一个文本编辑器 分 院: 电 信 分 院 班 级: 姓 名: 学 号: 指导教师: 黄建华 实验地点: 三教机六 课设时间: -12-20 -12-25 二OO九 年 十二 月 二十五 日Java语言程序设计课程设计 目录 一、 设计思路2二、 设计过程3三、 测试结果12四、 心得体会13五、 程序代码14一、 设计思路(一)设计概念要制作一个文本编辑器,首先得理清思路,要做一个什么样的文本编辑器,做成的编辑器要求要实现哪些功能,要实现这些功能分别
2、需要用到什么方法以及怎样组织编辑器的框架结构等等问题。现把我的设计思路简要介绍如下:1、明确设计要求首先要创立了一个窗体,标题为“设计的文本编辑器”,设计要求是要编辑文件和编辑这两个菜单项,要求在文件菜单项上添加新建、打开、保存、退出四个下拉子菜单,要求当用户单击新建时就能够新建一个空白文档;当单击打开时能够从已有的目录下打开需要打开的文本文件,在原有文件中能够选择要打开的文件;当单击保存时能够出现保存的路径,选择自己要保存到的路径将文件保存到指定的文件夹中;单击退出菜单时退出文件的下拉菜单。在编辑菜单下的子菜单复制,能够进行对文本的复制。在文本区内要求当单击鼠标右键时能够弹出菜单,要求有两个
3、子菜单为复制和字体,经过单击字体菜单能够实现对字体改变。而且在窗体的右上方有三个按钮能够实现最小化、最大化、和关闭。而且用户也能够根据自己的需要改变窗体的大小。2、确定设计思路即设计步骤(必须想到要用到哪几个方面的程序、包、方法、以及基本的程序语言)(1)创立一个窗体,包括构造一个文本域为编辑器各种功能的实现提供一个伸展平台;(2)新建一个空的菜单条,然后添加菜单项(文件菜单和编辑菜单);(3)设计程序在菜单项下添加子菜单,文本菜单对应新建、打开、保存和退出,编辑菜单包括的子菜单为复制和粘贴;(4)添加右键快捷弹出式菜单,包括复制、字体等菜单项。3、上两步都完成以后,就进入程序的检测运行阶段即
4、所谓的编译运行,看是否符合设计要求,是否达到理想中的那种效果,在测验阶段,要一步一步完善自己的作品直至真正意义上的完成整个设计过程。(二)流程图新建打开Open保存Save退出Exit复制Copy字体大小复制Copy粘贴Paste字体颜色快捷菜单编辑Edit文件File空的菜单条文本域TextArea窗体Frame主方法Main()公共类Bjq粘贴Paste二、设计过程1、 功能介绍:经过记事本编辑器能够实现新建、打开、保存文本文件、以及退出;同时也有对字体的改变、对字的颜色的改变以及复制、粘贴等功能,根据自己的意愿改变窗体,实行对其的最小化、最大化、关闭等等。2、设计步骤:import ja
5、vax.swing.*;import javax.swing.event.*;import java.awt.*;import java.awt.print.*;import java.awt.datatransfer.*;import java.applet.*;import javax.swing.JColorChooser;import javax.swing.event.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import javax.swing.text.*;import javax.swing.
6、colorchooser.*;引用两个包:javax、java、以及对应的方法 (1) 首先创立一个公共的类名为Bjq为文本编辑器创立一个窗体并设计标题为:08通信(2)班骆玉春设计的文本编辑器Bjq;并创立编辑器的文本域,具体代码如下;/设计标题JFrame f = new JFrame();f.setTitle(08通信(2)班骆玉春设计的文本编辑器Bjq);/构造文本域JTextArea aa = new JTextArea(, 20, 50);/构造一个文本域(2) 创立一个空的菜单条并添加两个菜单项(文件、编辑)JMenuBar cc = new JMenuBar();/创立一个空的
7、菜单条/创立文件和编辑这两个菜单项JMenu file = new JMenu(文件);JMenu edit = new JMenu(编辑);(3) 先设计一个匿名内部类,为文件、编辑菜单添加新建和其它下拉子菜单 “新建”子菜单:创立OpenL类实现了ActionLister并实现其读取文件的功能以匿名内部类的形式创立菜单监听器这些代码的作用是实现对新建、保存、打开、退出、复制进行监听,/ 实现文本文件的打开功能-即文件菜单下的子菜单打开class openL implements ActionListener public void actionPerformed(ActionEvent e
8、) JFileChooser fc = new JFileChooser();int returnVal = fc.showDialog(Bjq.this, 打开); “退出”子菜单:/实现文本文件的退出功能-即文件菜单下的子菜单退出class exitL implements ActionListener public void actionPerformed(ActionEvent e) System.exit(0);/新建、保存、复制、粘贴与之相类似就不做说明(4) 右键快捷菜单的字体子菜单的创立:字体包括字体的大小和字体的颜色等等/ 设计字体大小class fontsize imple
9、ments ActionListener public void actionPerformed(ActionEvent e) int n;String no;no=JOptionPane.showInputDialog(请输入你想要的字体大小:);n=Integer.parseInt(no);Font ft; ft=new Font(,Font.BOLD,n);aa.setFont(ft);经过用户输入所需的字号的大小来调节字体大小以满足不同需要,/ 设计字体颜色class fontcolor implements ActionListener public void actionPerfo
10、rmed(ActionEvent e) Color a=new Color(0,192,191); JColorChooser c=new JColorChooser(); a=c.showDialog(Bjq.this, 颜色选择框,a); aa.setForeground(a); (5)为鼠标创立监听器。用于用鼠标点击右键时出现快捷菜单:复制、粘贴、字体大小、字体颜色。popup = new JPopupMenu();JMenuItem copy = new JMenuItem(复制);JMenuItem word = new JMenuItem(字体);public void mouse
11、Entered(MouseEvent e) public void mouseExited(MouseEvent e) public void mousePressed(MouseEvent e)public void mouseReleased(MouseEvent e)当单击右键时能够弹出复制、粘贴和字体菜单,实现功能,实现鼠标的控制来完成弹出菜单的操作。(6)为窗体添加监听器当用户按关闭按钮时就能够将窗口关闭,实现了对窗体的控制。/ 关闭窗口protected static final class appCloseL extends WindowAdapter public void w
12、indowClosing(WindowEvent e) System.exit(0); f.setSize(800, 500); f.setVisible(true);(这两个代码是设计窗体的的大小和窗口的可见性。)(7)设计main方法:为整个程序的开始提供了入口,public static void main(String args) JFrame f = new JFrame();Bjq applet = new Bjq();f.setTitle(08通信(2)班骆玉春设计的文本编辑器Bjq);f.setBackground(Color.red);f.getContentPane().a
13、dd(applet, BorderLayout.CENTER);f.addWindowListener(new appCloseL();f.setSize(800, 500);f.setVisible(true);f.pack();为静态的主函数。三、测试效果1:两个菜单项:文件和编辑的截图:2:编辑菜单以及子菜单的截图:3:右键弹出快捷菜单的截图:4:新建并经过快捷键复制和设置字体颜色为红色的截图:5:保存文件并从保存到的目录下打开文件的截图:6:打开其它目录下的文件的截图:7: 设置字体的大小和颜色的截图:四、设计体会Java语言是很神奇的一门课程,我喜欢编程。喜欢最后编完的一刹那的成功,
14、自从我进了学校选择了通信专业后就更加喜欢了,更是备感Java的重要性,天天接触Java时,越来越着迷于它。特别是进行课程设计,我更加深刻体会到了Java的诡异,无法掌控,最后的程序虽没有实现所有功能,但也能够运行了,这次课程设计中我独立完成了程序的绝大多数部分,很开心。不过有太多不会,总是蒙一些东西。有些一知半解的东西还是不了解,有些东西是会用了,但对其工作原理却很模糊。这些都是以后在学Java用Java的路上需要解决的,Java的魅力真的让人着迷。在课程设计的过程我遇到了好多的麻烦,有些是自己的马虎,有些也是因为程序太长有时会出一些小的问题,都是自己不应该发生的。但有些是不能够避免的啊,因此
15、说我们在进行Java课程设计的时候要认真仔细不要只图快,要认真每一个环节的输入,否则会给我们带来许多不必要的麻烦,因此要想做好一个好的完整的Java程序一定要有足够的耐心,只有这样你才会有好的结果,才会感觉到成功的喜悦,理解到认真和粗心的后果。总之,这次设计还是教了我很多,包括做人的道理,以及一些在平时生活中不可能遇见的一些问题,使我领略到一些人生道理,这些是在现实生活中难以解决的,下学期就要考二级,很想学好计算机,更想把Java掌握的更加熟练,因为它总能给我意外的收获,使我对人生有新的认识,让我感受到最后成功那一刻的美妙、开心!结语就用:“谢谢Java!”结束吧!是她给了我对计算机的进一步了
16、解,我更加热爱学习她了。附:源程序代码/Bjq.javaimport java.awt.*;import java.awt.print.*;import java.awt.datatransfer.*;import java.applet.*;import javax.swing.JColorChooser;import javax.swing.event.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import javax.swing.text.*;import javax.swing.colorchoose
17、r.*;public class Bjq extends JPanel private JPopupMenu popupMenu = new JPopupMenu();JTextArea aa = new JTextArea(, 20, 50);/构造一个文本域JScrollPane bb = new JScrollPane(aa);JMenuBar cc = new JMenuBar();/创立一个空的菜单条JMenu file = new JMenu(文件); /创立文件和编辑这两个菜单项JMenu edit = new JMenu(编辑);/ 菜单内容JMenuItem dd;/ 实例化
18、剪切板Clipboard clipbd = getToolkit().getSystemClipboard();/JMenu fileMenu; JPopupMenu jPopupMenuOne; JMenuItem openFile,closeFile,exit; JRadioButtonMenuItem copyFile,pasteFile; ButtonGroup buttonGroupOne; public Bjq() /新建一个内部类class newL implements ActionListener public void actionPerformed(ActionEvent
19、 e) aa.setDocument(new PlainDocument(); / 实现文本文件的打开功能-即文件菜单下的子菜单打开class openL implements ActionListener public void actionPerformed(ActionEvent e) JFileChooser fc = new JFileChooser();int returnVal = fc.showDialog(Bjq.this, 打开);if (returnVal = JFileChooser.APPROVE_OPTION) String file = fc.getSelecte
20、dFile().getPath();if (file = null) return;/ 读取文件try Reader in = new FileReader(file);char buff = new char4096;int nch;while (nch = in.read(buff, 0, buff.length) != -1) aa.setDocument(new PlainDocument();aa.append(new String(buff, 0, nch); catch (IOException io) System.err.println(IOException: + io.g
21、etMessage(); else return;/ 实现文本文件的保存功能-即文件菜单下的子菜单保存class saveL implements ActionListener public void actionPerformed(ActionEvent e) JFileChooser fc = new JFileChooser();int returnVal = fc.showSaveDialog(Bjq.this);if (returnVal = JFileChooser.APPROVE_OPTION) String savefile = fc.getSelectedFile().get
22、Path();if (savefile = null) return; else String docToSave = aa.getText();if (docToSave != null) FileOutputStream fstrm = null;BufferedOutputStream ostrm = null;try fstrm = new FileOutputStream(savefile);ostrm = new BufferedOutputStream(fstrm);byte bytes = null;try bytes = docToSave.getBytes(); catch
23、 (Exception e1) e1.printStackTrace();ostrm.write(bytes); catch (IOException io) System.err.println(IOException: + io.getMessage(); finally try ostrm.flush();fstrm.close();ostrm.close(); catch (IOException ioe) System.err.println(IOException: + ioe.getMessage(); else return;/实现文本文件的退出功能-即文件菜单下的子菜单退出c
24、lass exitL implements ActionListener public void actionPerformed(ActionEvent e) System.exit(0);/ 实现文本文件的粘贴功能-即编辑菜单下的子菜单粘贴class copyL implements ActionListener public void actionPerformed(ActionEvent e) String selection = aa.getSelectedText();StringSelection clipString = new StringSelection(selection
25、);clipbd.setContents(clipString, clipString);/ 粘贴class pasteL implements ActionListener public void actionPerformed(ActionEvent e) Transferable clipData = clipbd.getContents(Bjq.this);try String clipString = (String) clipData.getTransferData(DataFlavor.stringFlavor);aa.replaceRange(clipString, aa.ge
26、tSelectionStart(), aa.getSelectionEnd(); catch (Exception ex) / 设计字体大小class fontsize implements ActionListener public void actionPerformed(ActionEvent e) int n;String no;no=JOptionPane.showInputDialog(请输入你想要的字体大小:);n=Integer.parseInt(no);Font ft; ft=new Font(,Font.BOLD,n);aa.setFont(ft);/ 设计字体颜色clas
27、s fontcolor implements ActionListener public void actionPerformed(ActionEvent e) Color a=new Color(0,192,191); JColorChooser c=new JColorChooser(); a=c.showDialog(Bjq.this, 颜色选择框,a); aa.setForeground(a); / 注册一个事件监听器class jtaL implements ActionListener public void actionPerformed(ActionEvent e) /defi
28、ne popmenu 定义弹出菜单 JMenuItem cut = new JMenuItem(粘贴); JMenuItem FontSize = new JMenuItem(字体大小); JMenuItem FontColor = new JMenuItem(字体颜色);JMenuItem copy = new JMenuItem(复制); popupMenu.add(copy); copy.addActionListener(new copyL(); popupMenu.add(cut); cut.addActionListener(new pasteL(); popupMenu.add(
29、FontSize); FontSize.addActionListener(new fontsize(); popupMenu.add(FontColor); FontColor.addActionListener(new fontcolor(); aa.addMouseListener(new MouseAdapter() public void mousePressed(MouseEvent e)checkForTriggerEvent(e); public void mouseReleased(MouseEvent e)checkForTriggerEvent(e); private v
30、oid checkForTriggerEvent(MouseEvent e) if(e.isPopupTrigger() popupMenu.show(e.getComponent(),e.getX(),e.getY(); ); /文本区添加快捷菜单/ 快捷键设置file.add(dd = new JMenuItem(新建, KeyEvent.VK_N);dd.addActionListener(new newL();file.add(dd = new JMenuItem(打开, KeyEvent.VK_O);dd.addActionListener(new openL();file.add(
31、dd = new JMenuItem(保存, KeyEvent.VK_S);dd.addActionListener(new saveL();file.add(dd = new JMenuItem(退出, KeyEvent.VK_X);dd.addActionListener(new exitL();edit.add(dd = new JMenuItem(复制, KeyEvent.VK_C);dd.addActionListener(new copyL();edit.add(dd = new JMenuItem(粘帖, KeyEvent.VK_P);dd.addActionListener(n
32、ew pasteL();dd.addActionListener(new fontsize(); dd.addActionListener(new fontcolor();/ 设置页面布局风格setLayout(new BorderLayout();file.setMnemonic(KeyEvent.VK_F);cc.add(file);edit.setMnemonic(KeyEvent.VK_E);cc.add(edit);cc.add(Box.createHorizontalGlue();add(cc, BorderLayout.NORTH);add(bb, BorderLayout.SO
33、UTH);aa.getCaret().setVisible(true);aa.setCaretPosition(0);/ 关闭窗口protected static final class appCloseL extends WindowAdapter public void windowClosing(WindowEvent e) System.exit(0);/ 主函数,程序入口public static void main(String args) JFrame f = new JFrame();Bjq applet = new Bjq();f.setTitle(08通信(2)班骆玉春设计的文本编辑器Bjq);f.setBackground(Color.red);f.getContentPane().add(applet, BorderLayout.CENTER);f.addWindowListener(new appCloseL();f.setSize(800, 500);f.setVisible(true);f.pack();