• 开始我们今天的代码实现,我们接着上一回,上回实现了服务器的代码

    这次实现客户端的UI(界面)层,

  1. 我们界面层采用javafx来进行绘制,首先有个登录服务器的界面然后切换到聊天界面
  2. 运行结果如下.


源代码如下:

  1 package jffx.blogs.net;
  2
  3 import javafx.application.Application;
  4 import javafx.geometry.Insets;
  5 import javafx.geometry.Pos;
  6 import javafx.scene.Scene;
  7 import javafx.scene.control.*;
  8 import javafx.scene.control.Button;
  9 import javafx.scene.control.Label;
 10 import javafx.scene.control.ScrollPane;
 11 import javafx.scene.control.TextArea;
 12 import javafx.scene.control.TextField;
 13 import javafx.scene.layout.FlowPane;
 14 import javafx.scene.layout.GridPane;
 15 import javafx.scene.layout.HBox;
 16 import javafx.scene.layout.Pane;
 17 import javafx.scene.text.Text;
 18 import javafx.stage.Stage;
 19
 20 import java.net.Socket;
 21
 22
 23 //采用监听按钮事件来切换舞台使得登录界面切换
 24 /**
 25  * 代码文件:    TalkRoomServer.java
 26  * 功能描述:    客户端代码
 27  */
 28 public class TalkRoomClient extends Application {
 29     private TextArea ta = new TextArea();           //聊天记录框
 30     private TextField tf = new TextField();          //信息发送框
 31     private ComboBox<String> userList = new ComboBox<>();      //在线用户下拉列表
 32
 33     //用户名称
 34     String name ;
 35     //与服务器端连接的Socket
 36     Socket socket ;
 37
 38     @Override
 39     public void start(Stage primaryStage) {
 40         /**
 41          * 画登录界面,采用GridPane
 42          */
 43         GridPane mainPane = new GridPane() ;
 44
 45         //设置面板及布局
 46         mainPane.setAlignment(Pos.CENTER) ;   //向中间靠齐
 47         mainPane.setHgap(10) ;      //节点的水平间距
 48         mainPane.setVgap(10) ;      //节点的垂直间距
 49         mainPane.setPadding(new Insets(5, 5, 5, 5)) ;
 50
 51         //文本框
 52         Text text = new Text("Welcome") ;
 53         mainPane.setId("welcome-text");
 54         mainPane.add(text, 0, 0, 2, 1) ;
 55
 56         //标签加上输入的文本域
 57         Label serviceName = new Label("SericeName: ") ;
 58         TextField tfForService = new TextField() ;
 59         mainPane.add(serviceName, 0, 1) ;
 60         mainPane.add(tfForService, 1, 1);
 61
 62         //昵称加上输入的文本域
 63         Label inputName = new Label("Name: ") ;
 64         TextField tfForName = new TextField() ;
 65         mainPane.add(inputName, 0, 2) ;
 66         mainPane.add(tfForName, 1, 2) ;
 67
 68         //按钮这行单独处理,用一个Hbox包装一下
 69         Button btForLogin = new Button("Login") ;
 70         HBox box = new HBox(10) ;
 71         box.getChildren().add(btForLogin) ;
 72         box.setAlignment(Pos.BOTTOM_RIGHT) ;        //靠向最右边
 73         //然后再加入主面板
 74         mainPane.add(box, 1, 4) ;
 75
 76
 77         //显示一下--将面板放入舞台,至于为什么清查阅相关资料,-----h
 78         Scene scene = new Scene(mainPane, 300, 200) ;
 79         primaryStage.setScene(scene) ;
 80         primaryStage.setTitle("Login") ;
 81         primaryStage.show() ;
 82
 83         /**
 84          * 监听按钮事件,以更换舞台
 85          */
 86         //这里用lambda表达式,因为就算你写完整的继承事件接口即
 87         // EventHandle<ActionEvent>处理,也只是处理一个handle方法
 88         //所以还不如写lamda,因为handle()只有一个参数,所以event只是一个标识符
 89         // 代表只有一个参数.
 90         btForLogin.setOnAction(event -> {
 91             /**
 92              * 继续画需要切换的聊天界面图
 93              */
 94             Pane pane = new FlowPane() ;
 95             pane.setPadding(new Insets(20, 20, 20, 20));
 96             //设置文本域的属性
 97             ta.setEditable(false);      //不可编辑
 98             ta.setWrapText(true);       //自动换行
 99             pane.getChildren().add(new ScrollPane(ta)) ;
100
101             HBox hBox = new HBox(20) ;
102             //加入在线用户及输入文本框
103             //getItems()方法返回一个选项列表
104             userList.getItems().addAll("All", "asd") ;     //默认给所有人
105             userList.setStyle("-fx-color: White") ;
106             userList.setValue("All") ;
107             tf.setAlignment(Pos.BOTTOM_LEFT) ;
108             tf.setPrefColumnCount(30);
109             hBox.getChildren().addAll(userList, tf) ;
110
111             pane.getChildren().add(hBox) ;
112             Scene charScene = new Scene(pane, 400, 300) ;
113             primaryStage.setTitle("Chatting") ;
114             primaryStage.setScene(charScene) ;
115             primaryStage.show() ;
116
117
118
119 //=====================================后面暂时没写============
120             //登陆之后,给成员name初始化
121             this.name = tfForName.getText() ;
122             String hostName = tfForService.getText() ;
123             System.out.println(name);
124             System.out.println("抱歉, 我还没有写逻辑代码..") ;
125             /**
126             //连接服务器
127             try {
128                 this.socket = new Socket(hostName, 5210) ;
129
130             } catch (Exception ex) {
131                 ex.printStackTrace() ;
132             }
133              **/
134
135         }) ;
136     }
137 }

//------------------------------------------------------------



转载于:https://www.cnblogs.com/jffx/p/9807949.html

文本聊天室(TCP-中)相关推荐

  1. netty系列之:文本聊天室

    文章目录 简介 聊天室的工作流程 文本处理器 初始化ChannelHandler 真正的消息处理逻辑 总结 简介 经过之前的系列文章,我们已经知道了netty的运行原理,还介绍了基本的netty服务搭 ...

  2. Java实现聊天室(TCP)

    用Java实现一个多人聊天室(TCP) 之前版本的聊天室比较简陋,这个版本我又加了些功能,看上去可能会好一点.该程序只是作为巩固理论知识的训练,所以会有很多考虑不周到的地方,请不要介意! 目录 用Ja ...

  3. [Unity][VIVOX]多人语音文本聊天室

    多平台 多人 语音.文本 聊天室 的方案. 参考资料1的链接进入,注册 账号,创建 下载 VIVOX 品牌的 矢量 图标 选择引擎, 支持的 平台 创建 项目完成,会获得 API相关内容,以及 右下角 ...

  4. Flash/Flex学习笔记(53):利用FMS快速创建一个文本聊天室

    先来看客户端fla的构成: 第一帧:登录界面 第一帧的代码: show sourceview source print? 01 import flash.events.MouseEvent; 02 i ...

  5. 游戏大厅 从基础开始(6)--绕回来细说聊天室(中)之女仆编年史1

    上一篇我们大致的了解了几种聊天室的行为模式 最简单明了的推模式 几乎不需要任何多余的语言来描述它的实现 这一篇我们看看如何实现拉模式更有效. 本图清晰的表现了"拉"模式聊天室的行为 ...

  6. php文本聊天室源码,PHP文本聊天室PHP

    管理员在register.dbf改自己的等 级后在谈天室里会有自己的/封锁/升 降/删除/更改的管理按 钮,及高级管理区 谈天室高级管理区 聊友管理 在线聊友 在线聊友信息 聊友信息 查看聊友的详细信 ...

  7. 网易云信深度优化解决移动聊天室“痼疾”

    本文源于云信移动技术专家项望烽在开源中国源创会2016年终盛典的题为<聊天室场景下的移动网络优化>分享. (网易云信移动端技术 项望烽) 突破传统群组思维和架构,实现无人数上限的聊天室 步 ...

  8. 【直播聊天室】Android开发源码

    基本概念 一.融云直播聊天室介绍 融云直播聊天室,是专门为视频直播业务提供的一个产品.主要特点是: 1.可以支持无人数上限的直播聊天室: 2.支持海量消息的并发,消息速度极快: 3.并可以方便的为直播 ...

  9. [NUAA]Python用UDP协议建立带有私聊功能的网络聊天室-建立聊天工具

    文章目录 前言 1.网络聊天室的基本架构是什么? 1.1 客户端和服务器的架构 1.2 通信协议的选择以及多线程通信 1.2.1 多线程通信 1.2.2 通信协议选择 1.3 前后端功能设计思路 1. ...

最新文章

  1. 全球最快学术超算Frontera,也用英特尔至强可扩展处理器
  2. 腾讯云服务器 linux 镜像安装项目环境mysql心得
  3. 6 areas of artificial intelligence to watch closely 需要密切关注的六大人工智能/机器学习领域
  4. spring boot示例_Spring Boot上的Spring社交示例,或者我如何停止担心和喜欢自动配置...
  5. cf813C(bfs)
  6. Mac新手必备技巧-如何使用 macOS 帮助菜单?
  7. phpstom可以配置php环境吗_环境配置 · PhpStorm · 看云
  8. 制版经验分享—使用AD18
  9. Qt For Android | QT安卓开发环境搭建
  10. php免杀教程【绝对原创】
  11. 批量word转pdf
  12. matlab程序设计题题库及答案,matlab程序设计例题及答案
  13. QPointer、QScopedPointer、QSharedDataPointer等指针用法总结
  14. 网络数据包的封包格式
  15. LTU、TTU、DTU、FTU、RTU在电路中的安装位置,功能,区别
  16. [附源码]java毕业设计高校奖学金评定管理系统
  17. Java——批量更改图片像素(大小)
  18. laravel 发送邮件随记
  19. 学习前端比较好的网站
  20. 什么是商家转账到零钱

热门文章

  1. php4 class,PHP在类中获得当前class名称_php
  2. boost::lexical_cast
  3. python自动化办公知识点整理汇总_Python自动化办公知识点整理汇总
  4. 2019年 ICPC亚洲区预赛(上海赛区)总结
  5. Hadoop入门(Hadoop2.7.2源码编译与伪分布安装)
  6. Linux底层网络编程--ARP,PING等
  7. 网桥(bridge) 和 交换机(switch) 之异同
  8. 认识探头(一) (转)
  9. opencv图像深度-1_OpenCV空间AI竞赛之旅(第1部分-初始设置+深度)
  10. 项目中使用 java函数式编程_函数式编程在Java8中使用Lambda表达式进行开发