1.聊天客户端文本框的搭建.

项目截图:java project

代码:

(1).ChatManager.java

package com.nantian.javachatclient.main;

import com.nantian.javachatclient.view.MainWindow;

public class ChatManager {

//将类单例化的步骤就是讲他的构造方法变成private

//ChatManager就会有唯一的实例

private ChatManager() {}

private static final ChatManager instance=new ChatManager();

public static ChatManager getChatManager() {

return instance;

}

//具体实现连接服务器的操作

public void connect(String ip) {

}

//"发送"按钮发送内容函数

public void send(String out) {

}

//界面中只能向chatManager发送数据,那么接收到数据后怎样放到界面上呢?

//需要对MainWindow有个引用,并为它实现setWindow方法

MainWindow window;

public void setWindow(MainWindow window) {

this.window=window;

//传递之后

window.appendText("文本框已经和ChatManager绑定了!");

}

}

(2).StartClient.java

package com.nantian.javachatclient.main;

import java.awt.EventQueue;

import com.nantian.javachatclient.view.MainWindow;

public class StartClient {

/**

* 将窗体主方法放到了这里

* @param args

*/

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

MainWindow frame = new MainWindow();

frame.setVisible(true);

//创建window的时候,对MainWindow有个引用

ChatManager.getChatManager().setWindow(frame);

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

}

(3).MainWindow.java

new -->project-->web builder-->JFrame(需要下载web builder插件!)

package com.nantian.javachatclient.view;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import com.nantian.javachatclient.main.ChatManager;

import javax.swing.JTextArea;

import javax.swing.GroupLayout;

import javax.swing.GroupLayout.Alignment;

import javax.swing.LayoutStyle.ComponentPlacement;

import javax.swing.JTextField;

import javax.swing.JButton;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

public class MainWindow extends JFrame {

/**

*

*/

private static final long serialVersionUID = 1L;

private JPanel contentPane;

//文本控件声明到类中,让他作为类的变量

JTextArea txt;

private JTextField IP;

private JTextField send;

/**

* Create the frame.

*/

public MainWindow() {

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 450, 300);

contentPane = new JPanel();

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

setContentPane(contentPane);

txt = new JTextArea();

txt.setText("Ready...");

IP = new JTextField();

IP.setText("127.0.0.1");

IP.setColumns(10);

JButton button = new JButton("连接到服务器");

button.addMouseListener(new MouseAdapter() {

//mouse-->clicked自动创建的代码

@Override

public void mouseClicked(MouseEvent e) {

//为"连接到服务器"按钮添加动作

//使用函数把它和这个按钮的监听事件绑定起来

ChatManager.getChatManager().connect(IP.getText());

}

});

send = new JTextField();

send.setText("你好!");

send.setColumns(10);

JButton button_1 = new JButton("发送");

button_1.addMouseListener(new MouseAdapter() {

//为"发送"按钮添加动作

@Override

public void mouseClicked(MouseEvent e) {

//当前文本发送呢内容

ChatManager.getChatManager().send(send.getText());

appendText("我说:"+send.getText());

//发送出去后,需要将当前文本框清空

send.setText("");

}

});

GroupLayout gl_contentPane = new GroupLayout(contentPane);

gl_contentPane.setHorizontalGroup(

gl_contentPane.createParallelGroup(Alignment.LEADING)

.addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()

.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)

.addComponent(txt, GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE)

.addGroup(Alignment.LEADING, gl_contentPane.createSequentialGroup()

.addComponent(IP)

.addPreferredGap(ComponentPlacement.RELATED)

.addComponent(button))

.addGroup(gl_contentPane.createSequentialGroup()

.addComponent(send, GroupLayout.DEFAULT_SIZE, 295, Short.MAX_VALUE)

.addPreferredGap(ComponentPlacement.RELATED)

.addComponent(button_1, GroupLayout.PREFERRED_SIZE, 129, GroupLayout.PREFERRED_SIZE)))

.addContainerGap())

);

gl_contentPane.setVerticalGroup(

gl_contentPane.createParallelGroup(Alignment.LEADING)

.addGroup(gl_contentPane.createSequentialGroup()

.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)

.addComponent(IP, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addComponent(button))

.addPreferredGap(ComponentPlacement.RELATED)

.addComponent(txt, GroupLayout.DEFAULT_SIZE, 193, Short.MAX_VALUE)

.addPreferredGap(ComponentPlacement.RELATED)

.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)

.addComponent(send, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addComponent(button_1)))

);

contentPane.setLayout(gl_contentPane);

}

public void appendText(String in) {

txt.append("\n"+in);

}

}

操作截图:

=============================================================================================================

框架已搭建完成,聊天客户端的核心内容见:使用 Java 创建聊天客户端-2

java chat_使用 Java 创建聊天客户端-1相关推荐

  1. Java编写一个原始的聊天室(线程、服务器-客户端)

    小白一只,刚看完梁勇老师的<Java语言程序设计后>,写了一个简单的聊天室,采用单服务器-多客户端的方式,能使多个用户同时对话,聊天记录被保存在本地文件中,可从客户端搜索聊天记录.界面用的 ...

  2. JAVA之socket编程服务器与客户端通信--实现简易聊天室

    本文将介绍TCP和UDP两种服务器与客户端之间的通信协议 1.首先介绍TCP和UDP分别是什么:TCP(Transfer Control Protocol) 是传输控制协议的缩写,被称 TCP / I ...

  3. java saas osgi_基于云计算Saas平台下的C2C大型网上商城(集UC聊天客户端+Extjs+Oracle+OSGI模型)...

    基于云计算Saas平台下的C2C大型网上商城(集UC聊天客户端+Extjs+Oracle+OSGI模型) 分享网盘地址--https://pan.baidu.com/s/1slbTv33密码: u7w ...

  4. Java实现即时聊天:聊天服务器+聊天客户端+Web管理控制台

    来源:cnblogs.com/blogtimes/p/14767484.html 一.前言 说实话,写这个玩意儿是我上周刚刚产生的想法,本想写完后把代码挂上来赚点积分也不错.写完后发现这东西值得写一篇 ...

  5. 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)

    目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...

  6. Java用TCP手写聊天室 可以 私聊版加群聊版

    一:引言 想要私聊必须有规定的格式:@名字:要说的话 二:上码 1.服务端 package com.wyj.talkhome; /** * 实现一个用户可以接发多条消息 * * */ import j ...

  7. Java实验:编写网络聊天程序(图形界面)

    课程名称 高级Java程序设计 实验项目 Java网络编程 实验目的: 使用客户机/服务器模式.基于TCP协议编写一对多"群聊"程序.其中客户机端单击"连接服务器&quo ...

  8. Java TCP实现高仿版QQ聊天(一)

    前言 ​ 记录一下这套简陋的系统说明,把所遇到的问题和难点以及操作说明在这篇文档中说明清楚,当个回顾吧,万一以后那一天查看也能及时找到问题.这套系统是在本人大三时期完成的,从GitHub上借鉴了很多经 ...

  9. java中socket实现一对一聊天

    要求:使用socket实现简单聊天机器人功能,客户端发给服务端一句话,服务端返回一句话(可以是固定的"你好",也可以是随机的),当客户端输入exit时结束对话. 总体思想: 创建s ...

最新文章

  1. 动态创建DeepZoom
  2. K8S删除某一个命名空间下所有的pod deployment statefulset命令
  3. Java生产环境下性能监控与调优详解 第5章 Tomcat性能监控与调优
  4. java直接选择排序_Java排序大法-直接选择排序
  5. python标准库:collections和heapq模块
  6. 方正字库中、英文、PS名称对照表
  7. 直播视频网站源码,静态时钟
  8. 【Inkscape】SVG矢量图形编辑器
  9. Qt Designer位置
  10. 对LNode*与LinkLinst等价却不等用的理解
  11. Gmail使用POP3设置的奥秘
  12. 计算机蓝牙快捷键,笔记本蓝牙快捷键是什么_怎么打开笔记本电脑蓝牙-win7之家...
  13. Mac 激活win10-报错:所请求的操作需要提升特权
  14. 20200720《Flask进阶》——蓝本
  15. 胡晓曼:MindSpore 开源运营与治理 | DEV. Together 2021 中国开发者生态峰会
  16. 怎么成为日上会员直邮_怎么成为日上会员vip
  17. 怎么应付薪资倒挂问题
  18. 计算机辅助普通话水平测试应试手册,普通话水平测试应试手册
  19. 日本某地发生了一件谋杀案
  20. Android双卡设备 如何正确获取上网卡运营商类型

热门文章

  1. SAP Spartacus避免不能向下兼容的breaking changes
  2. 程序员讨论技术问题时说话都很直接,哪个国家都不例外
  3. SAP Spartacus home页面根据product code请求产品数据的几种边界情况
  4. SAP Data Intelligence上的Python Operator
  5. Netweaver的端口号和Spring boot内嵌的Tomcat端口
  6. My team and my group in my opportunity and my appointment
  7. SAP UI5 json model load data的原理
  8. Uncaught TypeError: object is not a function
  9. windows10大瘦身 - 关闭lync的日志记录
  10. GTADIR check object exist in another system