实例介绍
【实例截图】
【核心代码】
package demo.chartRoom.ui
{
import demo.chartRoom.serverApi.DataEvent;
import demo.chartRoom.serverApi.IServerApi;
import flash.display.Sprite;
import flash.events.MouseEvent;
import org.aswing.ASColor;
import org.aswing.ASFont;
import org.aswing.AsWingConstants;
import org.aswing.BorderLayout;
import org.aswing.JButton;
import org.aswing.JLabel;
import org.aswing.JPanel;
import org.aswing.JScrollPane;
import org.aswing.JSplitPane;
import org.aswing.JTextArea;
import org.aswing.SoftBoxLayout;
import org.aswing.geom.IntDimension;
import org.aswing.geom.IntPoint;
public class ChartRoom extends Sprite
{
private var upDown:JSplitPane//把界面划分为上下俩个区域
private var leftRight:JSplitPane; //把聊天室上部分区域划分为左右两个区域
private var allMsg_txt:JTextArea;//聊天历史文本框
private var allMsg_panel:JScrollPane;//滚动聊天内容的容器
private var users_panel:JScrollPane;//显示所有用户的面板
private var msg_pan:JPanel;//消息发送区域
private var msgText_panel:JScrollPane;//滚动消息内容的容器
private var msg_txt:JTextArea;//消息内容文本框
private var seletedUserLabel:JLabel;//当前被选中的用户标签
private var selectedId:String;//被选中用户的ID
private var userInner_panel:JPanel;//用户标签容器
private var send_btn:JButton;//发送按钮
private var onLineUserCount:uint=0;//当前在线人数
private var _srvApi:IServerApi;
public function set srvApi(api:IServerApi):void//设置通信与控制对象
{
_srvApi=api;
//添加数据事件
_srvApi.addEventListener(DataEvent.ALL_DATA_ARRIVE,onAllDataArrive);
}
public function ChartRoom()
{
//创建上下分栏控件
upDown=new JSplitPane();
upDown.setOrientation(AsWingConstants.VERTICAL);
upDown.setSize(new IntDimension(800, 600));
upDown.setDividerLocation(140);
this.addChild(upDown);
//创建左右分栏控件
leftRight=new JSplitPane();
leftRight.setOrientation(AsWingConstants.HORIZONTAL);
leftRight.setSize(new IntDimension(800, 300));
leftRight.setDividerLocation(300);
upDown.append(leftRight,JSplitPane.LEFT);
//创建历史消息显示的区域及控件
allMsg_panel=new JScrollPane();
allMsg_txt=new JTextArea("");
allMsg_panel.append(allMsg_txt,BorderLayout.CENTER)
leftRight.append(allMsg_panel,JSplitPane.LEFT);
//创建登录用户显示区域
users_panel=new JScrollPane();
userInner_panel=new JPanel();
var layout:SoftBoxLayout=new SoftBoxLayout();
userInner_panel.setLayout(layout);
layout.setAxis(AsWingConstants.VERTICAL);
users_panel.append(userInner_panel);
leftRight.append(users_panel,JSplitPane.RIGHT)
//创建消息发送区域
msg_pan=new JPanel();
var blayout:BorderLayout=new BorderLayout(5,5);
msg_pan.setLayout(blayout);
upDown.append(msg_pan,JSplitPane.RIGHT);
msgText_panel=new JScrollPane();
msg_txt=new JTextArea();//创建消息发送框
msgText_panel.append(msg_txt);
msg_pan.append(msgText_panel,BorderLayout.CENTER);
send_btn = new JButton();//创建消息发送按钮
send_btn.setLocation(new IntPoint(300, 0));
send_btn.setSize(new IntDimension(104, 400));
send_btn.setText(" 发送 ");
msg_pan.append(send_btn,BorderLayout.EAST);
send_btn.addEventListener(MouseEvent.CLICK,send);
onLineUserCount=0;//设置当前在线人数为0
}
//鼠标移到用户标签上的效果
private function onOver(e:MouseEvent):void
{
var lb:JLabel=e.target as JLabel;
if(seletedUserLabel!=null)
{
if(lb==seletedUserLabel) return;
}
lb.setForeground(new ASColor(0xff6600));//设置标签的文字颜色
}
//用户标签选中效果
private function onSele(e:MouseEvent):void
{
if(seletedUserLabel!=null)
{
//设置取消选中的效果
seletedUserLabel.setForeground(new ASColor(0x000000));
seletedUserLabel.setFont(new ASFont("宋体",12,false));
}
var lb:JLabel=e.target as JLabel;
//设置选中效果
lb.setForeground(new ASColor(0xff0000));
lb.setFont(new ASFont("宋体",12,true));
seletedUserLabel=lb;//设置选中标签
selectedId=seletedUserLabel.getName();
}
//鼠标移出用户标签的效果
private function onOut(e:MouseEvent):void
{
var lb:JLabel=e.target as JLabel;
if(seletedUserLabel!=null)
{
if(lb==seletedUserLabel) return;
}
lb.setForeground(new ASColor(0x0));//设置是表移出时的文字颜色
}
public function send(e:MouseEvent):void//消息发送
{
if(seletedUserLabel==null)//如果没有选中的人,则发送给所有人
{
_srvApi.send("所有人",msg_txt.getText());//对所有人说
}
else
{
_srvApi.send(seletedUserLabel.getText(),msg_txt.getText());//对选中的某人说
}
send_btn.setEnabled(false);//禁用发送按钮
msg_txt.setText("");
}
public function updataAllInfo(xml:XML):void//刷新界面
{
//更新历史消息内容
var msgs:XMLList=xml.child("messages").children();
allMsg_txt.setText("");
for(var i:int=0;i<msgs.length();i )
{
var msg:XML=msgs[i];
allMsg_txt.appendText(msg.text() "\n\n");
}
allMsg_txt.scrollToBottomRight();
//更新在线用户列表
var users:XMLList=xml.child("users").children();
userInner_panel.removeAll();
var lb:JLabel=new JLabel("所有人");
lb.setName("ALL");
//设置鼠标事件
lb.setHorizontalAlignment(AsWingConstants.LEFT);
lb.addEventListener(MouseEvent.MOUSE_OVER,onOver);
lb.addEventListener(MouseEvent.MOUSE_OUT,onOut);
lb.addEventListener(MouseEvent.CLICK,onSele);
userInner_panel.append(lb);
for(i=0;i<users.length();i )
{
var user:XML=users[i];
lb=new JLabel(user.@name);
lb.setName(user.@sid);
//设置鼠标事件
lb.setHorizontalAlignment(AsWingConstants.LEFT);
lb.addEventListener(MouseEvent.MOUSE_OVER,onOver);
lb.addEventListener(MouseEvent.MOUSE_OUT,onOut);
lb.addEventListener(MouseEvent.CLICK,onSele);
userInner_panel.append(lb);
if(selectedId==lb.getName())
{
seletedUserLabel=lb;//获得选中的标签
}
onLineUserCount=i 1;//增加在线人数
}
send_btn.setEnabled(true);
if(seletedUserLabel!=null)
{
//设置选中时的文字样式
seletedUserLabel.setForeground(new ASColor(0xff0000));
seletedUserLabel.setFont(new ASFont("宋体",12,true));
}
}
public function onAllDataArrive(e:DataEvent):void //刷新聊天
{
updataAllInfo(e.data);//更新借卖弄
}
}
}
标签: 聊天
网友评论
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


支持(0) 盖楼(回复)
支持(0) 盖楼(回复)