实例介绍
【实例截图】
【核心代码】
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) 盖楼(回复)