java chat_使用 Java 创建聊天客户端-1
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相关推荐
- Java编写一个原始的聊天室(线程、服务器-客户端)
小白一只,刚看完梁勇老师的<Java语言程序设计后>,写了一个简单的聊天室,采用单服务器-多客户端的方式,能使多个用户同时对话,聊天记录被保存在本地文件中,可从客户端搜索聊天记录.界面用的 ...
- JAVA之socket编程服务器与客户端通信--实现简易聊天室
本文将介绍TCP和UDP两种服务器与客户端之间的通信协议 1.首先介绍TCP和UDP分别是什么:TCP(Transfer Control Protocol) 是传输控制协议的缩写,被称 TCP / I ...
- java saas osgi_基于云计算Saas平台下的C2C大型网上商城(集UC聊天客户端+Extjs+Oracle+OSGI模型)...
基于云计算Saas平台下的C2C大型网上商城(集UC聊天客户端+Extjs+Oracle+OSGI模型) 分享网盘地址--https://pan.baidu.com/s/1slbTv33密码: u7w ...
- Java实现即时聊天:聊天服务器+聊天客户端+Web管理控制台
来源:cnblogs.com/blogtimes/p/14767484.html 一.前言 说实话,写这个玩意儿是我上周刚刚产生的想法,本想写完后把代码挂上来赚点积分也不错.写完后发现这东西值得写一篇 ...
- 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)
目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...
- Java用TCP手写聊天室 可以 私聊版加群聊版
一:引言 想要私聊必须有规定的格式:@名字:要说的话 二:上码 1.服务端 package com.wyj.talkhome; /** * 实现一个用户可以接发多条消息 * * */ import j ...
- Java实验:编写网络聊天程序(图形界面)
课程名称 高级Java程序设计 实验项目 Java网络编程 实验目的: 使用客户机/服务器模式.基于TCP协议编写一对多"群聊"程序.其中客户机端单击"连接服务器&quo ...
- Java TCP实现高仿版QQ聊天(一)
前言 记录一下这套简陋的系统说明,把所遇到的问题和难点以及操作说明在这篇文档中说明清楚,当个回顾吧,万一以后那一天查看也能及时找到问题.这套系统是在本人大三时期完成的,从GitHub上借鉴了很多经 ...
- java中socket实现一对一聊天
要求:使用socket实现简单聊天机器人功能,客户端发给服务端一句话,服务端返回一句话(可以是固定的"你好",也可以是随机的),当客户端输入exit时结束对话. 总体思想: 创建s ...
最新文章
- 动态创建DeepZoom
- K8S删除某一个命名空间下所有的pod deployment statefulset命令
- Java生产环境下性能监控与调优详解 第5章 Tomcat性能监控与调优
- java直接选择排序_Java排序大法-直接选择排序
- python标准库:collections和heapq模块
- 方正字库中、英文、PS名称对照表
- 直播视频网站源码,静态时钟
- 【Inkscape】SVG矢量图形编辑器
- Qt Designer位置
- 对LNode*与LinkLinst等价却不等用的理解
- Gmail使用POP3设置的奥秘
- 计算机蓝牙快捷键,笔记本蓝牙快捷键是什么_怎么打开笔记本电脑蓝牙-win7之家...
- Mac 激活win10-报错:所请求的操作需要提升特权
- 20200720《Flask进阶》——蓝本
- 胡晓曼:MindSpore 开源运营与治理 | DEV. Together 2021 中国开发者生态峰会
- 怎么成为日上会员直邮_怎么成为日上会员vip
- 怎么应付薪资倒挂问题
- 计算机辅助普通话水平测试应试手册,普通话水平测试应试手册
- 日本某地发生了一件谋杀案
- Android双卡设备 如何正确获取上网卡运营商类型
热门文章
- SAP Spartacus避免不能向下兼容的breaking changes
- 程序员讨论技术问题时说话都很直接,哪个国家都不例外
- SAP Spartacus home页面根据product code请求产品数据的几种边界情况
- SAP Data Intelligence上的Python Operator
- Netweaver的端口号和Spring boot内嵌的Tomcat端口
- My team and my group in my opportunity and my appointment
- SAP UI5 json model load data的原理
- Uncaught TypeError: object is not a function
- windows10大瘦身 - 关闭lync的日志记录
- GTADIR check object exist in another system