当前位置:文档之家› 基于JAVA的局域网五子棋和聊天设计与实现

基于JAVA的局域网五子棋和聊天设计与实现

摘要

目前,随着计算机网络的的发展,游戏已经成为现在人生活的一部分,人们以不同的方式通过网络来娱乐,休闲。以计算机技术和网络技术为核心的现代网络技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所喜好。当然,为了满足没有网络同样能娱乐的要求,许多小游戏做成了单机网络的双功能。

本程序使用JA VA语言实现,通过对图形界面,绘图,布局管理器等去构造出五子棋游戏界面,在此基础上,利用套接字的知识,建立起服务器与客户端之间的连接,利用多线程技术来处理服务器端与客户端之间的数据传输、通信问题,使得客户端和服务器端之间能够同步的进行处理。

通过对软件的编写,更深入的理解万物皆对象这句话的理解,增强了对象的封装能力,也体会到利用面向对象语言处理一些问题的优势。同时也加深了对多线程、流、套接字等高级技术的理解。

关键词:多线程,套接字,GUI,五子棋

Abstract

Now, with the development of computer network, the game has become a part of life now people, people in different ways through the network to the entertainment and leisure. Computer and network technology as the core of modern network technology has been widely used in real life and production, casual game set interesting, entertaining, interactive and puzzle in one, has become the majority population leisure, but also for the majority preference.Of course, in order to meet the no network requirements of the same entertainment, many games made a stand-alone and network function.

This program uses the JAVA programming language to achieve, through the GUI, graphics, layout manager to construct the interface of Gobang, on this basis, the use of the knowledge of the socket, and establish a connection between the server and client, multi threading technology to handle data transfer between the server and the clients, communication problems, making the synchronization processing between the client and server side.

Through the preparation of the software, a more in-depth understanding of all things is an object of this sentence to understand, enhance the package of the object, but also realize the advantages of object-oriented language to deal with some problems. Also deepened the understanding of the multi-threaded, streams, sockets and other senior technical.

KEY WORDS: multiple threads,socket, GUI, Gobang

目录

前言 (1)

第1章绪论 (2)

1.1JA VA语言历史 (2)

1.2JA VA语言的特点 (2)

1.3JA VA的开发环境 (3)

1.4JA VA的编译环境 (3)

1.41 JDK介绍及安装 (4)

1.42 JA VA开发工具 (4)

1.5S OCKET 机制 (5)

第2章系统需求分析 (6)

2.1五子棋的发展史 (6)

2.2五子棋特点、规则和界面需求 (6)

2.3五子棋功能需求 (7)

2.31 五子棋游戏功能 (7)

2.32 聊天功能 (7)

2.4流程图 (7)

第3章系统设计与实现 (9)

3.1系统设计思路 (9)

3.11 界面设计思路 (9)

3.12 算法的设计思路 (9)

3.13 程序的设计流程 (10)

3.2系统设计实现 (10)

3.24 GobangBoard.java类实现 (12)

3.25 GoBangMain.java类的实现 (15)

3.26 Message.java类的实现 (22)

第4章系统运行和测试 (24)

4.1系统运行 (24)

4.2系统测试 (26)

结论 (28)

致谢 (29)

参考文献 (30)

前言

电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java语言作为一种面向对象的编程语言,具有分布式,可移植,高性能,多线程等特点。通过系统的学习,人们就可以使用它开发出功能齐全,满足特殊需求的应用程序。Java语言易学易用,对学习者掌握技能,开拓思维都有很大的帮助。

我作为一名学生,在系统的学习了Java语言之后,经常用它搞一些小程序。这次毕业设计,正好将学过的Java语言中的各种技术综合起来,用eclipse开发工具编写一个小游戏,既对自己学过的技能进行一次检验,也能系统地将学过的知识复习巩固。

随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展迅速,五子棋凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。

第1章绪论

1.1 JA V A语言历史

Java语言其实最是诞生于1991年,起初被称为OAK语言,是SUN公司为一些消费性电子产品而设计的一个通用环境。他们最初的目的只是为了开发一种独立于平台的软件技术,而且在网络出现之前,OAK可以说是默默无闻,甚至差点夭折。但是,网络的出现改变了OAK的命运。

在Java出现以前。Internet上的信息内容都是一些乏味死板的HTML文档。这对于那些迷恋于WEB浏览的人们来说简直不可容忍。他们迫切希望能在WEN中看到一些交互式的内容,开发人员也极希望能够在WEB上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保障。对于用户的这种要求,传统的编程语言显得无能为力,面SUN的工程师敏锐地察觉到了这一点,从1994年起,他们开始将OAK技术应用于WEB上,并且开发出了HotJava的第一个版本。当SUN公司1995年正式以Java这个名字推出的时候,几乎所有的WEB开发人员都想到:噢,这正是我想要的。于是Java成了一颗耀眼的明星,丑小鸭一下了变成了白天鹅。

1.2 JA V A语言的特点

1.简单(Simple)

制定Java的原则之一,是要建立一种结构简单而且使用容易的系统,可以让用户不必接受很深的训练就可以开始设计程序,所以Java的语法尽可能与在当前许多程序设计师都采用的C及C++语言相似。并且,Java删除了C及C++许多极少使用、不易理解或常被混淆的功能,多多重继承、指针等。

2.面向对象(Object-Oriented)

面向对象是近年来信息界广为使用的概念和技术。它有许多良好的特性。对象的封装性可以使对象的接口定义明确;继承性可以增加软件的可重用性,有助于分类及模版设计等。实现面向对象的概念及其各种良好的特性是Java的设计理念之一。

3.分布式(Distributed)

计算机网络的发展使得信息应用朝着分布式的环境发展,所以现代的信息开发语言及环境要有配合分布式的特性及功能。Java具有一个网络功能的程序库,其中包含与如HTTP和FTP等TCP/IP网络通信协议整合的能力。

4.强壮性(Robust)

由Java所编写的程序要能在各种情况下运行,而且必须具有高的稳定性。Java在制定时即加入了能防止存储器被覆写和数据损坏的相关处理机制。

5.安全性(Secure)

Java是被设计用于网络及分布式环境中的,所以安全性是一个很重要的考虑。Java拥有数个从简单到复杂的安全保护措施,能有效地防止病毒的侵入和破坏行为的发生。

6.结构中立性(Architecture Neutral)

在网络上存在许多不同类型的计算机,从中央处理器到操作系统的机构均有很高的差异性。因此要使应用程序在每一种机器上均能运行是相当困难的。针对这个目的,Java的编译器可以产生一种结构中立的目标码文件格式――字节码(Byte Code)。这种字节码可以在许多种不同的计算机上运行。

7.多线程(Multithreaded)

多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。

1.3 JA V A的开发环境

Java是由Sun微系统公司所发展出来的程序语言,它本身是一种对象导向

(Object-Oriented)的程序语言。JAVA目前在手机上应用很多多的就是JAVA游戏。

Java也号称是能跨平台使用的语言,这主要是因为Java本身被编译之后,并不是直接产生可执行的码,而是产生一种中间码叫作ByteCode,这种码必需在透过Java 的直译器来解读它,才能够真正的被执行,所以只要平台上装有这种Java的直译器,就能解读ByteCode也就能执行Java编译过的程序,故与Java程序是在哪种平台上被编译的,就完全没有关系了。Java写出来的程序可分为两类,分别是Java Applet与一般的Application,而Application 这一类就与一般的程序如C++的作用是比较类似的,是一个独立可执行的应用程序,像HotJava是一个浏览器,且就是使用Java程序所开发出来的。最常见的Java 程序包括应用程序和applets。应用程序是单独的程序,诸如HotJava浏览器软件就是用Java语言编写的。Applets类似于应用程序,但是它们不能单独运行,Applets可以在支持Java的浏览器中运行。Applet主要是内置于HTML网页中,在浏览时发挥作用。

1.4 JA V A的编译环境

JAVA编译环境主要是JDK+开发工具。JDK时JAVA核心编译环境,开发工具在JDK 的基础上运行的。如果没有JDK,开发工具无法正常运行。开发工具能提高编程效率

1.41JDK介绍及安装

JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者编译,调

试和运行用Java语言写的applet和应用程序所需的工具组成。JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK(Software development kit)。

JDK中包括完整的JRE(Java Runtime Environment,Java运行环境),也被称为private runtime。包括了用于产品环境的各种库类,以及给开发员使用的补充库,如国际化的

库、IDL库。

然后运行JDK 5.0安装程序jdk-1_5_0_06-windows-i586-p.exe,安装过程中所有选项保持默认;

最后配置JDK的环境变量:在“我的电脑”上点右键—>“属性”—>“高级”—> “环境变量(N)”。如下图1-1

图1-1 环境变量的配置

新建系统变量JAVA_HOME:C:\Program Files\Java\jdk1.5.0_06新建系统变量CLASSPATH:.;%JAVA_HOME%\lib;(注意:点号表示当前目录,不能省略)在系统变量Path的值的前面加入以下内容:%JAVA_HOME%\bin;(注意:这里的分号不能省略)

1.42JA VA开发工具

1.用功能强大的开源工具Eclipse来开发,相对较为方便,eclips比较通用,而且支持很多插件。

2.Java主要是利用文本编辑器来完成程序设计的编辑工作,可以使用各种文本编辑器来编写,例如:记事本、Editplus和UltraEdit软件等都可以用来实现。

3.Jbulder也是java的一款开发工具,功能更全面,而且操作好多都是即见即所得的,

就想VB一样方便快捷,不过它是一款收费软件,所以不是一些大公司一般不会使用它来作为java的开发工具。

1.5 Socket 机制

Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket 将结果返回给用户。

Socket通信机制提供了两种通讯方式:有联接和无联接方式,分别面向不同的应用需求。使用有联接方式时,通信链路提供了可靠的,全双工的字节流服务。在该方式下,通信双方必须创建一个联接过程并建立一条通讯链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕关闭此联接过程。使用无联接方式时其系统开销比无联接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿。在该方式下,通信双方不必创建一个联接过程和建立一条通讯链路,网络通信操作在不同的主机和进程之间转发进行。

在java中使用套接字相当简单,Java API为处理套接字的通信提供了一个类

https://www.doczj.com/doc/5c3065976.html,.Socket。使得编写网络应用程序相对容易。JAVA支持流套接字(stream socket)和数据报套接字(datagram socket)。流套接字使用TCP(Transmission Control Protocol,传输控制协议)进行数据传输,而数据报套接字使用UDP(User Datagram Protocol,用户数据报协议)。

在Socket层实现的Java网络程序是严格同步的。从一台机器发送数据的操作要求对应一个从其他机器接受数据的操作。

第2章系统需求分析

2.1 五子棋的发展史

五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row 的缩写) ,亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。

五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。

2.2 五子棋特点、规则和界面需求

五子棋的娱乐性强、规则简单、易学、流行性广,普通人不需长时间专门训练即可自如行棋,因此极受大众喜欢。

五子棋规则有很多,本程序主要用无禁手的规则。

五子棋无禁手规则为:

1.行棋:一人流轮一著下于棋盘空点处。

2.胜负:先把五枚或以上己棋相连成任何横纵斜方向为胜。超过五子也算胜

主要是靠交换黑白双方行棋权来使开局平衡,从而达到双方公平竞技的目的。

五子棋界面需求:

1.一个15*15方格棋盘,当需要落子的时候点击棋盘出现相应的黑白棋子。

2.一个聊天输入框用于聊天输入信息;一个聊天发送按钮用于发送聊天信息;一个聊天信息显示框,用于显示聊天历史信息。

3.一些游戏相关按钮,比如建立游戏按钮,加入游戏按钮,退出游戏按钮。

4.一些游戏信息提示框,提示玩家该下棋了等信息。

5.人机界面需求简洁合理易懂,不需要专业知识就能玩。

2.3 五子棋功能需求

五子棋主要需要2大功能:局域网五子棋游戏功能和2个玩家间聊天功能。 2.31 五子棋游戏功能

五子棋游戏需求一般游戏功能:建立游戏,加入游戏,退出游戏。

建立游戏:当玩家按下建立游戏,系统自动建立一个服务器端,等待其他玩家加入。

加入服务器:玩家按下加入服务器按钮,显示一个提示框,输入服务器端的IP 和端口号连接服务器,建立2人之间的游戏

退出游戏:点击退出游戏按钮,游戏结束系统自动断开连接,关闭界面。 2.32 聊天功能

当服务器与客户端建立连接后,玩家之间能文字交流,玩家从聊天输入框输入信息,输入完成后点击发送按钮,信息能在2个玩家的聊天信息显示框都显示消息的发送人,时间和内容。 功能结构图如下图2-1:

图2-1 功能需求图

2.4 流程图

初始化包括游戏初始化界面、建立服务器和建立连接,然后到程序主控制,主控制控制轮流黑白棋落子,每当有棋子落下都判断输赢否。没有输赢或赢则继续放回主控制,当出现输赢则结束。

其流程图如图2-2:

聊天

发送消息

建立游戏

加入游戏

退出游戏

接收消息

五子棋

游戏

图2-2 流程图

开始

1.初始化

2.主控

3.白方下子

白方

黑方

否则

4.判断胜

结束 3.黑方下子

第3章系统设计与实现

3.1 系统设计思路

3.11界面设计思路

一个好的游戏离不开好的界面。界面是游戏给人的第一印象,想要吸引人,界面须是清晰美观,让人一看就懂。

一开始五子棋界面考虑,包括棋盘,棋子,聊天输入框,输出框,工具条,然后就是一些提示信息。比如:提示玩家连接服务器,建立游戏,加入游戏,退出游戏,和提示该玩家走棋了,玩家输了,玩家赢了。最后考虑整个界面布局。

界面实现,开始考虑的时候是棋盘考虑使用图片,棋子也是用图片。开始用图片感觉美观,方便,把JAVA程序的美感不足给弥补。但是后面使用的时候图片不好定位,对后面算法实现很麻烦。

布局,开始考虑的时候,想着是服务器,一个界面,客户端一个界面。当下棋的实现先启动服务器,然后,2个玩家在启动2个客户端。通过服务端了进行交互。但是后开考虑到,服务器完全没必要要界面,在后台运行就行。把服务器启动通过界面按钮控制启动就行。所以就只做一个界面就可以实现。

3.12算法的设计思路

五子棋游戏的算法主要就是判断输赢了。

五子棋,也叫“五子连珠”顾名思义输赢就是要五子相连。这样在棋盘上就有很多种情况。如下图3-1:

图3-1 赢棋的四种情况

在这个15*15标准的五子棋盘中五连有四种情况“横”,“竖”,“左斜(/)”,“右斜(\)”。只要出现上面四种情况五子或五子以上相连并且颜色一样就可判断赢了。

开始设计的时候设想:每下一个棋子,则遍历整个棋盘的棋子,看是否有符合胜利条件的黑白棋,这样算法的简便了,但是效率确太低了。后面优化了:每下一个棋子只要遍历这个棋子的“上” “下” “左” “右” “左上斜” “右上斜”“左下斜” “右下斜”这八个方向的棋子五个棋子是否有赢的情况即可。这样可以优化算法,提高效率。

3.13程序的设计流程

在JAVA编程思想中有句很有深度的话“万物皆对象”,JAVA是一门面向对象的语言。所以JAVA的程序也是要把现实的实物的抽象为对象。

本程序五子游戏用的基于JAVA TCP/IP的Scoket机制。这机制的客户端和服务器有三种状态:服务器启动等待连接(WAITING),服务器连接(CONNECT),未连接

(UN_START)。后面的操作都是在这三种状态下进行运行的。所以把这三个状态设置成三种标志位,用一个接口类把这三种状态存储。

五子棋游戏应该有2个玩家,棋盘,棋子,还有交流的对话框。我把其都抽象为对象。

在Scoket机制中2个玩家对应的2中状态,一个玩家是服务器(ServleScokeet)另一个玩家肯定是客户端。通过按钮控制让其玩家可以自己选择为为客户端还是服务器端。

把棋盘封装成一个类,棋盘的属性和方法比如放入其中。棋盘属性:行数,列数,格子大小,棋子分布等。棋盘的动作方法:画棋盘,加入棋子,清理清盘,判断输赢,判断要下棋位置棋子是否存在,设置棋盘上鼠标样式等。

把棋子也封装成类。棋子属性:颜色,大小,坐标。

玩家发送的消息也封装成一个类。消息的属性:发消息的用户名,发消息时间,发消息内容。

最后在一个主类里对这些对象进行操作。

3.2 系统设计实现

程序一共分了五个类:

1.Chess类主要是封装了一些棋子属性方法。如图3-2

2.Message类是封装了一些聊天信息的属性和方法。

3.GoBangBoard类是棋盘主要是一些棋盘的属性和操作。

4.GoBangMain类是包含Main()方法类,是整个程序主类对全局进行操作。

5.Status类是保存了服务器和客户端的三种状态。

这五个类图如下图3-2至图3-4:

图3-2 Chess类图

图3-3 Message类图

图3-4 GoBangBoard类图

图3-4 GoBangMain类图3.24GobangBoard.java类实现

这个类继承了Jpanel容器类,为后面的GobangMain类添加提供方便。在这个类始化的时候,通过构造器传入GobangMain类型的一个对象实现GobangMain主类与这个类的连接,在这个类里面也能获取GobangMain的方法和属性。

addMouseMotionListener(new MouseMotionAdapter()

{

public void mouseMoved(MouseEvent e)

{

if (!app.isConnected() || !app.isReady())

{......}

}

});

addMouseListener(new MouseAdapter()

{

public void mouseClicked(MouseEvent e)

{

..........

if (x < 0 || x > GRID_ROWS || y < 0 || y > GRID_COLS)

return;

if (exists(x, y))

return;

Color c = app.getUserColor();

Chess chess = new Chess(x, y, Chess.DIAMETER, c);

......

});

在鼠标移动监听器中设置:当游戏已经连接并且到自己下棋的时候在棋盘界面鼠标会变成“小手形”其他时候鼠标会是系统默认样式。在鼠标点击监听器中设置了当轮到自己下棋,点击棋盘内不存在棋子的棋点将会出现一个棋子。

这个类包含了棋子判断输赢方法。

private boolean isWin(Chess chess)

{

int x = chess.getX();

int y = chess.getY();

int low_x = Math.max(x - 4, 0);

int low_y = Math.max(y - 4, 0);

loop1:

for (int i = low_x; i <= x; i++)

{

boolean result = true;

for (int j = i; j < i + 5; j++)

{

if (j > GRID_ROWS)

continue loop1;

if (getChess(j, chess.getY(), chess.getColor()) == null)

{

result = false;

}

}

if (result)

return true;

}

loop2:

for (int i = low_y; i <= y; i++)

{

......

}

loop3:

for (int i = low_x, j = low_y; i <= x && j <= y; i++, j++)

{

.......

}

loop4:

for (int i = x + 4, j = y - 4; i >= x && j <= y; i--, j++)

{

.....

}

return false;

}

棋盘每有棋子落下,都会调用判断输赢方法,传递一棋子对象chess下来。通过棋子自定义方法的chess.getX(),chess.getY()获取棋子的坐标索引x,y。

在分别取得x-4与0最大值low_x 和.y-4与0的最大值low_y。这样能避免出现负数索引。

当在loop1:x坐标索引的循环的时候是判断行是否在横向判断新落下棋子的横向左右各4个棋子是否有横向5连相同颜色的棋子,如果有则return true,结束方法,否则就继续程序。

getChess(j, chess.getY(), chess.getColor())传递一个棋子的X,Y坐标索引和一种棋子颜色查看这个棋子是否存在,颜色和所落子颜色相同与否,如果这个棋子存在并且

颜色相同的放回一个对象chess,否则放回null(空)。

loop2,loop3,loop4和判断loop1原理相似分别是判断列,右斜(\),和左斜(/)的循环。不同的是loop2的是y索引变化;loop3是x,y索引都递增变化;loop4是x索引递减,y索引递增变化。

3.25GoBangMain.java类的实现

这是一个主要的类,main方法程序入口在这个类。Public class GoBanMain extends JFrame它继承了JFrame这个顶级窗口类。

public static void main(String[] args)

{

GoBangMain frame = new GoBangMain();

frame.windowCenter(frame);

frame.setResizable(false);

frame.setVisible(true);

}

public void windowCenter(JFrame f)

{

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

Dimension frameSize = f.getSize()

}

f.setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

}

在这个main方法里,调用构造器新建了一个对象frame,然后调用自定义方法frame.windowCenter(frame)设置窗口居中,最后调用系统包装好方法设置窗口不可以编辑和可见。布局和其他操作都在构造器public GoBangMain()初始化好了。

在public void windowCenter(JFrame f)中通过Dimension screenSize =

Toolkit.getDefaultToolkit().getScreenSize()获取系统屏幕大小screenSize

然后在获取窗口frame的大小,假如窗口的高大于屏幕高度则让窗口高度等于屏幕高度,窗口长度也一样假如窗口宽度大于屏幕宽度则让窗口宽度等于屏幕宽度。窗口最后设置在屏幕位置setLocation,窗口位于屏幕宽度减去窗口宽度后的二分之一的X坐标,及屏幕高度减去窗口高度后二分之一的Y坐标。因此这个方法作用设置窗口居中。

Contain c = getContentPanel();

c.add(toolbar, BorderLayout.NORTH);

c.add(mainPanel, BorderLayout.CENTER);

c.add(statusBar, BorderLayout.SOUTH);

c.add(chatPanel, BorderLayout.EAST);

窗口frame布局,在窗口里首先获取的frame的容器c = getContentPanel()在容器中设置布局为BorderLayout方向布局。在北方放置工具容器Toolbar,在南方放置显一些提示状态容器StatusBar,在右边放置聊天容器CharPanel,在中间放置棋盘容器。界面布局图如图3-2:

图3-2 界面布局

在Toolbar中采用的是流水式布局,这容器放置了serverButton(建立服务器),connbutton(连接服务器),breakButton(结束游戏),exitButton(退出游戏)和author(关于作者)按钮。

在CharPanel中采用了还是Borderlayout布局,在其中放置一个文本域textShow在Center和另外个面板容器sendPanel在South实现上下样式,在sendPanel中也同样类似于CharPanel布局,放置了一个文本域textSend在Center,一个面板userPanel在South。在userPanel中采取的是Flowlayout流水式布局,加入了“用户名:”标签,和一个单行文本及发送按钮。

ButtonActionListener l = new ButtonActionListener();

SendAction sendAct = new SendAction();

serverButton.addActionListener(l);

connButton.addActionListener(l);

breakButton.addActionListener(l);

exitButton.addActionListener(l);

authorButton.addActionListener(l);

send.addActionListener(sendAct);

上面是个个按钮添加的监听事件。在最上面的一排按钮添加的是同一个自定义监听器ButtonActionListener对象l。

class ButtonActionListener implements ActionListener

{public void actionPerformed(ActionEvent e)

{Object src = e.getSource();

if (src == serverButton)

{Thread t = new Thread(new Runnable()

{private void runAsServer() throws IOException

{

user.setText("服务器玩家");

ss = new ServerSocket(12345);

相关主题
文本预览
相关文档 最新文档