使用 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 创建聊天客户端-1的更多相关文章
- 使用 Java 创建聊天客户端-2
1.项目截图 java聊天核心代码: MyJavaChatClient ================================================================ ...
- 使用Java建立聊天客户端
---------------siwuxie095 关于 聊天服务器,详见本人博客的分类:来一杯Java, 里面的 使用ServerSocket ...
- 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)
搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...
- [转载]Java创建WebService服务及客户端实现
Java创建WebService服务及客户端实现 Java创建WebService服务及客户端实现
- Java Socket聊天室编程(二)之利用socket实现单聊聊天室
这篇文章主要介绍了Java Socket聊天室编程(二)之利用socket实现单聊聊天室的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在上篇文章Java Socket聊天室编程(一)之 ...
- Java Socket聊天室编程(一)之利用socket实现聊天之消息推送
这篇文章主要介绍了Java Socket聊天室编程(一)之利用socket实现聊天之消息推送的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 网上已经有很多利用socket实现聊天的例子了 ...
- Spring Kafka整合Spring Boot创建生产者客户端案例
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 创建一个kafka-producer-master的maven工程.整个项目结构如下: ...
- Java NIO 聊天室实例
最近写了个Java NIO聊天室聊天的程序,NIO学习起来比较困难的,我的代码能给大家起到一个抛砖引玉的作用! 服务端: package test.javanio; /** * @author * @ ...
- Java11新特性 - 标准Java异步HTTP客户端
Java9开始引入的一个处理 HTTP 请求的的 HTTP Client API,该 API 支持同步和异步,而在 Java 11 中已经为正式可用状态,你可以在 java.net 包中找到这个 AP ...
随机推荐
- Hadoop 完全分布式搭建
搭建环境 https://www.cnblogs.com/YuanWeiBlogger/p/11456623.html 修改主机名------------------- 1./etc/hostname ...
- Oracle创建视图权限不足
Oracle 在创建用户的时候如果直接给用户DBA权限,那么在B用户中可以直接查询A用户的表,但是在创建视图时就会报无权限,在这种情况下需要再在被访问的A用户里面去给予要访问该表的B用户授权. --创 ...
- Hi3531a海思logo加载的实现流程
海思篇之开机logo的加载(Hi3531a命令版) 2019-02-02 11:31:51 Wilburn0 阅读数 479更多 分类专栏: 海思开发 版权声明:本文为博主原创文章,遵循CC 4. ...
- Arm-Linux 移植 jpeg库
背景: jpeg库的使用可以提高显示效率. host平台 :Ubuntu 16.04 arm平台 : S5P6818 jpeg :v9c arm-gcc :4.8.1 主机准备: 运行以下脚 ...
- Centos 安装PHP-redis扩展
从https://pecl.php.net/package/redis 里面找到自己安装的Redis对应版本的redis 1.获取已经安装的Redis版本扩展我这边安装的是4.0.1版本 wget ...
- windows下mysql表名区分大小写
windows下mysql默认是不区分大小写的,但是linux会区分大小写 如何让windows下mysql区分大小写呢? 修改 my.ini 里面的mysqld部分 #区分大小写 lower_cas ...
- react-native 沉浸式状态栏
使用StatusBar即可实现沉浸式,但是必须把背景色设置为透明.否则如果有不同页面的头部颜色不一样的话,导航栏的颜色动画会很怪异,不会是跟着页面一起动画. <StatusBar barStyl ...
- Fortify漏洞之Sql Injection(sql注入)
公司最近启用了Fortify扫描项目代码,报出较多的漏洞,安排了本人进行修复,近段时间将对修复的过程和一些修复的漏洞总结整理于此! 本篇先对Fortify做个简单的认识,同时总结一下sql注入的漏洞! ...
- FreeRTOS 移植
添加FreeRTOS源码到工程中 在工程源码中创建FreeRTOS目录存放拷贝的文件 拷贝FreeRTOS->Source中的文件 可将其他不需要的文件夹全部删掉,只留3个 拷贝Demo中Fre ...
- 文件锁 flock/fcntl
多个进程同时操作一个文件 1. flock int flock(int fd, int operation); LOCK_SH 建立共享锁定.多个进程可同时对同一个文件作共享锁定(读锁定) LOCK_ ...