java课程设计报告小组

2023-06-20

报告在写作方面,是有着极为复杂、详细的写作技巧,很多朋友对报告写作流程与技巧,并不是很了解,以下是小编收集整理的《java课程设计报告小组》,仅供参考,希望能够帮助到大家。

第一篇:java课程设计报告小组

Java课程设计报告

课 程 设 计

课程名称 Java语言课程设计 题目名称 人事管理系统的设计与实现 学生学院 应用数学学院 专业班级 学 号 学生姓名 指导教师 刘科峰

2014 年 10 月 29

日 一.设计内容

自学Swing图形界面设计和数据库程序设计。开发用于某单位的人事管理系统。该系统要求实现以下功能:

1.员工信息管理包括:员工信息一览表、新员工的建立、修改 2. 薪资福利管理:考勤与薪资的连动计算、薪资与福利的设置

3. 考勤假期管理:考勤项目录入, 实现考勤信息的查询、统计、汇总 4. 人事报表管理:按照员工性别,数目,薪酬自动生成相关报表, 可自定义统计分析条件并可对历史报表进行管理。

设计亮点

1.null布局方式

Swing图形界面设计中有很多布局方式,通过本次学习了解到了FlowLayout,BorderLayout,GridLayout以及null布局,就这四种布局方式而言,null布局的优点在于可以将组建的位置精准到坐标值,可以把组件放到任意想放置的位置,另外可以通过null去设置组件的大小,相较于其他布局方式来说是一个很大的优势。但同时它的缺点在于不能根据Frame的大小变化而改变位置。

2.组件部分属性的设计

Swing中有很多方法是用来实现组件属性设置的,比如button.setVisible(false);按钮通过调用这个方法实现不可见,这是我此次课程设计中的一个亮点,因为组件是没有设置大小的方法的,只有依靠于相应的布局方式才能改变它的大小,通过设置多几个按钮设为不可见,将所要可见按钮实现大小以及位置的控制是一种很好的方法。

二、设计方案

1主界面(只列出界面设计方面的代码)

JPanel panel=new JPanel(); JTable table=null; JButton ibtn=new JButton("员工信息"); JButton cbtn=new JButton("考勤管理"); JButton mbtn=new JButton("薪资管理"); JButton tbtn=new JButton("人事报表"); ImageIcon rtou = new ImageIcon("rentou.jpg");

JLabel imgLabel=new JLabel(rtou);

//上面代码定义了一个面板与四个标签,并引入了一个图片

panel.setLayout(new FlowLayout()); //设置面板为流布局

panel.add(ibtn); panel.add(cbtn); panel.add(mbtn); panel.add(tbtn); panel.setBackground(Color.GRAY);

//将按钮加到面板中,设置面板为灰色

this.add(imgLabel,BorderLayout.CENTER); this.add(panel,BorderLayout.SOUTH); this.setBounds(300, 180, 600, 350); this.setVisible(true); this.getContentPane().setBackground(Color.GRAY); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /*图片标签以边框布局放置在中间,将面板也以边框布局放置在下面,可见,灰色,点击关闭程序*/

(2)查询员工界面(只列出界面设计方面的代码)

Label idlabel = new JLabel("ID"); JLabel namelabel = new JLabel("姓名"); JLabel bumenlabel = new JLabel("部门"); JLabel zhiweilabel = new JLabel("职位");

JTextField idfiled = new JTextField(8); JTextField namefield = new JTextField(8); JComboBox bumenbox =new JComboBox(); JComboBox zhiweubox = new JComboBox();

JButton btn=new JButton("查询"); JButton ibtn=new JButton("添加")

JPanel spanel=new JPanel(); JPanel vpanel=new JPanel();

/*定义和各个组件,4个标签,两个文本框,两个复选框,两个按钮,两个面板容器*/ spanel.setLayout(new FlowLayout());

vpanel.setLayout(new FlowLayout(FlowLayout.CENTER,45,25));

bumenbox.addItem("");

bumenbox.addItem("管理部");

bumenbox.addItem("生产部");

bumenbox.addItem("业务部");

zhiweubox.addItem("");

zhiweubox.addItem("部长");

zhiweubox.addItem("副部长");

zhiweubox.addItem("普工");

spanel.add(idlabel);

spanel.add(idfiled);

spanel.add(namelabel);

spanel.add(namefield);

spanel.add(bumenlabel);

spanel.add(bumenbox);

spanel.add(zhiweilabel);

spanel.add(zhiweubox);

spanel.add(btn);

vpanel.add(ibtn);

spanel.setBackground(Color.GRAY);

vpanel.setBackground(Color.GRAY);

//将各个组件放进对应面板,设置相关属性

this.add(spanel,BorderLayout.NORTH);

this.add(vpanel,BorderLayout.SOUTH);

this.setBounds(300, 180, 600, 350);

this.setVisible(true);

this.getContentPane().setBackground(Color.GRAY);

//将面板以边框布局放入框架中,设置属性 (3)增加员工信息界面

JPanel panel=new JPanel();

JLabel timeLabel=new JLabel("时间"); JLabel allnumLabel=new JLabel("员工总数");

JLabel staffMoLabel=new JLabel("考勤"); JLabel entryLabel=new JLabel("全勤");

JLabel quitLabel=new JLabel("缺勤"); JLabel mwLabel=new JLabel("性别比例");

JLabel manLabel=new JLabel("男");

JLabel womanLabel=new JLabel("女"); JLabel proportionLabel=new JLabel("男女比例"); JLabel distributionLabel=new JLabel("人员部门分布"); JLabel mdpLabel=new JLabel("管理部");

JLabel pdpLabel=new JLabel("生产部"); JLabel bdpLabel=new JLabel("业务部"); JLabel xmLabel=new JLabel("项目"); JLabel xzLabel=new JLabel("细则"); JLabel stLabel=new JLabel("数据统计");

JTextField timeFiled = new JTextField(8);

JTextField allnumFiled = new JTextField(8); JTextField entryFiled = new JTextField(8); JTextField quitFiled = new JTextField(8); JTextField manFiled = new JTextField(8); JTextField womanFiled = new JTextField(8); JTextField proportionFiled = new JTextField(8); JTextField mdpFiled = new JTextField(8); JTextField pdpFiled = new JTextField(8); JTextField bdpFiled = new JTextField(8); // 定义所需组件

public Selectrenshi(String tablename) {

super("人事管理");

panel.setLayout(null);

panel.setBackground(Color.GRAY);

panel.add(xmLabel);

panel.add(xzLabel);

panel.add(stLabel);

panel.add(timeLabel);

panel.add(timeFiled);

panel.add(allnumLabel);

panel.add(allnumFiled);

panel.add(staffMoLabel);

panel.add(entryLabel);

panel.add(entryFiled);

panel.add(quitLabel);

panel.add(quitFiled);

panel.add(mwLabel);

panel.add(manLabel);

panel.add(manFiled);

panel.add(womanLabel);

panel.add(womanFiled);

panel.add(proportionLabel);

panel.add(proportionFiled);

panel.add(distributionLabel);

panel.add(mdpLabel);

panel.add(mdpFiled);

panel.add(pdpLabel);

panel.add(pdpFiled);

panel.add(bdpLabel);

panel.add(bdpFiled);

//将组件加到相应面板中

xmLabel.setBounds(120,20,100,30);

xzLabel.setBounds(240,20,100,30);

stLabel.setBounds(360,20,100,30);

timeLabel.setBounds(120,50,100,30);

timeFiled.setBounds(360,50,100,30);

allnumLabel.setBounds(120,100,100,30);

allnumFiled.setBounds(360,100,100,30);

staffMoLabel.setBounds(120,150,100,30);

entryLabel.setBounds(240,150,100,30);

entryFiled.setBounds(360,150,100,30);

quitLabel.setBounds(240,200,100,30);

quitFiled.setBounds(360,200,100,30);

mwLabel.setBounds(120,250,100,30);

manLabel.setBounds(240,250,100,30);

manFiled.setBounds(360,250,100,30);

womanLabel.setBounds(240,300,100,30);

womanFiled.setBounds(360,300,100,30);

proportionLabel.setBounds(240,350,100,30);

proportionFiled.setBounds(360,350,100,30);

distributionLabel.setBounds(120,400,100,30);

mdpLabel.setBounds(240,400,100,30);

mdpFiled.setBounds(360,400,100,30);

pdpLabel.setBounds(240,450,100,30);

pdpFiled.setBounds(360,450,100,30);

bdpLabel.setBounds(240,500,100,30);

bdpFiled.setBounds(360,500,100,30);

//采用null布局,设置组建坐标值

this.add(panel,BorderLayout.CENTER);

this.setBounds(300, 100, 600, 600);

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.getContentPane().setBackground(Color.GRAY);

//将面板放入框架,设置相应属性 (4)员工考勤界面

JLabel idlabel = new JLabel("ID"); JComboBox idbox =new JComboBox(); CheckTable model = null;

JButton wbtn=new JButton("修改");

JButton cbtn=new JButton("查询"); JButton mbtn=new JButton("创建薪资表"); JButton rbtn=new JButton("创建人事表");

JScrollPane scrollpane = null; JPanel spanel=new JPanel(); JPanel vpanel=new JPanel(); JTable table=null; spanel.add(idbox); panel.add(wbtn); spanel.add(cbtn); vpanel.add(mbtn); vpanel.add(rbtn); spanel.setBackground(Color.GRAY); vpanel.setBackground(Color.GRAY); this.add(spanel,BorderLayout.NORTH); this.add(vpanel,BorderLayout.SOUTH); this.setBounds(300, 180, 600, 350); this.setVisible(true); this.getContentPane().setBackground(Color.GRAY);

(5)选择考勤表界面

JLabel checklabel = new JLabel("选择考勤表"); JLabel newlabel = new JLabel("创建考勤表"); JComboBox timebox =new JComboBox(); JTextField newfield = new JTextField(); JButton btn=new JButton("确认"); JButton nbtn=new JButton("创建"); JPanel spanel=new JPanel(); spanel.add(checklabel);

spanel.add(timebox);

spanel.add(btn);

spanel.add(newlabel);

spanel.add(newfield);

spanel.add(nbtn);

checklabel.setBounds(30,90,100,30);

timebox.setBounds(180,90,100,30);

btn.setBounds(360,90,100,30);

newlabel.setBounds(30,200,100,30);

newfield.setBounds(180,200,100,30);

nbtn.setBounds(360,200,100,30);

this.add(spanel);

this.setBounds(300, 180, 600, 350);

this.setVisible(true);

三、结果和数据处理

四、结论

1.Swing图形界面

图形用户界面(GUI)是程序不可或缺的一部分,它便于用户和程序的交互。在Swing界面中是以Frame为框架,采用合理的布局方式(FlowLayout,BorderLayout,GridLayout,null),将Panel加入框架之中,而实现界面的各个组件将调用各种方法设置自身属性实行可视化界面以及加入到面板之中。再通过事件监听器实现事件的监听预处理机制。

2.数据库

在这次课程设计中哦我主要负责Swing图像界面,对于数据库只做了最简单的了解。程序中采用了最流行的关系型数据库mysql,雪化了mysql的建立,删除,与修改以及使用sql语言对数据库进行一些简单的操作,将按钮等设置的监听事件与数据库相连接。

五、问题与讨论

1. 组件的方法调用

在这次课程设计中,用到了很多的组件,例如Button,Jlabel,TextField,ComBox,等。Swing图形界面也确实提供了很多方法去设置相关组件的属性,例如label.setVisible(false);设置标签不可见等很多方法,只要查看API文档几乎就能实现很多功能,但是对于按钮等最常见的组件来说设置大小如果不依靠相关布局方式很难设置,我在程序中之所以运用了很多的bull布局方式就是为了实现组件大小的设置,如果说能有一个方法直接设置组件大小而不受其他组件或容器影响就能使代码很简洁了。 2. 相对布局

在编写图像界面的程序的时候,我用了很多的布局方式,有FlowLayout,BorderLayout,GrirLayout,null等,其中null布局用的最多。null布局的优点在于可以将组建的位置精准到坐标值,可以把组件放到任意想放置的位置,另外可以通过null去设置组件的大小,相较于其他布局方式来说是一个很大的优势。但同时它的缺点在于不能根据Frame的大小变化而改变位置。其他三种布局方式虽然实现了岁Frame大小变动而改变组件大小及位置但是不容易控制,如果null布局能实现相对布局就是很好的一种布局方式了。

第二篇:java课程设计报告—计算器

1 --计算器 Java实习报告

目录

一、课程设计目的 ................................................................................................................. 2

二、课程设计任务..................................................................................................................2

2.1、设计任务 ................................................................................................................ 2

2.2、课程设计要求: .................................................................................................... 2

2.3、需求分析 ................................................................................................................ 2

三、开发工具与平台............................................................................................................. 3

3.1、开发工具 ................................................................................................................ 3

3.2、开发平台 ................................................................................................................ 3

四、设计思路..........................................................................................................................4

4.1、 界面设计.................................................................................................................4

4.2.1、逻辑设计 ............................................................................................................. 4

4.2.2、程序流程图...........................................................................................................5

4.2.3、主要代码展示及说明............................................................................................5

4.3、 程序测试 ............................................................................................................ 10

五、实验小结 ........................................................................................................................11

六、附录 (程序代码) .......................................................................................................... 12

第 1

2 --计算器 Java实习报告

一、课程设计目的

1、熟练掌握java面向对象编程。

2、选择合适的数据结构实现需求。

3、熟练使用各种控制结构。

4、GUI组件、事件处理技术。

二、课程设计任务

2.1、设计任务

设计一个简易的计算器,可以进行四则运算:加、减、乘、除等(限于十进制下)

程序要求:

(1)应具有相应的界面,可参考Windows操作系统自带的计算器界面。 (2)操作符号定为:“+”,“-”,“*”,“/”,“+/-”等。(按国际惯例设计) (3)用户通过点击程序界面上按钮,实现数字、运算符的输入操作。 (4)以上部分为必须完成的内容。 选作部分:

(1)具有操作符号“1/x”,“sqrt”(开方),“.”(小数功能)等。

2.2、课程设计要求:

(1)应用自己所学课程知识完成对计算器的基本任务。

(2)查阅相关资料,学习和掌握项目中涉及的新知识,提高自学能力。

(3)通过应用java程序编写计算器来提升自己对简单的图形界面有一定的掌握和了解。

2.3、需求分析

1.设计的计算器可以完成加法、减法、乘法、除法的简单运算。 2.实现一些简单的扩展运算,如:正负号、倒数、退格、清零等功能。

第 2

3 --计算器 Java实习报告3.添加小数点功能,用以实现浮点型数据的计算。

4.使用布局管理器设计一个计算器的界面,使用事件监听器处理数据的输入,并完成相关的计算。

三、开发工具与平台

3.1、开发工具

Microsoft Windows 7旗舰版

3.2、开发平台

JDK1.6.0-02 和UE编译器

第 3

4 --计算器 Java实习报告

四、设计思路

4.1、界面设计:(如图3-1)

图3-1

4.2.1、逻辑设计:

(1) 根据所设计出来的界面,首先要设计其GUI界面,总体界面有一个文本框,20个按钮,总体界面用BorderLayout布局,文本框放置在最NORTH,然后0到9以及+,-,*,/等按钮放置到一个面板Panel中,完成界面设计。

(2) 设计计算流程,首先点击数字按钮时,将按钮数值添加到文本框当中,并将该数值保存到一个字符串中,再次点击数字按钮时,将之前保存的字符串与新的数值拼接起来,再添加到文本框当中,直到点击运算符按钮时,将文本框当中的字符串保存在一个字符串变量中,然后重置文本框内容,将运算符号显示到文本框中,随后输入第二个计算数据时,用同样的办法保存数据,最后通过控制“=”运算符先将字符串数据转化成双精度类型,然后计算出结果并显示到文本框当中。

(3) 基本运算设计完成以后则开始考虑其他个别功能的实现,例如倒数、清零、退格等功能的实现,清零直接重置文本框内容,退格功能则采用substring函数截取字符串长度。

第 4

5 --计算器 Java实习报告

4.2.2、程序流程图:

4.2.3、主要代码展示及说明: 总体代码的设计:

程序采用继承windowadapter类,新建Jframe窗体,利用数组来定义JBotton按钮,同时利用数组注册监听,采用4行5列网格布局,完成计算器界面的基本设置,在窗体的正常关闭方面,采用匿名类实现窗体的正常关闭。最后对按钮进行计算分析,分别设定输入数据的A类、运算符控制的Opertion类,退格功能的BackSpace类、计算结果的Result类等等,一步步实现计算器的基本功能!

(1)类A的设计(数据的输入)

class A implements ActionListener { public void actionPerformed(ActionEvent e) {

String a = Jtext.getText();

String s = e.getActionCommand();

if(a.equals("0.")||a.equals("+")||a.equals("-")||a.equals("*")||a.equals("/"))

第 5

6 --计算器 Java实习报告

}

} Jtext.setText(s); else { if(flag2) {

Jtext.setText(s);

flag2=false; } else

Jtext.setText(a+s); }

功能解释:程序开始时,程序初始化文本框的内容为“0.”,点击数字按钮,则调用类A,首先用a来获取当前文本框内容,s来获取按钮数值,然后进行判断,若a的值为上述代码的值则输出s的值,再次点击数字按钮时,再次调用A类,此时a的值为上次输入的s值,第一个if语句不满足,执行下个if语句if(flag2),flag2初始值为false,该语句的功能是在执行了“=”号按钮时,防止新的数字按钮的值合并到到已经得出的结果上,例如:12+12=24,此时再点击数字按钮3时,则文本框内容被重置,输出数值3,而不是243,如果if(flag2)不满足,则将字符串a和s合并并输出,得出第一个要计算的数据。

(2)类Opertion的设计:(运算符的控制)

class Opertion implements ActionListener { public void actionPerformed(ActionEvent e) {

cal=e.getActionCommand();

if(flag1==true)

x=Jtext.getText();

Jtext.setText(cal);

flag1=false; }

第 6

7 --计算器 Java实习报告 }

功能解释:当点击运算符控制按钮时,首先将运算符的数值赋值给cal(初值为空),紧接着进行判断,flag1初值为ture,该类的作用为在点击运算符按钮时,将计算的第一个数据保存在x字符串变量当中,然后将文本框内容重置为点击的运算符的数值,类的结尾将flag1赋值为false,防止再次点击运算符按钮时改变了x的值。

(附:此时文本框内容为运算符的值,输入第二个计算数据时,点击数字按钮,则再次调用A类,此时满足A类中第一个if语句,文本框内容被重置为数字按钮的值,接下来与获取第一个计算数据步骤一样,直到点击“=”号运算符为止!)

(3)类Result的设计:(计算并输出结果)

class Result implements ActionListener //计算并显示结果 { public void actionPerformed(ActionEvent e) {

double num1;

num1=Double.parseDouble(x);

y=Jtext.getText();

double num2;

num2=Double.parseDouble(y);

double result=0;

if(num2!=0)

{

if(cal.equals("+"))

result=num1+num2;

if(cal.equals("-"))

result=num1-num2;

if(cal.equals("*"))

result=num1*num2;

String s1=Double.toString(result);

Jtext.setText(s1);

}

if(cal.equals("/"))

第 7

8 --计算器 Java实习报告

} {

if(num2==0)

Jtext.setText("除数不能为0");

else

{

result=num1/num2;

String s1=Double.toString(result);

Jtext.setText(s1);

} }

flag1=true;

flag2=true; } 功能解释:首先定义两个Double型num1,num2,将之前保存的第一个计算数据x强制转换为Double型后赋值给num1,接着用字符串变量y来获取当前文本框的内容,即第二个计算数据的值,同样再将其强制转换Double型后赋值给num2,然后进行运算符判断,对cal的值进行比较,然后进行相应的计算,将计算的结果转换成字符串后将其输出到文本框中,在类的最后将flag

1、flag2赋值为true,作用是将计算的结果当作第二次计算的数据进行再运算,即将结果重新赋值给x作为第一个计算数据! (附:在此类中还考虑了当除数为零的情况。)

(4)类BackSpace的设计:(功能类—退格)

class BackSpace implements ActionListener { public void actionPerformed(ActionEvent e) {

String s = e.getActionCommand();

String s1 = Jtext.getText();

if(s.equals("退格"))

s1=new String (s1.substring(0,s1.length()-1));

Jtext.setText(s1); } }

第 8

9 --计算器 Java实习报告

功能解释:这是计算器附加功能的实现,这里只介绍退格功能,像正负号、求倒数、清零等功能相似,所以就不再一一介绍。首先获取退格按钮的命令值赋给s,然后获取当前文本框的内容,即输入的数据,将其赋给s1,接着进行判断,利用substring函数将s1字符串截取为从第一个字符至倒数第二个字符为止的字符串并重新赋值给s1,再将其输出到文本框,实现退格的功能。

第 9

页 10 --计算器 Java实习报告

4.3、 程序测试

1.简单的运算:(以加法为例:123+456)

分析:计算的结果为579.0,为双精度型,计算的结果被设置在文本框的最右端,该计算器的一个特点是可直接在文本框中输入数据以及进行更改。

2.倒数的运算:(以123为例)

分析:输出的结果如图所示,倒数功能实现,计算时,不仅是结果,输入的数据同样可以先实现倒数功能后再进行相应的计算,没有影响!

3.退格的运算:(以123为例)

分析:输出的结果如图所示,本计算器退格键有一个特点是,就算是是计算后得出的结果也能实现退格,缺点是不能很好的处理小数点的问题,因为小数点也是字符串的一部分。

第 10

11 --计算器 Java实习报告

4.正负号的运算:(以123为例)

分析:输出的结果如图所示,正负号添加能够很好的实现,但可以进行一些改进,比如在计算过程当中直接点击负号运算符输入负数进行计算!

5.总体分析:

该计算器基本运算没有问题,清零、正负号、求倒数、退格功能都能很好的实现,总体能完成一个计算器的基本功能,但仍有许多地方需要改进,比如小数点的实现所存在的一些问题,虽然在基本的运算过程当中不会造成太大影响,但这依然不能认为是一个很好的计算器,同时,在另一方面,该计算器还没能很好的实现连续计算的功能,必须每次按下等号按钮计算出结果后才能用产生的结果接着进行下一次的计算,改进的方法是在运算符上同时注册Result类,让运算符同时拥有计算结果的功能。

五、实验小结

本次课程设计到此算是告一段落了,经过这次的学习,我学到了很多东西,在此基础上更加巩固了自己对java的认识与了解。

在做本项目是时候,会遇到很多小问题,比如说,在整个运算过程中要如何确保输入的计算数据哪个是第一个计算数据的,哪个是第二个计算

第 11

12 --计算器 Java实习报告数据的,同时也要区分运算符,因为该计算器程序应用的都是利用字符串来完成计算的,而且不能重复输出运算符,更不能将运算符错误的存储在了第一个计算数据的数值中,也得考虑到万一不小心重复点击了运算符按钮会不会造成第一个计算数据的重新赋值等等问题,最后想到利用布尔类型来很好的控制运算符的应用!

此次课程设计让我更了解熟悉了Java中的图形用户界面和它的编程方式。在完成课题的过程中也不断充实了自己,学习到了很多以前没有学习到的知识,收获很大。最大的收获就是对大学学习的总结和培养了解决困难的信心和能力,使我对所学知识能够融会贯通,又不断丰富了新知识。Java计算器设计使得我们对所学的专业课有了更为深刻的认识,使得知识得到了巩固和提高。

在接下来的时间里,我觉得我要更加努力的往深一层次的方面看齐,了解更多有关java的知识,对java有更深一步的了解,我会一步一步的走下去!

六、附录 (程序代码) import java.awt.*; import javax.swing.*; import java.awt.event.*;

public class TheCalculator extends WindowAdapter

//程序框架继承自WindowAdapter类 { private JTextField Jtext=new JTextField("0."); private JFrame f=new JFrame("计算器-赵磊"); private String x=""; private String y=""; private String cal=""; private boolean flag1=true; private boolean flag2=false;

public void init() //初始化

{

String[] buttonValue = new String[]{"1","2","3","+","C","4","5","6","-","退格

第 12

13 --计算器 Java实习报告","7","8","9","*","1/x","0","+/-",".","/","="};

Container contain = f.getContentPane();

JPanel Jpan = new JPanel();

JButton[] Jb=new JButton[20];

contain.setLayout(new BorderLayout()); //采用4行5列的网格布局

Jpan.setLayout(new GridLayout(4,5));

Jtext.setHorizontalAlignment(JTextField.RIGHT);

contain.add(Jtext,"North");

contain.add(Jpan);

A num=new A(); //数据

Result re=new Result(); //结果

Opertion op=new Opertion(); //运算符

Clear cl=new Clear(); //清零

BackSpace back=new BackSpace(); //退格

CountDown count_d=new CountDown(); //倒数

Strains stra=new Strains(); //相反数

for(int i = 0 ; i

{

Jb[i] = new JButton (buttonValue[i]);

Jpan.add(Jb[i]);

if(i==3 || i==8 || i==13 || i==18)

Jb[i].addActionListener(op);

if(i==0 || i==1 || i==2 || i==5 || i==6 || i==7|| i==10 || i==11 || i==12 || i==15 || i==17)

Jb[i].addActionListener(num);

if((i==3||i==4||i==8||i==9)||((i>12)&&(i<=19))&&i!=15)

Jb[i].setForeground(new Color(255, 0, 0));

else

Jb[i].setForeground(new Color(0, 0, 255)); //控制按钮字体颜色

}

Jb[4].addActionListener(cl);

Jb[9].addActionListener(back);

Jb[14].addActionListener(count_d);

Jb[16].addActionListener(stra);

Jb[19].addActionListener(re);

f.setSize(320,240);

f.setVisible(true);

f.addWindowListener(

//采用匿名类实现窗口的正常关闭

new WindowAdapter()

第 13

14 --计算器 Java实习报告

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}); } class A implements ActionListener //输入数据 { public void actionPerformed(ActionEvent e) {

String a = Jtext.getText();

String s = e.getActionCommand();

if(a.equals("0.")||a.equals("+")||a.equals("-")||a.equals("*")||a.equals("/"))

Jtext.setText(s);

else

{

if(flag2)

{

Jtext.setText(s);

flag2=false;

}

else

Jtext.setText(a+s);

} } } class Opertion implements ActionListener { public void actionPerformed(ActionEvent e) {

cal=e.getActionCommand();

if(flag1==true)

x=Jtext.getText();

Jtext.setText(cal);

flag1=false; } }

第 14

15 --计算器 Java实习报告

class Clear implements ActionListener //清零功能 { public void actionPerformed(ActionEvent e) {

Jtext.setText("0."); } } class CountDown implements ActionListener //求倒数类 { public void actionPerformed(ActionEvent e) {

String s = e.getActionCommand();

String s1 = Jtext.getText();

if(s.equals("1/x"))

s1 = new String (""+1/Double.parseDouble(s1));

Jtext.setText(s1); } } class Strains implements ActionListener //求相反数类 { public void actionPerformed(ActionEvent e) {

String s = e.getActionCommand();

String s1 = Jtext.getText();

if(s.equals("+/-"))

s1=new String (""+(0-Double.parseDouble(s1)));

Jtext.setText(s1); } } class BackSpace implements ActionListener //退格功能 { public void actionPerformed(ActionEvent e) {

String s = e.getActionCommand();

String s1 = Jtext.getText();

if(s.equals("退格"))

s1=new String (s1.substring(0,s1.length()-1));

Jtext.setText(s1); }

第 15

16 --计算器 Java实习报告

} class Result implements ActionListener //计算并显示结果 { public void actionPerformed(ActionEvent e) {

double num1;

num1=Double.parseDouble(x);

y=Jtext.getText();

double num2;

num2=Double.parseDouble(y);

double result=0;

if(num2!=0)

{

if(cal.equals("+"))

result=num1+num2;

if(cal.equals("-"))

result=num1-num2;

if(cal.equals("*"))

result=num1*num2;

String s1=Double.toString(result);

Jtext.setText(s1);

}

if(cal.equals("/"))

{

if(num2==0)

Jtext.setText("除数不能为0");

else

{

result=num1/num2;

String s1=Double.toString(result);

Jtext.setText(s1);

}

}

flag1=true;

flag2=true; } } public static void main(String[] args) //main方法 {

第 16

17 --计算器 Java实习报告

}

} TheCalculator count=new TheCalculator(); count.init();

第 17

第三篇:五子棋JAVA语言课程设计报告

《Java语言程序设计》

课程设计报告

学 院: 信息科学技术学院 班 级: 软件技术2班 姓 名: 王更新 学 号: 1108900505 指导教师: 郭韶升 课设时间: 2014-03-17 至2014-03-26

二O一四 年 三月 二十六 日

目 录

一、设计要求…………………………………………....2

二、设计步骤…………………………………………....2 2.1程序流程图………………………….…………...2 2.2程序的功能分配……………………….………...3

三、设计正文…………………………………………....6 3.1创建棋盘类……………………………………….6 3.2判断输赢功能实现……………………………….9 3.3测试结果……………………………………….....9

四、心得体会…………………………………………...12

五、参考文献…………………………………………...12 附录 (源代码)……………………………………….13

一、课程设计要求

设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能: 1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示

并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。 最后判断某一方是否为五子连珠。

实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌(执黑、执白)。

(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);

二、设计步骤

2.1程序流程图

2.2 程序的功能分配

a. 棋盘的绘制

public void draw_qipan(Graphics G) //画棋盘 15*15{

G.setColor(Color.lightGray);

G.fill3DRect(10,10,300,300,true);

G.setColor(Color.black);

for(int i=1;i<16;i++){

G.drawLine(20,20*i,300,20*i);

G.drawLine(20*i,20,20*i,300);

} } b. 添加按钮

Button b1=new Button("开始"); Button b2=new Button("重置游戏"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); public void init(){

ckbHB[0]=new Checkbox("执白",ckgHB,false);

ckbHB[1]=new Checkbox("执黑",ckgHB,false);

ckbHB[2]=new Checkbox("观看",ckgHB, false); }

c. 鼠标棋子的触发事件

public void mouseClicked(MouseEvent e) {

Graphics g=getGraphics();

int x1,y1;

x1=e.getX();

y1=e.getY();

if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) {

return;

}

if (x1%20>10) {

x1+=10;

}

if(y1%20>10) { y1+=10;

}

x1=x1/20*20;

y1=y1/20*20;

set_Qizi(x1,y1);

m*=(-1); }

d. 按钮的触发事件

public void actionPerformed(ActionEvent e) {

Graphics g=getGraphics();

if (e.getSource()==b1) {

Game_start();

}

else{

Game_re();

}

if(e.getSource()==exist){

Game_re();

lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");

intGame_Start=0;

}

e. 判断落子的位置及画出相应的黑白棋子 public void set_Qizi(int x,int y) //落子{

if (intGame_Start==0) //判断游戏未开始{

return;

}

if (intGame_Body[x/20][y/20]!=0) {

return;

}

Graphics g=getGraphics();

if (color_Qizi==1)//判断黑子还是白子{

g.setColor(Color.black);

color_Qizi=0;

}

else{

g.setColor(Color.white);

color_Qizi=1;

}

g.fillOval(x-10,y-10,20,20);

intGame_Body[x/20][y/20]=color_Qizi+1; }

f. 判断胜负

if (Game_win_1(x/20,y/20)) //判断输赢1{

lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

intGame_Start=0;

}

if (Game_win_2(x/20,y/20)) //判断输赢2{

lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

intGame_Start=0; } if (Game_win_3(x/20,y/20)) //判断输赢3{ lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); intGame_Start=0; } if (Game_win_4(x/20,y/20)) //判断输赢4{ lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

intGame_Start=0; } }

三、设计正文

3.1创建棋盘类

Public class WcyChess extends Applet ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子

int intGame_Start=0;//游戏开始标志 0未开始 1游戏中

int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态

int m=-1; Button b1=new Button("开始"); Button b2=new Button("重置游戏"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); CheckboxGroup ckgHB=new CheckboxGroup(); NetchatClient chat=new NetchatClient(); public void init(){

setLayout(null);

addMouseListener(this);

add(b1);

b1.setBounds(330,50,80,30);

b1.addActionListener(this);

add(b2);

b2.setBounds(330,90,80,30);

b2.addActionListener(this);

ckbHB[0]=new Checkbox("执白",ckgHB,false);

ckbHB[0].setBounds(320,20,60,30);

ckbHB[1]=new Checkbox("执黑",ckgHB,false);

ckbHB[1].setBounds(380,20,60,30);

ckbHB[2]=new Checkbox("观看",ckgHB, false);

add(ckbHB[0]);

add(ckbHB[1]);

add(ckbHB[2]);

ckbHB[0].addItemListener(this);

ckbHB[1].addItemListener(this);

add(lblWin);

lblWin.setBounds(330,180,80,30);

lblWin.setBackground(Color.red);

lblWin.setText("胜利者!");//没有显示?

ckbHB[2].setBounds(440, 20,60, 30);

add(exist);

exist.setBounds(330,130,80,30);

implements

//

exist.addActionListener(this); add(chat);chat.setBounds(20, 500, 300, 300); chat.frame(); chat.setVisible(true); Game_start_csh(); setSize(500,600); setVisible(true); } public void itemStateChanged(ItemEvent e) { if (ckbHB[0].getState()) //选择黑子还是白子{

color_Qizi=0; } else{

color_Qizi=1; } } public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e) { Graphics g=getGraphics(); int x1,y1; x1=e.getX(); y1=e.getY(); if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) {

return; } if (x1%20>10) {

x1+=10; } if(y1%20>10) {

y1+=10; } x1=x1/20*20; y1=y1/20*20; set_Qizi(x1,y1); m*=(-1); } public void actionPerformed(ActionEvent e) { Graphics g=getGraphics(); if (e.getSource()==b1) {

Game_start(); } else {

Game_re(); }

} if(e.getSource()==exist){

Game_re();

lblWin.setText(Get_qizi_color(color_Qizi)+"输了!");

intGame_Start=0; } } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void paint(Graphics g) { draw_qipan(g);

3.2判断输赢功能实现

if (Game_win_1(x/20,y/20)){ //判断输赢1

lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

intGame_Start=0; } if (Game_win_2(x/20,y/20)){ //判断输赢2

lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

intGame_Start=0; }

if (Game_win_3(x/20,y/20)) //判断输赢3{

lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

intGame_Start=0; }

if (Game_win_4(x/20,y/20)) //判断输赢4{

lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");

intGame_Start=0; }

3.3 测试结果

a. 进入游戏界面

游戏开始的界面有三个选择项,用户可以选择相应的角色,选择 完毕后点击开始进入游戏。

b. 选择角色,开始下棋

首先达到五个棋子连在一块的赢了,并在红色区域显示谁赢了! c. 下完后,重新开始

下完一盘后游戏停止,点击重新开始,界面回到初始界面,选择角色继续游戏.

d.游戏中点退出,自动判输

在下棋的过程当中谁中途退出,即点击退出,系统自动判断谁输

四、课程设计心得体会

通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。它还让我学会了在网上查阅那些无限的资料。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如用户界面设计不够美观,异常出错处理比较差等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。

五、参考文献

1. 吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社 2. 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社 3.丁振凡 Java 语言实用教程 :北京邮电大学出版社

附录 (源代码)

import java.net.*; import java.io.*; import java.applet.*; import java.awt.*; import java.awt.event.*; import java.applet.Applet; import java.awt.Color; Public class wuziqi extends Applet implements ActionListener,MouseListener,MouseMotionListener,ItemListener{ int color_Qizi=0;//旗子的颜色标识 0:白子 1:黑子 int intGame_Start=0;//游戏开始标志 0未开始 1游戏中

int intGame_Body[][]=new int[16][16]; //设置棋盘棋子状态

int m=-1; Button b1=new Button("开始"); Button b2=new Button("重新开始"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); CheckboxGroup ckgHB=new CheckboxGroup(); public void init(){

setLayout(null);

addMouseListener(this);

add(b1);

b1.setBounds(330,50,80,30);

b1.addActionListener(this);

add(b2);

b2.setBounds(330,90,80,30);

b2.addActionListener(this);

ckbHB[0]=new Checkbox("执白",ckgHB,false);

ckbHB[0].setBounds(320,20,60,30);

ckbHB[1]=new Checkbox("执黑",ckgHB,false);

ckbHB[1].setBounds(380,20,60,30);

ckbHB[2]=new Checkbox("观看",ckgHB, false);

add(ckbHB[0]);

add(ckbHB[1]);

add(ckbHB[2]);

ckbHB[0].addItemListener(this);

ckbHB[1].addItemListener(this);

add(lblWin);

lblWin.setBounds(330,180,80,30);

lblWin.setBackground(Color.red);

e.getY()<20 || e.getY()>300){

lblWin.setText("胜利者!");//没有显示?

ckbHB[2].setBounds(440, 20,60, 30); add(exist);

exist.setBounds(330,130,80,30); exist.addActionListener(this); Game_start_csh(); setSize(500,600); setVisible(true); }

public void itemStateChanged(ItemEvent e){ if (ckbHB[0].getState()) //选择黑子还是白子 {

color_Qizi=0; } else {

color_Qizi=1; } }

public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e){ Graphics g=getGraphics(); int x1,y1; x1=e.getX(); y1=e.getY();

if (e.getX()<20 || e.getX()>300 ||

return; }

if (x1%20>10){

x1+=10; }

if(y1%20>10){

y1+=10; }

x1=x1/20*20; y1=y1/20*20; set_Qizi(x1,y1); m*=(-1) }

public void actionPerformed(ActionEvent e){ Graphics g=getGraphics(); if (e.getSource()==b1){

Game_start();

} else{

// 输了!");

赢了!");

Game_re(); }

if(e.getSource()==exist){

Game_re();

color_Qizi=m;

lblWin.setText(Get_qizi_color(color_Qizi)+"

intGame_Start=0;

}

}

public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseDragged(MouseEvent e){} public void mouseMoved(MouseEvent e){} public void paint(Graphics g){ draw_qipan(g); }

public void set_Qizi(int x,int y){ //落子

if (intGame_Start==0) {//判断游戏未开始

return; }

if (intGame_Body[x/20][y/20]!=0){

return; }

Graphics g=getGraphics();

if (color_Qizi==1){//判断黑子还是白子

g.setColor(Color.black);

color_Qizi=0; } else{

g.setColor(Color.white);

color_Qizi=1; }

g.fillOval(x-10,y-10,20,20);

intGame_Body[x/20][y/20]=color_Qizi+1; if (Game_win_1(x/20,y/20)){ //判断输赢1 lblWin.setText(Get_qizi_color(color_Qizi)+"

intGame_Start=0;

了!");

赢了!");

赢了!");

15*15

}

if (Game_win_2(x/20,y/20)){ //判断输赢2{

lblWin.setText(Get_qizi_color(color_Qizi)+"赢

intGame_Start=0; }

if (Game_win_3(x/20,y/20)){ //判断输赢3

lblWin.setText(Get_qizi_color(color_Qizi)+"

intGame_Start=0; }

if (Game_win_4(x/20,y/20)){ //判断输赢4

lblWin.setText(Get_qizi_color(color_Qizi)+"

intGame_Start=0; } }

public String Get_qizi_color(int x) {

if (x==0) {

return "黑子"; } else {

return "白子"; } }

public void draw_qipan(Graphics G){ //画棋盘 G.setColor(Color.lightGray);

G.fill3DRect(10,10,300,300,true); G.setColor(Color.black); for(int i=1;i<16;i++){

G.drawLine(20,20*i,300,20*i);

G.drawLine(20*i,20,20*i,300); } }

public void Game_start(){ //游戏开始

intGame_Start=1;

Game_btn_enable(false);

b2.setEnabled(true); } public void Game_start_csh() {//游戏开始初始化

intGame_Start=0;

Game_btn_enable(true);

b2.setEnabled(false);

ckbHB[0].setState(true);

for (int i=0;i<16 ;i++ ){

for (int j=0;j<16 ;j++ ){

intGame_Body[i][j]=0;

}

}

lblWin.setText(""); } public void Game_re(){ //重新开始游戏

repaint();

Game_start_csh(); } public void Game_btn_enable(boolean e){ //设置组件状态

b1.setEnabled(e);

b2.setEnabled(e);

ckbHB[0].setEnabled(e);

ckbHB[1].setEnabled(e); } public boolean Game_win_1(int x,int y){ //横向判断输赢

int x1,y1,t=1;

x1=x;

y1=y;

for (int i=1;i<5 ;i++ ){

if (x1>15){

break;

}

if (intGame_Body[x1+i][y1]==intGame_Body[x][y]){

t+=1;

}

else{

break;

}

}

for (int i=1;i<5 ;i++ ){

if (x1<1){

){

t+=1;

}

else{

break;

}

}

if (t>4){

return true;

}

else{

return false;

} } public boolean Game_win_2(int x,int y){ //纵向判断输赢

int x1,y1,t=1;

x1=x;

y1=y;

for (int i=1;i<5 ;i++ ){

if (x1>15){

break;

}

if (intGame_Body[x1][y1+i]==intGame_Body[x][y]){

t+=1;

}

else{

break;

}

}

for (int i=1;i<5 ;i++ ){

if (x1<1){

break;

}

if(intGame_Body[x1][y1-i]==intGame_Body[x][y]){

t+=1;

}

break;

}

if(intGame_Body[x1-i][y1]==intGame_Body[x][y]

else{

break;

}

}

if (t>4){

return true;

}

else{

return false;

} } public boolean Game_win_3(int x,int y){ //左斜判断输赢

int x1,y1,t=1;

x1=x;

y1=y;

for (int i=1;i<5 ;i++ ){

if (x1>15){

break;

}

if (intGame_Body[x1+i][y1-i]==intGame_Body[x][y]){

t+=1;

}

else{

break;

}

}

for (int i=1;i<5 ;i++ ){

if (x1<1){

break;

}

if(intGame_Body[x1-i][y1+i]==intGame_Body[x][y]){

t+=1;

}

else{

break;

}

}

if (t>4){

return true;

}

else{

return false;

} } public boolean Game_win_4(int x,int y){ //左斜判断输赢

int x1,y1,t=1;

x1=x;

y1=y;

for (int i=1;i<5 ;i++ ){

if (x1>15){

break;

}

if (intGame_Body[x1+i][y1+i]==intGame_Body[x][y]){

t+=1;

}

else{

break;

}

}

for (int i=1;i<5 ;i++ ){

if (x1<1){

break;

} if(intGame_Body[x1-i][y1-i]==intGame_Body[x][y]){

t+=1;

}

else{

break;

}

}

if (t>4){

return true;

}

else{

return false;

} } }

21

第四篇:基于java的音乐播放器课程设计报告

Java课程设计报告

题目:java音乐播放器

名 学

号 院

系 班

级 专

业 任课教师

1.设计内容及要求

能够实现简单的音乐播放器功能,如:打开本地文件,播放,暂停,停止,背景播放,单曲循环等等,界面充实,交互友好,可以添加多首歌曲目录

一个简单的基于java语言的音乐播放器,菜单栏:文件,播放控制和播放列表,文件菜单包含打开、循环和退出三个菜单项;播放控制菜单包含播放、暂停和停止三个菜单项,播放列表菜单则是当向里面添加歌曲之后才能够查看到里面所包含的歌曲目录。当播放歌曲时,可以调节音量大小或者设置是否静音;可以查看当前播放音乐的相关属性,如:歌曲名,歌手,发布时间,所属专辑等等。

2.需求分析

1、时间跟踪条:根据歌曲播放的进度,控制条自动进行追踪,用户可以

随时了解歌曲的播放进度

2、音量控制键:可以点击该控键进行音量大小的调节以及是否静音的设

3、属性查询键:通过该控键,用户可以查看当前播放音乐的相属性,获

取关于该歌曲的用户所需的相关信息。

4、菜单栏:

①文件:

打开:用户通过该菜单项打开本地音乐文件,听任何用户想

听的歌曲

循环:通过循环设置,用户可以重复的播放一首喜欢的歌曲

退出:退出音乐播放器,及退出该程序

②播放控制:

播放:选择歌曲之后,通过点击播放菜单项启动播放器播

放音乐

暂停:暂停当前正在播放的音乐

停止:停止当前正在播放的音乐

③播放列表:当用户通过文件打开本地音乐文件后,及相当于在

播放列表里面添加了歌曲,及形成相应的歌曲播放目录

3.总体设计

结合需求分析来看,整个设计包含了简单的菜单栏,根据用户需求设置了三个简单的实现基本操作的菜单,分别是:文件,播放控制,播放列表;根据具体的操作每个菜单还包含了相应的菜单项,文件:打开,循环,退出;播放控制:播放,暂停,停止;播放列表则没有菜单项,该菜单就是用来显示或者查看相应的歌曲目录的。

该音乐播放器设置了两个窗口,运行程序时打开的初始化欢迎界面,用户可以根据自己的需求进行菜单栏里面的基本操作和相应的设置,当用户添加或者打开音乐播放文件的时候,程序将会显示出第二个音乐文件播放窗口,与此同时,第一个初始化窗口将会自动隐藏,在音乐播放窗口里面用户可以进行相关的音乐播放的控制操作。

当用户进入音乐播放窗口时,该窗口有几个快捷控制的控键:时间追踪轴:可以实现播放的前进、后退功能,根据用户需求调节音乐的播放进度等;音量控制:设置静音,打开扬声器或者调节音量大小;播放列表:查看当前播放音乐的相关属性。 4.主要功能设计流程

5.系统实现及测试:

(一)JMF(java媒体框架)简介

JMF 即Java媒体框架。其核心框架支持不同媒体,如音频输出和视频输出,包括时间的时钟同步。它是一个标准的扩展框架,允许用户制作纯音频流和视频流。

JMF实际上是Java的一个类包。它包括了一个开放的媒体架构,可使开发人员灵活采用各种媒体回放、捕获组件,或采用他们自己的定制的内插组件。

JMF软件是Java Media系列软件的一部分。采用各种Java Media API,软件开发商人员就能容易、快速地为他们已有的各种应用程序和客户端,Java小程序增添丰富的媒体功能,如流式视频、3D图像和影像处理等。就是 说,各种Java Media API发挥了Java平台的固有优势,将"编写一次,到处运行"的能力扩展到了图像、影像和数字媒体等各种应用领域,从而大大缩减了开发时间和降低了开发 成本。

在开发JMF 应用程序之前要完全理解JMF 的体系架构、接口和类。就拿我们的家用摄像机系统作个例子。首先用摄像机拍摄内容,拍摄下来的内容录制在DV带中。DV带可以放在放像机里播放、放像机提供视频信号给电视机,提供音频信号给音箱,这样我们就可以在电视机上看到画面,从音箱里听到声音。JMF API 提供的也是同样的模型。

JMF 提供的模型可大致分为七类

* 数据源(Data source)

* 截取设备(Capture Device,包括视频和音频截取设备)

* 播放器(Player)

* 处理器(Processor)

* 数据池(DataSink)

* 数据格式(Format)

* 管理器(Manager)

如果只是想观看捕获的内容,只需要使用捕获数据源创建播放器Player即可。如果想把捕获的数据发送到网络或者保存起来,就需要创建处理器Processor。

基本步骤是首先获取视频、音频捕获设备的信息,然后再根据取得的设备信息确定设备的位置。找到设备的位置以后,调用ManageCreatePlayer方法创建Player,当Player开始播放的时候,就开始了捕获的过程。

有多种方法获得捕获设备信息,可以通过查询指定的格式,也可以查询特定的设备名字。Player准备好播放数据,当Player发出这个事件时,就可以获取播放器的可视面板和控制面板了。具体步骤如下:

1. 先把所有的捕获设备调出来

2. 创建Player,当Play开始的时候,就开始了音频捕获的过程

3.以MediaLocator为参数,创建Player 4. 为PLAYER添加监听器,以便监听RealizeComplete事件

(二)代码实现

(1)添加库、包等相关文件 import javax.media.ControllerEvent; import javax.media.ControllerListener; import javax.media.EndOfMediaEvent; import javax.media.PrefetchCompleteEvent; import javax.media.RealizeCompleteEvent; import javax.media.*; import javax.swing.*; import java.awt.*;

import java.awt.event.*;

(2)初始化窗口

1代码实现

private void init() {

// TODO Auto-generated method stub

this.setLayout(new BorderLayout());

JPanel lrcPanel = new JPanel();

JPanel controP= new JPanel();

jta = new JTextArea(22,35);

jta.setBackground(Color.black);

jta.setLineWrap(true);

jta.setWrapStyleWord(true);

jta.setEditable(false);

lrcPanel.add(new JScrollPane(jta));

lrcPanel.setBackground(Color.black);

lrcPanel.setVisible(true);

JButton Jstart= new JButton(""); Jstart.setIcon(new ImageIcon("start.png"));

Jstart.addActionListener(new ActionListener() {

@Override public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

start(); } }); JButton Jpause=new JButton(); Jpause.setIcon(new ImageIcon("停止.png")); Jpause.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){

stop();

} }); JButton Jnext =new JButton(); Jnext.setIcon(new ImageIcon("next.png")); Jnext.addActionListener(new ActionListener(){

@Override public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

next(); } }); JButton Jprior =new JButton(); Jprior.setIcon(new ImageIcon("back.png")); Jprior.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){

back(); } }); controP.setLayout(new FlowLayout()); controP.add(Jprior); controP.add(Jstart); controP.add(Jpause);

} controP.add(Jnext);

this.add(lrcPanel,BorderLayout.CENTER); this.add(controP,BorderLayout.SOUTH);

(3)音乐播放窗口机基本功能的实现 ①界面

②代码实现

// 播放方法

public void start() {

if(isplaying==false){

try {

player =

Manager.createPlayer(new File(mp3List.get

(mp3NO)).toURI().toURL());

jta.setText(null);

} catch (NoPlayerException e) {

// TODO 自动生成 catch BufferedReader(

new FileReader(lcf));

String s;

e.printStackTrace();

System.out.println("不能播放此文件!");

return;

} catch (IOException e) {

// TODO 自动生成 catch 块

e.printStackTrace();

return;

}

if (player == null) {

System.out.println("播放文件为空!");

return;

}

player.addControllerListener(this);

// 提取媒体内容

player.prefetch();

isplaying=true;//正在播放一首歌

setLrc();

} }

private void setLrc() {

// TODO Auto-generated method stub

File lrcfile = new File(lrcpath);

if(!lrcfile.exists()){

lrcfile.mkdir();

}

String lrcFName = getlrcFName();

BufferedReader bReader;

File lcf= new File(lrcpath+lrcFName+".lrc");

System.out.println(lcf.getName());

try {

bReader = new while((s=bReader.readLine()) != null){

jta.append(" "+s);

jta.append(" ");

}

} catch (Exception e) {

// TODO Auto-generated catch block

jta.setText("没有歌词");

System.out.println("没有歌词文件!");

}

}

private String getlrcFName() {//解析歌曲名;

// TODO Auto-generated method stub

String musicPath = mp3List.get(mp3NO);

String s =musicPath.substring(11);

System.out.println(s);

String []str = s.split(".");

String lrcFName=str[0] ;

System.out.println(lrcFName);

return lrcFName; }

public void stop(){

player.stop();

isplaying=false; }

public void next(){

if(isplaying==true)

stop();

if(mp3NO

mp3NO++;

start();

}

else{

jta.setText("没有下一首了

// 当提取媒体的内容结束

if (e instanceof PrefetchCompleteEvent) {

System.out.println("内容结束");

player.start();

return;

} (<_>");

} } public void back(){

if(isplaying)

stop();

if(mp3NO>0){

mp3NO--;

start();

}

else

jta.setText("已经是第一首歌了(<_>)"); }

public void controllerUpdate(ControllerEvent e) {

// 当媒体播放结束时,循环播放

if (e instanceof EndOfMediaEvent) {

isplaying=false;

mp3NO++;

System.out.println(mp3NO);

if (mp3NO < mp3List.size()) {

this.start();

}

return;

}

// 当实例化后

if (e instanceof RealizeCompleteEvent) {

System.out.println("实例化");

// pack(); //执行pack()操作

return;

}

}

public void setMp3List(){

File file = new File(musicpath);

if( !file.exists()){

file.mkdir();

}

File[] mcFiles ;

mcFiles = file.listFiles();

if(mcFiles!=null){

for(File f : mcFiles){

System.out.println(f.getPath());

mp3List.add(f.getPath());

}

}else

System.out.println("MyMusic中没有歌曲文件");

} 6.总结与说明

在做写程序实现功能的过程中,界面和基本功能的设计需要较强的逻辑思维,一不小心就容易出错,在具体的功能设计和实现的过程中要尽可能用最简单的语句实现基本的播放器功能。我觉得可以设计更多的菜单及菜单项目从而实现更多的功能,如:删除,保存等,还可以实现更多的背景效果或者更多可选择的皮肤,还可以对按钮添加音效效果,这样感觉整个音乐播放器更具有灵活性,媒体感更强烈一些,界面会更加丰富和生动一些。

通过自己做课程设计,自己设计界面,功能和设计功能的代码实现,将理论知识运用到实际操作中,加深了对理论知识的理解和记忆,在做程序设计的过程中,对很多代码的多次操作和重复使用,使得对很多基本的代码和相关的操作能够牢固的记忆。

第五篇:JAVA课程设计

JAVA程序设计课程设计报告

目 录

一、 项目背景及意义: ............................................... 2

二、 系统描述 ............................................................... 2

三、 分析与设计 ........................................................... 3 1. 分析 ....................................................................... 3 2. 功能模块划分 ....................................................... 3 3. 功能模块流程图 ................................................... 5 4. 各模块的关键代码 ............................................... 5

四、 系统测试 ............................................................... 5

五、 课程设计进度 ..................................................... 13

六、 心得体会 ............................................................. 13

七、 参考文献 ............................................................. 14

八、 附录 ..................................................................... 14

一、 项目背景及意义:

记事本千百年来都在人类的工作生活中起到重要的作用,计算机革命电子产品未出现之前,人们的记事都是基于纸质加笔两者的简单记事,也即单纯的文本记录。直到计算机的出现和更新换代,高科技电子产品大行其道,人们日益将在纸质上的记事转移到将事件记录在个人电子设备如PC上,现在基于电子移动设备如手机和平板等的记事本app开发更是迅猛,功能更加丰富多彩,能记录的不单纯是文本了,人们能将声音和图片甚至视频结合起来,将一件事“有声有色”地记录下来,保存在个人电子设备产品中。近年来产生的采用云存储技术的“云笔记”,更是能让人们随时随地将集文本、语音、图像和视频于一体的事件记录保存在所谓的“云端”,能同步到个人其他设备中,解决了个人资料和信息跨平台跨地点的管理问题。

现在我们以有限的资源以及智慧力量,用Java语言编写一个可以在装有jar模拟器的个人电子移动设备上使用的简单记事本软件,没视频记录功能和基于网络功能但却能集文本、声音和图像于一起记录的功能的记事本,我们将轻便和简洁走向极致!所以此记事本软件操作起来简单易上手,能给带来同学简单便捷的记事体验。另外,这不单纯是个人人都可以打开的记事本,使用时需要账号密码登陆,因此能较好地保障个人隐私。

二、 系统描述

Java的前身是Oak,它一开始只是被应用于消费性电子产品中。后来它的开发者们发现它还可以被用于更大范围的Internet上。1995年,Java语言的名字从Oak编程了Java。1997年J2SE1.1发布。1998年J2SE1.2发布,

2 标志Java2的诞生。十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。Java的体系结构由Java语言、Java class、Java API、Java虚拟机组成。它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。Java的平台标准有Java ME,Java SE和Java EE。Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。目前在众多的支持Java的开发工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。其中Java Development Kit 简称JDK是大多开发工具的基础。以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。

在本程序设计中,因为需要开发的是记事本程序,规模较小,内容较少,所以选择了适合初学者使用的eclipse开发工具。

三、 分析与设计

1. 分析

现在网络上各种文档编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed, xint 。功能也是应有尽有,有能改变字体的,有能改变文字颜色的。但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。本程序设计就是依照这样一种使用需要设计了一个简单的笔记本程序。 2. 功能模块划分

程序构建的记事本程序具有Windows系统记事本工具基本功能,并且能够创

3 建多个不同的用户和保存图片功能。以下是具体说明: 第一部 登陆界面

(1) 用户名和密码输入文本框,供已注册的用户输入用户名和密码。 (2) 登陆控件,在用户名和密码正确的前提下,进入软件主界面。

(3) 注册控件,点击此按钮,将进入用户创建,创建之后用户名和密码会自动保存在电脑的相应文件中。 第一部分 菜单栏

(1)菜单中有“新健”,“删除”,“显示”,“菜单”,“帮助”五个主菜单。 (2)“新建”有“新建笔记”“新建笔记本”二个子菜单:分别用于创建新的笔记和新的笔记本。

(3)“删除”中有“删除笔记”和“删除笔记本”二个子菜单,和“新建”相对应。

(4)“显示”中可以选择界面的风格,有Metal风格、Windows风格、Motif风格、Nimbus风格;还有界面排版的选择,可以选择水平显示或垂直显示。 (5)“帮助”菜单中有关于笔记本程序的说明,作者等信息。 第二部分 笔记本排列区

显示用户创建的所有笔记本。 第三部分 笔记显示排列区

此处主要显示选中笔记本中的所有笔记,并且可以在此区右击来创建、删除笔记、查看笔记,当然也可以在菜单栏中的“新建”和“删除”菜单中创建和删除笔记。

第四部分 笔记编辑区

此部分为用户设计选择操作和右键操作,可以在笔记中插入图片、更改字体颜色、和插入时间;方便用户进行一系列的编辑操作,增强本记笔记本的用户体验性能。

4 3. 功能模块流程图

4. 各模块的关键代码

1构造函数创建窗口界面 主菜单,子菜单

public MainFrame(String name) {

this.name=name;

this.setUser_path("Users/"+name);

this.setBook_Path(this.getUser_path()+"/默认笔记本");

this.setNote_Path(this.getBook_Path()+"/默认笔记"); //

一、菜单界面

menu=new Menu(this);

/**

二、 创建三个JPanel *1.l笔记正文 TextPanel

*2.笔记名目录及查找方式 DirectoryPanel *3.笔记类型目录及排序方式选择 NoteTypePane */

/*笔记正文部分*******/ TextPanel=new JPanel(); rightPanel=new RightPanel(TextPanel,this);

} /*文件名目录部分******/

DirectoryPanel=new JPanel(); midPanel =new MidPanel(DirectoryPanel,this); /*笔记类型目录部分*****/

NoteTypePanel =new JPanel(); leftPanel=new LeftPanle(NoteTypePanel,this); leftPanel.update_Left_view();

//

三、处理拆分窗格

splitM_R =new JSplitPane(1,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true); splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M);

//

四、设置标题等

this.setTitle(name+" 的笔记本"); this.setLocation(200,100); this.setSize(1000,600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); 2 添加右键菜单并为其添加监听器

public RightPanel(JPanel panel,MainFrame mainFrame)

{ this.mainFrame=mainFrame; this.panel=panel;

//创建一个 文本域存放文字 JTextArea textPane =new JTextPane(); //设置自动换行

textPane.setFont(new Font("", 1, 12)); jsp_Pane=new JScrollPane(textPane);//滚轮

//设置鼠标右击弹框效果

//cut

cutItem=new JMenuItem("Cut",new ImageIcon("image/cut.png"));

cutItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl x"

cutItem.addActionListener(this);

//copy

copyItem=new JMenuItem("Copy",new ImageIcon("image/copy.png"));

copyItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置

6 快捷键 "ctrl O"

copyItem.addActionListener(this);

//paste

pasteItem=new JMenuItem("Paste",new ImageIcon("image/haha.png"));

pasteItem.setAccelerator(KeyStroke.getKeyStroke("ctrl v"));//设置快捷键 "ctrl v"

pasteItem.addActionListener(this);

saveItem=new JMenuItem("Save",new ImageIcon("image/save.png"));

saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl s"));

saveItem.addActionListener(this);

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getActionCommand()=="Cut"){//剪切

textPane.cut(); }else if(e.getActionCommand()=="Copy"){//复制

textPane.copy(); }else if(e.getActionCommand()=="Paste"){//粘贴

textPane.paste(); }else if(e.getActionCommand()=="Save"){//保存

this.book_Save(); }else if(e.getSource()==image_Button){//插入图片

String temp=Tools.open_Choose(); if(!temp.equals("not")){

textPane.insertIcon(new ImageIcon(temp)); }

}else if(e.getSource()==font_Button){//修改字体颜色

Color c=JColorChooser.showDialog(this, "Color", Color.black); textPane.setForeground(c); }else if(e.getSource()==timeButton){//插入时间

Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式

String hehe = dateFormat.format( now );

textPane.replaceSelection(hehe);

}

3 设为Document类型

public static void setDocument(File file) {

try {

} JTextPane tempPane=new JTextPane(); FileOutputStream outputStream=new FileOutputStream(file); ObjectOutputStream oos=new ObjectOutputStream(outputStream); oos.writeObject(tempPane.getDocument());

oos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block

e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block

e.printStackTrace(); } 系统测试

1、笔记本登陆

2 、用户注册

3、菜单栏 a.总菜单

b.新建菜单

8

c.删除菜单

d.显示菜单

e.“菜单”菜单

f.帮助

10 4.导入笔记、导出笔记、及插入图片选择

5.字体颜色选择

6.插入时间

7、插入图片

四、 课程设计进度

我们进行了若干阶段的部署,令课题研究可以在每个阶段有条不紊地进行。具体如下:

(一)理论学习和开题论证

1.浏览相关网站,查阅与课题研究的相关理论、研究方法; 2.运用文献研究法,深入学习java理论,对要有关课题研究的知识进行理论上的研究和探讨。 3,制订研究计划和方案 。

(二)第一阶段

1.以调查法为主开展研究。(1)对有关java的课题设计进行调查,查阅网络上java应用的设计案例,并分析和总结,寻找思路。(2)对更新频率快的java应用进行追踪,采取观察,评价、讨论的方式分析和总结。

2.制订第二阶段实验方案,为下阶段实验做准备。

(三)第二阶段

1.按计划在继续第一阶段实验的基础上,进一步加强java应用的实施和研究。采用实验法对上一阶段的总结的结论进行验证和拓展。

2.让同学体验一下我们初步完成的作品,根据他们用完之后的感受,进一步修正作品存在的问题,完善作品。

(四),总结阶段

1.收集和整理研究资料,参照相关书籍分析和研究实验情况 2.制订总结阶段计划 3.总结和提炼研究成果 4.全面总结实验工作 5.解题论证

6.成果展示(课题报告) (五) 总结阶段(2013.12) 整理材料,撰写课题报告。

五、 心得体会

此次课程设计由我们小组一起共同合作完成,花费了差不多两个月的时间。在这期间我们共同协作,互帮互助取得了很好的效率,也为我们构建友好的同学关系,学习气氛良好做出了一定的贡献。在这期间我领略到了团队协作的重要性, 13 也看到了团队合作的高效率性。还有通过这次试验我们领悟到了团队的力量是巨大的,也学习到的一些学习方法,比如追查API,如何在短时间内学习一个自己不懂的东西那就是利用好所有的搜索引擎,多去图书馆找资料。总之此次课程设计我们不仅长了学科知识,在生活上我也长了见识。

六、 参考文献

a.黄晓东 等编著 Java课程设计案例精编(第二版)[M].北京:中国水利水电出版社,2007 b.李兴华 等编著 Java开发实战经典Java开发实战经典 北京:清华大学出版社,2009 C.李尊朝 苏军 Java程序设计(第二版) 图形用户界面设计、Swing组件 中国铁道出版社,2007

七、 附录

1.程序结构

14 2.程序

(1)Tools.java package common;

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream;

import javax.swing.*;

public class Tools {

/**打开选择框 返回详细地址*/ public static String open_Choose() {

JFileChooser jfc1=new JFileChooser();

jfc1.setDialogTitle("请选择...");

int judge=jfc1.showOpenDialog(null);

jfc1.setVisible(true);

//得到文件的完全路径

if(judge==JFileChooser.APPROVE_OPTION)

return (jfc1.getSelectedFile().getAbsolutePath());

else

return "not"; } /**保存选择框 返回详细地址*/ public static String save_Choose() {

JFileChooser jfc1=new JFileChooser();

jfc1.setDialogTitle("请选择...");

int judge=jfc1.showSaveDialog(null);

jfc1.setVisible(true);

//得到文件的完全路径

if(judge==JFileChooser.APPROVE_OPTION)

return (jfc1.getSelectedFile().getAbsolutePath());

else

return "not";

}

/**显示对话框,需要传递 标题和显示内容*/ public static void showMessage(String text,String title)

15 {

JOptionPane.showMessageDialog(null,text,title,

JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); } /**新建笔记时将笔记设为Document类型,方便存储图片,在本地不能打开*/ public static void setDocument(File file) {

try {

JTextPane tempPane=new JTextPane();

FileOutputStream outputStream=new FileOutputStream(file);

ObjectOutputStream oos=new ObjectOutputStream(outputStream);

oos.writeObject(tempPane.getDocument());

oos.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} } /**删除文件 传一个文件地址 返回一个boolean 为了方便删除文件夹才将此方法提取出来*/ public static boolean deleteFile(String path) {

File file=new File(path);

return (file.delete()); }

/**删除文件 传一个文件地址

返回一个boolean 先删除里面的文件再删除文件夹*/ public static boolean deleteFolder(String path) {

File folder=new File(path);

File[] list=folder.listFiles();

for(int i=0;i

deleteFile(path+"/"+list[i].getName());

return (folder.delete()); } }

(2)User.java package common; /**

16 * 处理用户属性

* 为用户创建自己的专有途径

* 如果有了则不创建

*/ import java.io.*;

import javax.swing.JTextPane; import javax.swing.text.Document;

import view.MainFrame;

public class User {

public User(String name)

{

//如果第一次登录的话,为用户新建一个专属区

File file=new File("Users/"+name);

if(!file.exists())

{

try {

file.mkdir();

} catch (Exception e1) {

e1.printStackTrace();

}

//第一次登录创建默认笔记本

File book=new File("Users/"+name+"/默认笔记本");

try {

book.mkdir();

} catch (Exception e1) {

e1.printStackTrace();

}

//第一次登录创建默认笔记

File note=new File("Users/"+name+"/默认笔记本"+"/默认笔记.ser");

try {

note.createNewFile();

Tools.setDocument(note);

} catch (Exception e1) {

e1.printStackTrace();

}

}

//构造完毕

正式进入笔记本

new MainFrame(name);

}

}

(3)login_zhuce.java package login;

import java.awt.*; import java.awt.event.*; import java.io.*;

import javax.swing.*;

import common.User; import view.MainFrame;

public class login_zhuce extends JFrame implements ActionListener {

JPanel jp0; JPanel jp1,jp2,jp3,jp4,jp5; JTextField jtf; JPasswordField jpf; JLabel jl1,jl2,jl3; JButton jb1,jb2,jb3; ImageIcon bg;

public static void main(String[] args) {

// TODO Auto-generated method stub

login_zhuce lz = new login_zhuce(); }

public login_zhuce(){

try {//默认 NImbus风格

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); }

jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); jp4 = new JPanel(); jp1.setOpaque(false); jp2.setOpaque(false); jp3.setOpaque(false); jp4.setOpaque(false);

//no.1 jl1 = new JLabel("用户名"); jtf = new JTextField(10); jp1.add(jl1); jp1.add(jtf);

//no.2 jl2 = new JLabel("密

码"); jpf = new JPasswordField(10); jp2.add(jl2); jp2.add(jpf); //3 jb1 = new JButton("登陆"); jb1.addActionListener(this); jb1.setActionCommand("denglu"); jb2 = new JButton("取消"); jb2.addActionListener(this); jb2.setActionCommand("quxiao"); jb3 = new JButton("注册"); jb3.addActionListener(this); jb3.setActionCommand("zhuce");

jp3.add(jb1);

jp3.add(jb2);

jp3.add(jb3);

this.setLayout(new GridLayout(4,1));

this.add(jp4);

this.add(jp1);

this.add(jp2);

this.add(jp3);

bg = new ImageIcon("image//huashi.jpg");

jl3 = new JLabel(bg);

jl3.setBounds(0, 0, 300, 200);

this.getLayeredPane().add(jl3,new Integer(Integer.MIN_VALUE));

jp5 = (JPanel)this.getContentPane();

jp5.setOpaque(false); //设置透明

this.setTitle("笔记本登陆");

this.setSize(300,200);

// 获取屏幕分辨率,以此设置程序出现在屏幕中央

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

Dimension testSize = getSize();

this.setLocation((screenSize.widthtestSize.width) / 2, (screenSize.height - testSize.height) / 2); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

24

public void actionPerformed(ActionEvent e){

if(e.getActionCommand().equals("queding")){

String st1 = "ff";

String st2 = ".txt";

String st3 = this.jtf1.getText();

String st4 = st1 + st3 +st2 ;

System.out.println(st4);

File f = new File(st4);

if(!f.exists()){

String password1=new String(jtf2.getPassword());

String password2=new String(jtf3.getPassword());

System.out.println(password1);

System.out.println(password2);

if (!(password1.equals(password2))){

JOptionPane.showMessageDialog(null, "两次密码输入不一样,请重新输入", "错误提示",

JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);

this.jtf2.setText(null);

this.jtf3.setText(null);

}

else {

try {

f.createNewFile();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

FileWriter fw = null;

BufferedWriter bw = null;

try {

fw = new FileWriter(st4,true);

bw = new BufferedWriter(fw);

bw.write(st3+"");

bw.close();

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} finally{

try {

fw.close();

} catch (IOException e1) {

25

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

try {

fw = new FileWriter(st4,true);

bw = new BufferedWriter(fw);

bw.write(this.jtf2.getPassword());

bw.close();

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

} finally{

try {

fw.close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

JOptionPane.showMessageDialog(null, "创建账户成功", "恭喜你",

JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);

this.dispose();

login_zhuce lz = new login_zhuce();

}

}

else {

JOptionPane.showMessageDialog(null,"该用户名已被占用,请重新输入用户名","错误提示",

JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);

System.out.println("该用户名已被占用,请重新输入用户名");

this.jtf1.setText(null);

} //

if (this.jpf1.getText()!=this.jpf2.getText()){ //

JOptionPane.showMessageDialog(null, "两次密码输入不一样,请重新输入", "错误提示", //

JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); //

this.jpf1.setText(null); //

this.jpf2.setText(null); //

}

}

26

else if(e.getActionCommand().equals("quxiao")){

this.dispose();

System.exit(0);

} } }

(5)LefgPanle.java package view; /** * 将卡片布局修改 修改成仅有两片

* 第一片 所有笔记 按钮

* 第二片 所有笔记 目录

*/ import java.awt.*; import java.awt.event.*; import java.io.*;

import javax.swing.*;

public class LeftPanle extends JPanel implements ActionListener,MouseListener{

/**************笔记本类型部分声明*****************/ CardLayout cardLayout;//卡片布局的方式

JPanel firstPanel,secondPanel;//分别存储两片

//第一片声明

JPanel allBookPanel,firstTempPanel;//所有笔记

JButton allBook;//所以笔记,排序,回收站的按钮

JScrollPane allBookjsp; //第二片声明

JPanel secondTempPanel,timePaenl_o; JButton allBook_o;//所以笔记,排序,回收站的按钮

JScrollPane timePaenljsp_o;

//处理文件部分内容

File book; String [] book_name; JLabel[] member;

JPanel panel; MainFrame mainFrame; public final int TOTAL=20;

/**************笔记本类型部分声明结束*****************/

27

public LeftPanle(JPanel panel,MainFrame mainFrame) { this.mainFrame=mainFrame; this.panel=panel; //处理第一片11111111111111111111111111 //设置初始界面 显示 所以笔记,排序,回收站的按钮

//ImageIcon imageIcon=new ImageIcon("image/note.png"); allBook=new JButton("所有笔记",new ImageIcon("image/expand.png")); allBook.addActionListener(this);//点击按时间排序时显示第二片

allBookPanel=new JPanel(new GridLayout(TOTAL,1,1,4)); member=new JLabel[TOTAL]; for(int i=0;i

member[i]=new JLabel("");

member[i].addMouseListener(this); }

allBookjsp=new JScrollPane(allBookPanel);//滚动

firstPanel=new JPanel(new BorderLayout());//将第一片设置为边界布局

firstPanel.add(allBook,"North"); firstPanel.add(allBookjsp);

//处理第二片222222222222222222222 //仅有一个按钮

allBook_o=new JButton("所有笔记",new ImageIcon("image/collapse.png")); allBook_o.addActionListener(this);//点击所有笔记时 显示第一片

secondPanel=new JPanel(new BorderLayout());//将第二片设为 边界布局

secondPanel.add(allBook_o,"North");

//进行卡片布局

cardLayout=new CardLayout(); panel.setLayout(cardLayout); panel.add(firstPanel,"1"); panel.add(secondPanel,"2");

} //更新leftPanel中的笔记本,在新建或删除笔记本是需要刷新

并附带刷新右边两个

28 Panel public void update_Left_view() {

book=new File(mainFrame.getUser_path());

book_name=book.list();

if(book.exists())

{

for(int i=0;i

{

member[i].setText("");

member[i].setIcon(null);

member[i].removeMouseListener(this);

}

for(int i=0;i

{

//为每个好友设置头像和名字,每一个好友用 JLabel组件 存放

ImageIcon imageIcon=new ImageIcon("image/note.png");

member[i].setText(book_name[i]);

member[i].setIcon(imageIcon);

member[i].addMouseListener(this);//为每一种笔记的排序方式注册监听

allBookPanel.add(member[i],i);//将笔记添加到所有笔记面板

}

mainFrame.setBook_Path(mainFrame.getUser_path()+"/"+book_name[0]);

mainFrame.midPanel.update_Mid_View();

} }

@Override public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

//将选中部分字体设为红色

JLabel jl = null;

for(int i=0;i

{

if(e.getComponent().equals(member[i]))

{

jl=(JLabel)e.getSource();

jl.setForeground(Color.red);

}

else

{

member[i].setForeground(Color.black);

29

// //

// //

}

} //保存当前笔记本的路径 如 ... mainFrame.setBook_Path(book.getAbsolutePath()+""+jl.getText()); //点击打开一个笔记本

刷新中间的目录

mainFrame.midPanel.update_Mid_View();

} @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub

} @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub

} @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub JLabel jl=(JLabel)e.getSource(); jl.setForeground(Color.red); //jl.setFont(new Font("",1,30)); //在笔记本界面操作 允许删除笔记本 不允许删除笔记

mainFrame.menu.delete_item[0].setEnabled(false);//不允许删除笔记

mainFrame.menu.delete_item[1].setEnabled(true);//允许删除笔记本 } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub JLabel jl=(JLabel)e.getSource(); jl.setForeground(Color.black); //jl.setFont(new Font("",1,12)); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==allBook) {

//cardLayout.show(this.getContentPane(), "2");

cardLayout.next(panel); }else if(e.getSource()==allBook_o){

30

//cardLayout.show(this.getContentPane(), "1");

cardLayout.next(panel);

} }

}

(6)MainFrame.java package view; /** * 笔记本 java版

*

1、将主界面分为四块 北边的菜单 以及左中右的笔记本目录,笔记目录和笔记内容

*

2、左边目录为卡片布局,实现点了"所有笔记"弹出所有笔记的效果

*

3、中间显示笔记目录 采用网格布局 每个网格用了JMenuItem *

4、右边是一个JTextArea可能会改成JTextPane *

5、实现了新建删除笔记(本),但界面刷新有点问题 (会重叠)

*

6、采用MVC的思想实现时事刷新界面的效果

*

7、鼠标右击删除新建 测试成功(鼠标右击是笔记本的新建与删除没有)

*

8、注册登录系统 已测试成功 在包login里面

*

9、图片的问题已成功解决

*

10、可以更改字体颜色(大小没有写),以及插入时间等

*

11、显示处添加实现多种版本的切换(如可切换成windows)

*/

import java.awt.*; import java.awt.event.*; import javax.swing.*;

import common.User;

public class MainFrame extends JFrame implements ActionListener{

Menu menu;//连接菜单栏

JPanel NoteTypePanel,DirectoryPanel,TextPanel;//三个大Panel JSplitPane splitM_R,splitL_M;

LeftPanle leftPanel;//左边第一个Panel MidPanel midPanel;//连接中间Panel RightPanel rightPanel;//连接右边Panel

//存放路径

31 public String name=null; public String user_path=null; public String book_Path=null; public String note_Path=null;

public MainFrame(String name) {

this.name=name;

this.setUser_path("Users/"+name);

this.setBook_Path(this.getUser_path()+"/默认笔记本");

this.setNote_Path(this.getBook_Path()+"/默认笔记");

//

一、菜单界面

menu=new Menu(this);

/**

二、 创建三个JPanel

*1.l笔记正文 TextPanel

*2.笔记名目录及查找方式

DirectoryPanel

*3.笔记类型目录及排序方式选择

NoteTypePane

*/

/*笔记正文部分*******/

TextPanel=new JPanel();

rightPanel=new RightPanel(TextPanel,this);

/*文件名目录部分******/

DirectoryPanel=new JPanel();

midPanel =new MidPanel(DirectoryPanel,this);

/*笔记类型目录部分*****/

NoteTypePanel =new JPanel();

leftPanel=new LeftPanle(NoteTypePanel,this);

leftPanel.update_Left_view();

//

三、处理拆分窗格

splitM_R =new JSplitPane(1,DirectoryPanel,TextPanel);

splitM_R.setOneTouchExpandable(true);

splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R);

splitL_M.setOneTouchExpandable(true);

this.add(splitL_M);

//

四、设置标题等

this.setTitle(name+" 的笔记本");

this.setLocation(200,100);

this.setSize(1000,600);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

32

} this.setVisible(true); } //为了方便后面的垂直和水平显示 public void showStyle(int show) { this.remove(splitL_M);//先把以前的去掉重新添加

splitM_R =new JSplitPane(show,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true);

splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M); this.setVisible(true); }

@Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub }

public String getUser_path() { return user_path; } public void setUser_path(String user_path) { this.user_path = user_path; } public String getBook_Path() { return book_Path; } public void setBook_Path(String book_Path) { this.book_Path = book_Path; } public String getNote_Path() { return note_Path; } public void setNote_Path(String note_Path) { this.note_Path = note_Path; }

33

(7) package view;

import java.awt.*; import java.awt.event.*; import java.io.*;

import javax.swing.*; import javax.swing.text.Document; import javax.swing.text.StyledDocument;

import common.Tools; import common.User; import login.login_zhuce;

public class Menu extends JFrame implements ActionListener{

//菜单部分声明

JMenuBar menuBar=null;//菜单主干

JMenu newNote_menu,deliteNote_menu,show_menu,menu_menu,help_menu;//菜单组件

树干

//处理新建笔记菜单 newNote_menu JMenuItem[] newNote_item={

new JMenuItem("新建笔记"),

new JMenuItem("新建笔记本")

}; //处理删除deliteNote_menu JMenuItem[] delete_item={

new JMenuItem("删除笔记"),

new JMenuItem("删除笔记本")

};

//处理显示

JMenuItem[] show_item={

new JMenuItem("Metal风格"),

new JMenuItem("Windows风格"),

new JMenuItem("Motif风格"),

new JMenuItem("Nimbus风格"),

new JMenuItem("水平显示"),

new JMenuItem("垂直显示")

};

//处理menu_menu JMenuItem[] menu_item={

new JMenuItem("丨账户"),

new JMenuItem("丨导入"),

34

new JMenuItem("丨导出"),

new JMenuItem("丨注销"),

new JMenuItem("丨退出")

};

//处理help_menu JMenuItem[] help_item={

new JMenuItem("关于作者"),

new JMenuItem("关于笔记本") };

MainFrame mainFrame;

public Menu(MainFrame mainFrame) { this.mainFrame=mainFrame; //

一、先处理菜单

menuBar=new JMenuBar(); //各菜单menu[0]menu[1]menu[2]menu[3]menu[4] newNote_menu=new JMenu("新建"); deliteNote_menu=new JMenu("删除"); deliteNote_menu.setToolTipText("选中笔记(本)时才可删除"); show_menu=new JMenu("显示"); help_menu=new JMenu("帮助"); menu_menu=new JMenu("菜单");

//将菜单项添加到各菜单

for(int i=0;i

菜单

newNote_menu.add(newNote_item[i]); for(int i=0;i

deliteNote_menu.add(delete_item[i]); for(int i=0;i

show_menu.add(show_item[i]); for(int i=0;i

help_menu.add(help_item[i]); for(int i=0;i

{

menu_menu.add(menu_item[i]);

if(i==0||i==2)//添加分隔线 将导入和导出框起来

menu_menu.addSeparator(); }

35

//添加事件监听

for(int i=0;i

newNote_item[i].addActionListener(this);

for(int i=0;i

delete_item[i].addActionListener(this);

for(int i=0;i

show_item[i].addActionListener(this);

for(int i=0;i

help_item[i].addActionListener(this);

for(int i=0;i

menu_item[i].addActionListener(this);

//将菜单 添加到主干中

menuBar.add(newNote_menu);

menuBar.add(deliteNote_menu);

menuBar.add(show_menu);

menuBar.add(menu_menu);

menuBar.add(help_menu);

mainFrame.add(menuBar,"North");

} //构造完毕

//实现风格转换

private void changeFlavor(int flavor)throws Exception

{

switch(flavor)

{

case 1:

UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");

break;

case 2:

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

break;

case 3:

UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");

break;

case 4:

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

break;

36

}

SwingUtilities.updateComponentTreeUI(this.getContentPane());

SwingUtilities.updateComponentTreeUI(mainFrame);

} //实现监听后的动作

@Override public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

String str=e.getActionCommand();

if(str.equals("新建笔记")){

String note_name=null;

note_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记",

JOptionPane.INFORMATION_MESSAGE |JOptionPane.OK_OPTION);

//如果用户点取消 或没有输入文件名

则不用新建

if(note_name!=null){

File file=new File(mainFrame.book_Path+"/"+note_name+".ser");

if(!file.exists())

{

try {

file.createNewFile();

//将新建的笔记格式设为Document对象

Tools.setDocument(file);

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

//刷新中间和左边的Panel

mainFrame.midPanel.update_Mid_View();

}

}

}else if(str.equals("新建笔记本")){

String book_name=null;

book_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记",

JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);

if(book_name!=null){

File file=new File(mainFrame.getUser_path()+"/"+book_name);

//System.out.println("User_path:"+mainFrame.getUser_path());

if(!file.exists())

{

try {

file.mkdir();

//将笔记本路径设为新建笔记本的路径

37 mainFrame.setBook_Path(mainFrame.getUser_path()+"/"+book_name);

mainFrame.leftPanel.update_Left_view();

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

//改变的笔记本总数

刷新左边Panel

mainFrame.leftPanel.update_Left_view();

}

}

}else if(str.equals("删除笔记")){

Tools.deleteFile(mainFrame.getNote_Path());

//删除笔记之后需要刷新右边的两个Panel

mainFrame.midPanel.update_Mid_View();

}else if(str.equals("删除笔记本")){

Tools.deleteFolder(mainFrame.book_Path);

//笔记本目录发生改变

mainFrame.leftPanel.update_Left_view();

}else if(str.equals("关于作者")){

Tools.showMessage("邓伟杰、苏俊钦、陈通、陈盛锋、林健祺、尹国瑜、温天宇、赵潮顺", "帮助");

}else if(str.equals("关于笔记本")){

Tools.showMessage("还存在许多BUG,望老师指正", "呵呵");

}else if(str.equals("丨账户")){

Tools.showMessage("姓名:"+mainFrame.name, "用户信息");

}else if(str.equals("丨导入")){//即打开一个笔记

String temp=Tools.open_Choose();

if(!temp.equals("not"))

{

FileInputStream inputStream=null;

ObjectInputStream ois=null;

try {

inputStream=new FileInputStream(Tools.open_Choose());

ois=new ObjectInputStream(inputStream);

mainFrame.rightPanel.textPane.setDocument((Document) ois.readObject());

mainFrame.rightPanel.book_Save();

} catch (Exception e1) {

// TODO Auto-generated catch block

38

e1.printStackTrace();

}finally{

try {

ois.close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

} } }else if(str.equals("丨导出")){//即另存为一个笔记

String temp=Tools.open_Choose(); if(!temp.equals("not")) {

FileOutputStream outputStream=null;

ObjectOutputStream oos=null;

try {

outputStream=new FileOutputStream(Tools.save_Choose());

oos=new ObjectOutputStream(outputStream);

oos.writeObject(mainFrame.rightPanel.textPane.getDocument());

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}finally{

try {

oos.close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

} } }else if(str.equals("丨注销")){ mainFrame.dispose(); new login_zhuce();//注销之后重新登录 }else if(str.equals("丨退出")){ System.exit(0); }else if(str.equals("垂直显示")){ mainFrame.showStyle(0);//重新调用一下拆分窗格 }else if(str.equals("水平显示")){ mainFrame.showStyle(1); }else {

39

try{

if(str.equals("Metal风格")){

this.changeFlavor(1);

}else if(str.equals("Windows风格")){

this.changeFlavor(2);

}else if(str.equals("Motif风格")){

this.changeFlavor(3);

}else if(str.equals("Nimbus风格")){

this.changeFlavor(4);

}

}catch(Exception e1){

e1.printStackTrace();

}

}

}

}

(8)Midpanel.java package view;

import java.awt.*;

import javax.swing.*; import javax.swing.text.Document;

import common.Tools;

import java.awt.event.*; import java.io.*;

public class MidPanel extends JPanel

implements ActionListener,MouseListener{

JPanel panel; MainFrame mainFrame; /// JScrollPane jscroll2;

JMenuItem[] items; File lists[];

JPanel jp1;

40

//鼠标右击部分

JPopupMenu right_Click;

JMenuItem delete_book,properties_book,new_book;

public final int TOTAL=20; public String filename; public String temp_path=null;//右击时记录选中笔记的途径

public MidPanel(JPanel panel, MainFrame main) {

this.panel=panel;

this.mainFrame=main;

jp1=new JPanel();

jp1.setLayout(new GridLayout(TOTAL,1,1,4));

//初始化20个MenuItem

items =new JMenuItem[TOTAL];

for(int j=0;j

items[j]=new JMenuItem("");

items[j].addMouseListener(this);

}

//处理鼠标右击问题

right_Click=new JPopupMenu();

new_book=new JMenuItem("New");//新建笔记

delete_book=new JMenuItem("Delete"); //删除笔记

properties_book=new JMenuItem("Properties");

delete_book.addActionListener(this);

properties_book.addActionListener(this);

new_book.addActionListener(this);

//right_Click.

right_Click.add(new_book);

right_Click.addSeparator();

right_Click.add(delete_book);

right_Click.add(properties_book);

JLabel label=new JLabel("All Note & Note All ");

label.setEnabled(false);

label.setBackground(Color.gray);

41

jscroll2 = new JScrollPane(jp1);//为Panel添加滚动条

panel.setLayout(new BorderLayout());

panel.add(label,"North");

panel.add(jscroll2);

} //在新建或删除是需要刷新,并附带刷新

RightPanel中的内容

public void update_Mid_View()

{

File file = new File(mainFrame.getBook_Path());

if(file.isDirectory())

{

lists = file.listFiles();

for(int j=0;j

items[j].setText("");

items[j].setArmed(false);

items[j].removeMouseListener(this);//避免某个笔记被删除之后还可以被点的情况

}

for(int i=0;i

items[i].setText(lists[i].getName());//创建20个JLanel

items[i].addActionListener(this);

items[i].addMouseListener(this);

jp1.add(items[i],i );

//在该项上右击弹出一个选择框

items[i].setComponentPopupMenu(right_Click);

}

//更新右边的Panel 里面应该没有内容

mainFrame.rightPanel.update_Right_view();

}

}

public void showfile(int y) {

String filename1 = lists[y].getAbsolutePath();

FileInputStream inputStream=null;

ObjectInputStream ois = null;

try {

inputStream=new FileInputStream(filename1);

ois=new ObjectInputStream(inputStream);

42

mainFrame.rightPanel.textPane.setDocument((Document)ois.readObject());

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

try {

ois.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

@Override public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getActionCommand().equals("New")){

String note_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记",

JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION);

//如果用户点了取消 则不用新建笔记

if(!note_name.equals("null")){

File file=new File(mainFrame.book_Path+"/"+note_name+".ser");

if(!file.exists())

{

try {

file.createNewFile();

//为新建的笔记写入一个空白的对象 避免打开时报指针的错误

Tools.setDocument(file);

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

//刷新中间和左边的Panel

mainFrame.midPanel.update_Mid_View();

}

}else if(e.getActionCommand().equals("Delete")){

File file=new File(this.getTemp_path());

file.delete();

//删除笔记之后需要刷新右边的两个Panel

43

mainFrame.midPanel.update_Mid_View(); }else if(e.getActionCommand().equals("Properties")){

Tools.showMessage(this.getTemp_path(),"笔记"); }else

{

mainFrame.rightPanel.textPane.setEditable(true);

mainFrame.setNote_Path(mainFrame.getBook_Path()+"/"+e.getActionCommand());

for (int x=0;x

if (e.getActionCommand().endsWith(lists[x].getName()))

this.showfile(x);

} } }

@Override public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub //设置选中部分的情况

JMenuItem jmtemp=null; for(int i=0;i

if(arg0.getComponent().equals(items[i]))

{

jmtemp=(JMenuItem)arg0.getSource();

jmtemp.setArmed(true);

}else{

items[i].setArmed(false);

} }

//记录被要在右边显示出内容的笔记途径

可以在菜单中删除该笔记

mainFrame.setNote_Path(mainFrame.getBook_Path()+"/"+jmtemp.getText());

mainFrame.menu.delete_item[0].setEnabled(true);//允许删除笔记

mainFrame.menu.delete_item[1].setEnabled(false);//不允许删除笔记本 } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub

JMenuItem jm=(JMenuItem)arg0.getSource(); //将当前笔记的途径

存到辅助路径中

44

this.setTemp_path(mainFrame.getBook_Path()+"/"+jm.getText()); } @Override public void mouseExited(MouseEvent arg0) {

// TODO Auto-generated method stub

JMenuItem jm=(JMenuItem)arg0.getSource();

//jm.setBackground(new Color(238,238,238)); } @Override public void mousePressed(MouseEvent arg0) {

// TODO Auto-generated method stub

} @Override public void mouseReleased(MouseEvent arg0) {

// TODO Auto-generated method stub }

public String getTemp_path() {

return temp_path; } public void setTemp_path(String temp_path) {

this.temp_path = temp_path; } }

(9) RightPanel.java package view; /** * 改用JTextPane实现图片即单个文字更改字体或颜色的功能

*/ import java.awt.*; import java.awt.event.*; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date;

import javax.swing.*; import javax.swing.text.Document;

import common.Tools;

45 public class RightPanel extends JPanel implements ActionListener{

JPanel panel;

MainFrame mainFrame;

//文本域

JTextPane textPane; JScrollPane jsp_Pane; //鼠标右击部分

JPopupMenu right_Click; JMenuItem cutItem,copyItem,pasteItem,saveItem; //插入图片与更改字体

JToolBar toolBar; JButton image_Button,font_Button,timeButton;

public RightPanel(JPanel panel,MainFrame mainFrame) {

this.mainFrame=mainFrame;

this.panel=panel;

//创建一个 文本域存放文字

JTextArea

textPane =new JTextPane();

//设置自动换行

textPane.setFont(new Font("", 1, 12));

jsp_Pane=new JScrollPane(textPane);//滚轮

//设置鼠标右击弹框效果

//cut

cutItem=new JMenuItem("Cut",new ImageIcon("image/cut.png"));

cutItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl x"

cutItem.addActionListener(this);

//copy

copyItem=new JMenuItem("Copy",new ImageIcon("image/copy.png"));

copyItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl O"

copyItem.addActionListener(this);

//paste

pasteItem=new JMenuItem("Paste",new ImageIcon("image/haha.png"));

pasteItem.setAccelerator(KeyStroke.getKeyStroke("ctrl v"));//设置快捷键 "ctrl v"

pasteItem.addActionListener(this);

saveItem=new JMenuItem("Save",new ImageIcon("image/save.png"));

saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl s"));

saveItem.addActionListener(this);

//将各菜单项添加到 右击菜单组中

right_Click=new JPopupMenu();

//right_Click.

right_Click.add(cutItem);

46

right_Click.add(copyItem);

right_Click.add(pasteItem);

right_Click.addSeparator();

right_Click.add(saveItem);

//为右击注册监听

textPane.setComponentPopupMenu(right_Click);

//可以懂工具条部分

toolBar=new JToolBar("工具");

image_Button=new JButton("插入图片");

image_Button.addActionListener(this);

font_Button=new JButton("更改字体颜色");

font_Button.addActionListener(this);

timeButton = new JButton("插入时间");

timeButton.setToolTipText("点击可以插入当前时间");

timeButton.addActionListener(this);

toolBar.add(image_Button);

toolBar.add(font_Button);

toolBar.add(timeButton);

//将工具条和textPane添加到panel

panel.setLayout(new BorderLayout());

panel.add(toolBar,"North"); panel.add(jsp_Pane); } //更新文本框

在新建或删除

笔记或笔记本

的时候需要刷新 public void update_Right_view() { textPane.setText(""); textPane.setEditable(false); } //保存当前笔记

public void book_Save() { FileOutputStream outputStream=null; ObjectOutputStream oos=null; try {

outputStream=new FileOutputStream(mainFrame.getNote_Path());

oos=new ObjectOutputStream(outputStream);

oos.writeObject(textPane.getDocument()); } catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

47

}finally{

try {

oos.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} }

@Override public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

if(e.getActionCommand()=="Cut"){//剪切

textPane.cut();

}else if(e.getActionCommand()=="Copy"){//复制

textPane.copy();

}else if(e.getActionCommand()=="Paste"){//粘贴

textPane.paste();

}else if(e.getActionCommand()=="Save"){//保存

this.book_Save();

}else if(e.getSource()==image_Button){//插入图片

String temp=Tools.open_Choose();

if(!temp.equals("not")){

textPane.insertIcon(new ImageIcon(temp));

}

}else if(e.getSource()==font_Button){//修改字体颜色

Color c=JColorChooser.showDialog(this, "Color", Color.black);

textPane.setForeground(c);

}else if(e.getSource()==timeButton){//插入时间

Date now = new Date();

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式

String hehe = dateFormat.format( now );

textPane.replaceSelection(hehe);

} } }

48

上一篇:java网上商城管理系统下一篇:h7n9禽流感防治的常识