《Java语言程序设计》
课程设计报告
设计题目: 制作一个文本编辑器
分 院: 电信分院
班 级:
姓 名:
学 号:
指导教师: 黄建华
实验地点: 三教机六
课设时间: 20##-12-20——20##-12-25
二OO九年十二月二十五日
《Java语言程序设计课程设计》
目录
一、 设计思路…………………………………………………………………2
二、 设计过程…………………………………………………………………3
三、 测试结果…………………………………………………………………12
四、 心得体会…………………………………………………………………13
五、 程序代码…………………………………………………………………14
一、 设计思路
(一)设计概念
要制作一个文本编辑器,首先得理清思路,要做一个什么样的文本编辑器,做成的编辑器要求要实现哪些功能,要实现这些功能分别需要用到什么方法以及怎样组织编辑器的框架结构等等问题。现把我的设计思路简要介绍如下:
1、明确设计要求
首先要创建了一个窗体,标题为“×××设计的文本编辑器”,设计要求是要编辑文件和编辑这两个菜单项,要求在文件菜单项上添加新建、打开、保存、退出四个下拉子菜单,要求当用户单击新建时就可以新建一个空白文档;当单击打开时可以从已有的目录下打开需要打开的文本文件,在原有文件中可以选择要打开的文件;当单击保存时可以出现保存的路径,选择自己要保存到的路径将文件保存到指定的文件夹中;单击退出菜单时退出文件的下拉菜单。在编辑菜单下的子菜单复制,可以进行对文本的复制。在文本区内要求当单击鼠标右键时可以弹出菜单,要求有两个子菜单为复制和字体,通过单击字体菜单可以实现对字体改变。而且在窗体的右上方有三个按钮可以实现最小化、最大化、和关闭。而且用户也可以根据自己的需要改变窗体的大小。
2、确定设计思路即设计步骤(必须想到要用到哪几个方面的程序、包、方法、以及基本的程序语言)
(1)创建一个窗体,包括构造一个文本域为编辑器各种功能的实现提供一个伸展平台;
(2)新建一个空的菜单条,然后添加菜单项(文件菜单和编辑菜单);
(3)设计程序在菜单项下添加子菜单,文本菜单对应新建、打开、保存和退出,编辑菜单包括的子菜单为复制和粘贴;
(4)添加右键快捷弹出式菜单,包括复制、字体等菜单项。
3、上两步都完成以后,就进入程序的检测运行阶段即所谓的编译运行,看是否符合设计要求,是否达到理想中的那种效果,在测验阶段,要一步一步完善自己的作品直至真正意义上的完成整个设计过程。
(二)流程图
二、设计过程
1、 功能介绍:
通过记事本编辑器可以实现新建、打开、保存文本文件、以及退出;同时也有对字体
的改变、对字的颜色的改变以及复制、粘贴等功能,根据自己的意愿改变窗体,实行对其的最小化、最大化、关闭等等。
2、设计步骤:
import javax.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.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();//创建一个空的菜单条
//创建"文件"和"编辑"这两个菜单项
JMenu file = new JMenu("文件");
JMenu edit = new JMenu("编辑");
(3) 先设计一个匿名内部类,为文件、编辑菜单添加新建和其他下拉子菜单
“新建”子菜单:创建OpenL类实现了ActionLister并实现其读取文件的功能以匿名内部类的形式创建菜单监听器这些代码的作用是实现对新建、保存、打开、退出、复制进行监听,
// 实现文本文件的打开功能----即文件菜单下的子菜单"打开"
class openL implements ActionListener {
public void actionPerformed(ActionEvent e) {
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 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);
}
}通过用户输入所需的字号的大小来调节字体大小以满足不同需要,
// 设计字体颜色
class 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);
}
}
(5)为鼠标创建监听器。用于用鼠标点击右键时出现快捷菜单:复制、粘贴、字体大小、字体颜色。
popup = new JPopupMenu();
JMenuItem copy = new JMenuItem("复制");
JMenuItem word = new JMenuItem("字体");
public void mouseEntered(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 windowClosing(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().add(applet, BorderLayout.CENTER);
f.addWindowListener(new appCloseL());
f.setSize(800, 500);
f.setVisible(true);
f.pack();
}
为静态的主函数。
三、测试效果
1:两个菜单项:文件和编辑的截图:
2:编辑菜单以及子菜单的截图:
3:右键弹出快捷菜单的截图:
4:新建并通过快捷键复制和设置字体颜色为红色的截图:
5:保存文件并从保存到的目录下打开文件的截图:
6:打开其他目录下的文件的截图:
7: 设置字体的大小和颜色的截图:
四、设计体会
Java语言是很神奇的一门课程,我喜欢编程。喜欢最后编完的一刹那的成功,自从
我进了学校选择了通信专业后就更加喜欢了,更是备感Java的重要性,天天接触Java时,
越来越着迷于它。尤其是进行课程设计,我更加深刻体会到了Java的诡异,无法掌控,最
后的程序虽没有实现所有功能,但也可以运行了,这次课程设计中我独立完成了程序的绝大
多数部分,很开心。不过有太多不会,总是蒙一些东西。有些一知半解的东西还是不了解,
有些东西是会用了,但对其工作原理却很模糊。这些都是以后在学Java用Java的路上需
要解决的,Java的魅力真的让人着迷。
在课程设计的过程我遇到了好多的麻烦,有些是自己的马虎,有些也是因为程序太长
有时会出一些小的问题,都是自己不应该发生的。但有些是不可以避免的啊,所以说我们在
进行Java课程设计的时候要认真仔细不要只图快,要认真每一个环节的输入,否则会给我
们带来许多不必要的麻烦,因此要想做好一个好的完整的Java程序一定要有足够的耐心,
只有这样你才会有好的结果,才会感觉到成功的喜悦,理解到认真和粗心的后果。
总之,这次设计还是教了我很多,包括做人的道理,以及一些在平时生活中不可能遇
见的一些问题,使我领略到一些人生道理,这些是在现实生活中难以解决的,下学期就要考
二级,很想学好计算机,更想把Java掌握的更加熟练,因为它总能给我意外的收获,使我
对人生有新的认识,让我感受到最后成功那一刻的美妙、开心!
结语就用:“谢谢Java!”结束吧!是她给了我对计算机的进一步了解,我更加热爱
学习她了。
附:源程序代码
//Bjq.java
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.colorchooser.*;
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;
// 实例化剪切板
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 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.getSelectedFile().getPath();
if (file == null) {
return;
}
// 读取文件
try {
Reader in = new FileReader(file);
char[] buff = new char[4096];
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.getMessage());
}
} 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().getPath();
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 (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;
}
}
}
//实现文本文件的退出功能----即文件菜单下的子菜单"退出"
class 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);
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.getSelectionStart(), 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);
}
}
// 设计字体颜色
class 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) {
}
}
//
//define 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(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 void 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(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(new 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.SOUTH);
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();
}
}