package pk;
import java.awt.*;
import java.net.*;
import java.awt.event.*;
import java.io.*;
import java.util.Hashtable;
public class ChatArea extends Panel implements ActionListener,Runnable
{
Socket socket=null; //初始化套接口
DataInputStream in=null; //输入输出流
DataOutputStream out=null;
Thread threadMessage=null; //定义线程
TextArea talkxianshi,chatxianshi=null; //控件设置
TextField sendmessage=null;
Button ok,updatetalk,updatechat;
//Label 提示条=null;
String name=null;
Hashtable listTable; //创建哈希表单
List listComponent=null; //component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。
//典型图形用户界面中的按钮、复选框和滚动条都是组件示例。
Choice privateChatList; //Choice 类表示一个弹出式选择菜单。当前的选择显示为菜单的标题。
int width,height;
public ChatArea(String name,Hashtable listTable,int width ,int height)
{
setLayout(null);
setBackground(Color.orange);
this.width=width;
this.height=height;
setSize(600,600);
this.listTable=listTable;
this.name=name;
threadMessage=new Thread(this);
talkxianshi=new TextArea(10,10);
talkxianshi.setText("这是公话聊天显示区,谢谢使用");
chatxianshi=new TextArea(10,10);
chatxianshi.setText("这是私话聊天显示区,谢谢使用");
ok=new Button("送出信息到:");
updatetalk=new Button("刷新谈话区");
updatechat=new Button("刷新私聊区");
//提示条=new Label("双击聊天者可私聊",Label.LEFT);
sendmessage=new TextField(15);
ok.addActionListener(this);
sendmessage.addActionListener(this);
//updatetalk.addActionListener(this);
//updatechat.addActionListener(this);
listComponent=new List();
listComponent.addActionListener(this);
privateChatList=new Choice();
privateChatList.add("大家(*)");
privateChatList.select(0);
add(talkxianshi);
talkxianshi.setBounds(10,10,(width+280),(height-20));
add(chatxianshi);
chatxianshi.setBounds(10,5+(width-10),(width+280),(height-20));
add(listComponent);//登入名单
listComponent.add("请双击用户进行私聊");
listComponent.setBounds(10+(width+280),10,100,(2*height-32));
// add(提示条);
//提示条.setBounds((height-20)+40,(2*height),110,30);
Panel pSouth=new Panel();
pSouth.add(sendmessage);
//sendmessage.setSize((width+280),(height-20));
pSouth.add(ok);
pSouth.add(privateChatList);
//pSouth.add(updatetalk);
//pSouth.add(updatechat);
add(pSouth);
pSouth.setBounds(10,20+(2*height-32),width+50,600);
}
public void setName(String s)
{
name=s;
}
public void setSocketConnection(Socket socket,DataInputStream in,DataOutputStream out)//连接服务器
{
this.socket=socket;
this.in=in;
this.out=out;
try
{
threadMessage.start(); //启动消息线程
}
catch(Exception e)
{
}
}
public void actionPerformed(ActionEvent e)//监听事件
{
if(e.getSource()==ok||e.getSource()==sendmessage) //循环判断
{
String message="";
String people=privateChatList.getSelectedItem();
people=people.substring(0,people.indexOf("("));
message=sendmessage.getText();
if(message.length()>0)
{
try {
if(people.equals("大家"))
{
out.writeUTF("公共聊天内容:"+name+"说:"+message);
}
else
{
chatxianshi.append("\n"+name+"悄悄地对说:"+message);
}
//sendmessage.setText(null);
}
catch(IOException event)
{
}
}
}
else if(e.getSource()==listComponent)
{
privateChatList.insert(listComponent.getSelectedItem(),0);
privateChatList.repaint();
}
else if(e.getSource()==updatetalk)
{
//talkxianshi.setText("这是公话聊天显示区,谢谢使用");
}
else if(e.getSource()==updatechat)
{
//chatxianshi.setText("这是私话聊天显示区,谢谢使用");
}
}
public void run() //文本输入输出控制
{
while(true)
{
String s=null;
try
{
s=in.readUTF();
if(s.startsWith("聊天内容:"))
{
String content=s.substring(s.indexOf(":")+1);
talkxianshi.append("\n"+content);
}
if(s.startsWith("私人聊天内容:"))
{
String content=s.substring(s.indexOf(":")+1);
chatxianshi.append("\n"+content);
}
else if(s.startsWith("聊天者:"))
{
String people=s.substring(s.indexOf(":")+1,s.indexOf("性别"));
String sex=s.substring(s.indexOf("性别")+2);
listTable.put(people,people+"("+sex+")");
listComponent.add((String)listTable.get(people));
listComponent.repaint();
}
else if(s.startsWith("用户离线:"))
{
String awayPeopleName=s.substring(s.indexOf(":")+1);
listComponent.remove((String)listTable.get(awayPeopleName));
listComponent.repaint();
talkxianshi.append("\n"+(String)listTable.get(awayPeopleName)+"离线");
listTable.remove(awayPeopleName);
}
Thread.sleep(5);
}
catch(IOException e)
{
listComponent.removeAll();
listComponent.repaint();
listTable.clear();
talkxianshi.setText("和服务器的连接已中断\n必须刷新浏览器才能再次聊天");
break;
}
catch(InterruptedException e)
{
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
JAVA开发的网络聊天室
共17个文件
class:7个
java:6个
project:1个
需积分: 12 31 下载量 73 浏览量
2009-01-03
14:23:24
上传
评论
收藏 23KB RAR 举报
温馨提示
用ECLIPSE直接运行就可以了,基于java中的APPLET的技术开发的简单的网络聊天程序,当然界面是用布局管理器做的,不是怎么好看,大家可以直接美化看看
资源推荐
资源详情
资源评论
收起资源包目录
chat.rar (17个子文件)
chat
.project 380B
java.policy.applet 141B
talk
A.class 3KB
B.class 3KB
B.java 2KB
A.java 2KB
pk.ClientChat1229318300470.html 100B
.classpath 226B
pk
ChatServer.class 1KB
ChatArea.class 5KB
InputNameTextField.java 3KB
ChatArea.java 6KB
ClientChat.java 3KB
Server_thread.class 4KB
ChatServer.java 6KB
ClientChat.class 4KB
InputNameTextField.class 5KB
共 17 条
- 1
资源评论
wushi708
- 粉丝: 2
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功