实验308010211李国龙文档格式.docx

上传人:b****7 文档编号:22640082 上传时间:2023-02-05 格式:DOCX 页数:26 大小:428.50KB
下载 相关 举报
实验308010211李国龙文档格式.docx_第1页
第1页 / 共26页
实验308010211李国龙文档格式.docx_第2页
第2页 / 共26页
实验308010211李国龙文档格式.docx_第3页
第3页 / 共26页
实验308010211李国龙文档格式.docx_第4页
第4页 / 共26页
实验308010211李国龙文档格式.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

实验308010211李国龙文档格式.docx

《实验308010211李国龙文档格式.docx》由会员分享,可在线阅读,更多相关《实验308010211李国龙文档格式.docx(26页珍藏版)》请在冰豆网上搜索。

实验308010211李国龙文档格式.docx

但是事实上,这三者相互补充,他们满足不同的需求。

抽象窗口工具集为简单的applet程序设计,它不适宜用来构建丰富的桌面图形界面。

但是从开始被介绍,它至少有一个好的思想就是布局管理,它负责为组件找到一个放置的位置,这种机制是必需的,因为GUI组件在不同的操作系统中有不同的尺寸。

现在,AWT扩展了组件模型和事件处理机制(由JavaBeans说明定义),新的图形API(称为Java2D),支持剪贴板和拖拉操作,打印,准入,和新的GUI工具Swing,所有这些都归到Java基础类中(JFC)。

它有一套完全的组件从按钮到文件域到表格,树型和文件编辑器。

这些组件不依赖于操作系统本地的部件,而是用原始的图形像直线、矩形、文字画出。

这种画代表感观插件,它能够模仿本地的感观。

Swing也有平台无关的外观称为"

Metal"

Swing的结构由MVC模式得到启发,这里在屏幕上的视觉GUI组件和支持数据的模型对象之间有一个明显的分隔,在GUI和数据层之间的通讯基于事件。

首先创建一个聊天程序的界面,然后添加事件,在事件中实现两个私聊和公聊功能,并用JFileChooser实现保存聊天记录的功能。

将程序打包为可执行的jar文件参考资料如下:

1、JAR文件包

JAR文件就是JavaArchiveFile,顾名思意,它的应用是与Java息息相关的,是Java的一种文档格式。

JAR文件非常类似ZIP文件——准确的说,它就是ZIP文件,所以叫它文件包。

JAR文件与ZIP文件唯一的区别就是在JAR文件的内容中,包含了一个META-INF/MANIFEST.MF文件,这个文件是在生成JAR文件的时候自动创建的。

举个例子,如果我们具有如下目录结构的一些文件:

  ==

  `--test

   `--Test.class

把它压缩成ZIP文件test.zip,则这个ZIP文件的内部目录结构为:

  test.zip

如果我们使用JDK的jar命令把它打成JAR文件包test.jar,则这个JAR文件的内部目录结构为:

  test.jar

  |--META-INF

  | `--MANIFEST.MF

    `--Test.class

2、创建可执行的JAR文件包

制作一个可执行的JAR文件包来发布你的程序是JAR文件包最典型的用法。

Java程序是由若干个.class文件组成的。

这些.class文件必须根据它们所属的包不同而分级分目录存放;

运行前需要把所有用到的包的根目录指定给CLASSPATH环境变量或者java命令的-cp参数;

运行时还要到控制台下去使用java命令来运行,如果需要直接双击运行必须写Windows的批处理文件(.bat)或者Linux的Shell程序。

因此,许多人说,Java是一种方便开发者苦了用户的程序设计语言。

其实不然,如果开发者能够制作一个可执行的JAR文件包交给用户,那么用户使用起来就方便了。

在Windows下安装JRE(JavaRuntimeEnvironment)的时候,安装文件会将.jar文件映射给javaw.exe打开。

那么,对于一个可执行的JAR文件包,用户只需要双击它就可以运行程序了,和阅读.chm文档一样方便(.chm文档默认是由hh.exe打开的)。

那么,现在的关键,就是如何来创建这个可执行的JAR文件包。

创建可执行的JAR文件包,需要使用带cvfm参数的jar命令,同样以上述test目录为例,命令如下:

jarcvfmtest.jarmanifest.mftest

这里test.jar和manifest.mf两个文件,分别是对应的参数f和m,其重头戏在manifest.mf。

因为要创建可执行的JAR文件包,光靠指定一个manifest.mf文件是不够的,因为MANIFEST是JAR文件包的特征,可执行的JAR文件包和不可执行的JAR文件包都包含MANIFEST。

关键在于可执行JAR文件包的MANIFEST,其内容包含了Main-Class一项。

这在MANIFEST中书写格式如下:

Main-Class:

可执行主类全名(包含包名)

例如,假设上例中的Test.class是属于test包的,而且是可执行的类(定义了publicstaticvoidmain(String[])方法),那么这个manifest.mf可以编辑如下:

test.Test<

回车>

这个manifest.mf可以放在任何位置,也可以是其它的文件名,只需要有Main-Class:

test.Test一行,且该行以一个回车符结束即可。

创建了manifest.mf文件之后,我们的目录结构变为:

  |--test

  | `--Test.class

  `--manifest.mf

这时候,需要到test目录的上级目录中去使用jar命令来创建JAR文件包。

也就是在目录树中使用“==”表示的那个目录中,使用如下命令:

之后在“==”目录中创建了test.jar,这个test.jar就是执行的JAR文件包。

运行时只需要使用java-jartest.jar命令即可。

需要注意的是,创建的JAR文件包中需要包含完整的、与Java程序的包结构对应的目录结构,就像上例一样。

而Main-Class指定的类,也必须是完整的、包含包路径的类名,如上例的test.Test;

而且在没有打成JAR文件包之前可以使用java<

类名>

来运行这个类,即在上例中javatest.Test是可以正确运行的(当然要在CLASSPATH正确的情况下)。

把本实验的程序使用jar工具打包成可执行的jar文件。

三、问题步骤

注解:

代码的注释在工程文件中,这里只有简单说明。

1.创建一个聊天程序的界面。

我使用的是WindowBuilder插件。

首先创建项目,和平时不同,这次的步骤是:

File-New-Other得到如下界面:

选择JFrame创建一个类。

选择Design来画界面。

界面的画法很简单,只需要放组件就可以了,不再一一演示了,使用到的组件对应的代码以及解释如下:

/*

*添加菜单条

*/

JMenuBarmenuBar=newJMenuBar();

setJMenuBar(menuBar);

*添加File菜单

JMenumnFile=newJMenu("

File"

);

menuBar.add(mnFile);

*File菜单下添加子菜单:

Save,单击Save键将调用saveActionPerformed(e)

*函数,保存聊天内容

JMenuItemmntmNewMenuItem=newJMenuItem("

Save"

mntmNewMenuItem.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

saveActionPerformed(e);

}

});

mnFile.add(mntmNewMenuItem);

/*

Exit,单击Exit键将调用exitActionPerformed(e)

*函数,进入是否退出系统的操作

JMenuItemmntmExit=newJMenuItem("

Exit"

mntmExit.addActionListener(newActionListener(){

exitActionPerformed(e);

mnFile.add(mntmExit);

*添加Action菜单

JMenumnAction=newJMenu("

Action"

menuBar.add(mnAction);

*以下几段是放置公聊,私聊面板的,而且设置为不可编辑的

publicScrollPane=newJScrollPane();

textTabbedPane.addTab("

Public"

null,publicScrollPane,null);

publicTextPane=newJTextPane();

publicTextPane.setEditable(false);

publicScrollPane.setViewportView(publicTextPane);

privateScrollPane=newJScrollPane();

Private"

null,privateScrollPane,null);

privateTextPane=newJTextPane();

privateTextPane.setEditable(false);

privateScrollPane.setViewportView(privateTextPane);

*添加标签:

SendTo

JLabeluserLabel=newJLabel("

SendTo"

userLabel.setFont(newFont("

楷体"

Font.PLAIN,16));

Message:

JLabelmessageLable=newJLabel("

"

messageLable.setFont(newFont("

*添加文本输入框用来输入聊天信息

messageText=newJTextField();

messageText.setColumns(10);

*添加发送消息的Send按钮,点击Send会调用sendActionPerformed(e)

*函数来发送消息,显示到对应的区域

sendButton=newJButton("

Send"

sendButton.addActionListener(newActionListener(){

sendActionPerformed(e);

sendButton.setFont(newFont("

*添加组合框,组合框第一行是:

选择一个在线好友,它其实对应的是公聊,

*还没有选择一个人私聊,这里模拟的是ClientA和ClientB聊天,当

*使用者是ClientA时,组合框的第二行和第三行为ClientB和ClientC,

*当使用者是ClientB时,组合框的第二行和第三行为ClientA和ClientC,

userComboBox=newJComboBox();

userComboBox.addItem("

选择一个在线好友"

if(mySelf.equals("

ClientA"

)){

userComboBox.addItem("

ClientB"

}elseif(mySelf.equals("

}

userComboBox.addItem("

ClientC"

最终得到的界面为:

2.添加事件实现公聊,私聊功能。

这里主要是实现Send功能。

流程就是读取输入文本框中的内容,根据组合框中选择的项决定是公聊还是和某人私聊,然后点击Send,则内容显示到公聊窗口或者私聊窗口,另一个人的对应窗口也会显示相应的聊天消息。

Send的实现如下:

*发送消息的函数,它实现了两个窗口的通讯

*/

privatevoidsendActionPerformed(ActionEventevt){

//将输入文本框的内容赋给字符串message

Stringmessage=this.messageText.getText();

//得到当前组合框的索引值,0代表第一项,1代表第二项,2代表第三项

intindex=this.userComboBox.getSelectedIndex();

*index为0代表公聊

if(index==0){

//切换到公聊窗口

textTabbedPane.setSelectedIndex(0);

/*

*初始时flag0为true,聊天板上为空,输入第一条消息后聊天板不为空,

*则flag0设为false

*/

if(flag0){

flag0=false;

publicTextPane.setText("

我:

+message);

/*

*根据发送消息的人是谁,设置另一个人的对应窗口显示的内容为Client*:

+

*消息内容的形式

*/

if(mySelf.equals("

frame2.textTabbedPane.setSelectedIndex(0);

frame2.publicTextPane.setText("

ClientA:

}elseif(mySelf.equals("

frame.textTabbedPane.setSelectedIndex(0);

frame.publicTextPane.setText("

ClientB:

}

*flag0为false则面板不为空,则采用获取原来内容+新内容再放置到面板上的方式

}else{

publicTextPane.setText(publicTextPane.getText()+'

\n'

+"

frame2.publicTextPane.setText(frame2.publicTextPane.getText()+'

frame.publicTextPane.setText(frame.publicTextPane.getText()+'

*index为1代表私聊,私聊对象为ClientA或ClientB

}elseif(index==1){

//切换到私聊窗口

textTabbedPane.setSelectedIndex

(1);

*初始时flag1为true,聊天板上为空,输入第一条消息后聊天板不为空,

*则flag1设为false

if(flag1){

flag1=false;

privateTextPane.setText("

我对"

+userComboBox.getSelectedItem()+"

说:

*根据发送消息的人是谁,设置另一个人的对应窗口显示的内容为Client*对我说:

frame2.textTabbedPane.setSelectedIndex

(1);

frame2.privateTextPane.setText("

ClientA对我说:

frame.textTabbedPane.setSelectedIndex

(1);

frame.privateTextPane.setText("

ClientB对我说:

*flag1为false则面板不为空,则采用获取原来内容+新内容再放置到面板上的方式

privateTextPane.setText(privateTextPane.getText()+'

frame2.privateTextPane.setText(frame2.privateTextPane.getText()+'

frame.privateTextPane.setText(frame.privateTextPane.getText()+'

*index为2代表和ClientC私聊,因为内容和ClientB,ClientA二人聊天

*一致,所以不再多写了

}elseif(index==2){

}

演示一下发消息:

公聊:

私聊:

3.将“公聊”及“私聊”的聊天内容保存为文件以及退出系统。

保存到文件就是利用JFileChooser来打开文件选择框,然后利用文件的写操作将聊天内容写入文件中。

代码如下:

*保存聊天内容的函数

privatevoidsaveActionPerformed(ActionEventevt){

//将公聊内容赋给字符串ss

Stringss=this.publicTextPane.getText();

//将私聊内容赋给字符串ss2

Stringss2=this.privateTextPane.getText();

//创建文件选择框

JFileChooserjfc=newJFileChooser();

*打开文件选择框进行保存文件操作

if(JFileChooser.APPROVE_OPTION==jfc.showSaveDialog(this)){

//要保存的文件

FilesaveFile=jfc.getSelectedFile();

try{

//文件不存在则创建

if(!

saveFile.exists()){

saveFile.createNewFile();

BufferedWriterbw=newBufferedWriter(newFileWriter(saveFile));

//按换行符分割字符串ss,使得聊天内容写入文件看起来清楚

S

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1