仿QQ大战—界面篇
之前在《仿QQ大战—服务器的搭建(ServerSocket)》中实现了服务器的搭建,以及一个简单地传递数据的实现,现在就是来实现类似与QQ聊天通信的功能。首先是界面的实现;
首先:服务器和客户端的界面的实现,来看一下界面:

- 在输入端口输入框中输入端口号,然后点击Start!按钮开始,服务器并开启。
- 在开启服务器之后,当客户端实现连接到服务器之后,就会显示在服务器的下面的表格上。
界面的实现
JTable的使用
这里主要介绍的是JTable来显示链接到了服务器的客户端的ID,姓名和IP地址;
JTable:一共包括了三个方面:数据模型 、列模型和选择模型。在实例化时可以使用它默认模式也可以自己自己来构造;
JTable的构造函数一共有7个,这里介绍2个:
一: 构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames。
JTable(Object[][] rowData, Object[] columnNames)
String[] columnNames = { "用户名", "密码", "IP地址" };
String[][] data = null;
DefaultTableModel defaultTableModel = new DefaultTableModel(data, columnNames);
JTable jtable = new JTable(data, columnNames);
二: 构造一个 JTable,使用数据模型 、默认的列模型和默认的选择模型对其进行初始化。
JTable(TableModel dm)
String[] columnNames ={"用户名", "密码","IP地址"};
String[][] data = null;
DefaultTableModel defaultTableModel=new DefaultTableModel(data,columnNames);
JTable jtable=new JTable(defaultTableModel);
也可以自己来创建一个类然后实现接口TableModel ,重写里面的方法:
ClientTableModel clientTableModel=new ClientTableModel(threadarray);
//ClientTableModel实现了接口TableMode
JTable jtable = new JTable(clientTableModel);// 表格
需要重写的几个方法:
1.getRowCount(),获得JTable中要显示的行数;
@Override
public int getRowCount() {//得到行数;
return threadarray.size();
}
2.getColumnCount() ,获得JTable中要显示的列数
@Override
public int getColumnCount() {//放回列数
return 3;
}
3.getColumnName(int columnIndex),列表通过该方法来
@Override
public String getColumnName(int columnIndex) {
if(columnIndex==0)
return "账号";
else if(columnIndex==1)
return "姓名";
else if(columnIndex==2)
return "IP地址";
else
return null;
}
4.getColumnClass(int columnIndex)这个方法很重要,返回的是每一列的类型,如果没有写的话,就不能够往JTable中添加数据,他会报一个java.lang.NullPointerException,空指针异常;
@Override
public Class<?> getColumnClass(int columnIndex) {//返回各列的类型
if(columnIndex==0)
return int.class;
else if(columnIndex==1)
return String.class;
else if(columnIndex==2)
return String.class;
else
return null;
}
5.getValueAt(int rowIndex, int columnIndex),返回第rowIndex行第columnIndex列的值。
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if(columnIndex==0)
return clientarray.get(rowIndex).ID;
else if(columnIndex==1)
return clientarray.get(rowIndex).name;
else if(columnIndex==2)
return clientarray.get(rowIndex).getIP();
else
return null;
}
6.isCellEditable(int rowIndex, int columnIndex),类表是否可以编辑,返回true,可以对JTable进行编辑。
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
JTable中的几个方法
- 设置行高:
jtable.setRowHeight(30);
- 设置是否选中行:
jtable.setRowSelectionAllowed(true);// 设置可以选中行;
- 设置选中行时,选中行变色:
jtable.setSelectionBackground(new Color(111, 255, 255));
JTable绑定JScrollPane 滚动条
- 设置行高:
// 绑定滚动条
JScrollPane scrollPane = new JScrollPane(jtable);// 滚动窗口
scrollPane.setPreferredSize(new Dimension(500, 320));
centerpanel.add(scrollPane);
这样界面就做好了。
当我们客户端连接上我们的服务器,然后把他添加到我们的TJable的数组里面。再在调用界面的repaint方法,界面上TJabel组件就可以显示上连接到服务器的客户。
JTextPane(客户端聊天界面)
方法
- .设置是否可以编辑:
setEditable(false);//设置为不可以编辑;
- 设置显示的字体:
setFont(new Font(Font.SERIF, Font.PLAIN, 18));
/*
*new Font(name, style, size)
*风格:三个常量 lFont.PLAIN, Font.BOLD,
Font.ITALIC
*字号:字的大小(磅数)
*/
仿QQ大战—界面篇的更多相关文章
- 高仿qq聊天界面
高仿qq聊天界面,给有需要的人,界面效果如下: 真心觉得做界面非常痛苦,给有需要的朋友. chat.xml <?xml version="1.0" encoding=&quo ...
- WPF开发实例——仿QQ登录界面
原文:WPF开发实例--仿QQ登录界面 版权声明:本文为博主原创文章,如需转载请标明转载地址 http://blog.csdn.net/u013981858 https://blog.csdn.net ...
- 编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面
返回本章节 返回作业目录 需求说明: 使用Swing布局管理器和常用控件,实现仿QQ登录界面 实现思路: 创建登录界面的类QQLogin,该类继承父类JFrame,在该类中创建无参数的构造方法,在构造 ...
- 零基础~仿qq登录界面
html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...
- JavaSwing仿QQ登录界面,注释完善,适合新手学习
使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为“素材”的文件夹. 素材: https://pan. ...
- Android—简单的仿QQ聊天界面
最近仿照QQ聊天做了一个类似界面,先看下界面组成(画面不太美凑合凑合呗,,,,):
- Android 仿QQ消息界面
values 下面 dimens.xml <resources> <!-- Default screen margins, per the Android Design guidel ...
- C#仿QQ设置界面导航
效果预览,选择左边标签,右边内容会自动滚动到适当位置 public class AnchorPanel { List<PanelMenu> lst = new List<PanelM ...
- 32.qt quick-模仿QQ登录界面实现3D旋转(Rotation、Flipable)
要想模仿QQ登录界面的3D旋转,我们需要学习Rotation和Flipable.由于没找到QQ的资源图,所以我们以两个图片为例模仿QQ的3D旋转,如下图所示: 最终效果如下所示: 1.Rotation ...
随机推荐
- 来玩Play框架03 模板
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在上一章节中,我把字符串通过ok()返回给客户.我可以把一个完整的html页面放入 ...
- 初识Spring框架实现IOC和DI(依赖注入)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是 ...
- MSSQL远程连接
背景:部署公司自己研发的ERP系统. 1)系统架构: .NET+MSSQL. 2)服务器系统:Windows Server 2008 R2 Enterprise 3)数据库:MSSQL Server ...
- 阶段一:通过网络请求,获得并解析JSON数据(天气应用)
“阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 在上一篇阶段一:解析JSON中提到,最近在写一个很简单的天气预报应用.即使功能很简单,但我还是想把它做成一个相对完 ...
- iOS开发中的数学函数
在iOS开发当中...我们往往会涉及到一些算法...为了节省一些时间...让APP很快地被开发出来...我们需要对各类函数有一定的了解...接下来...我把部分常用函数分享出来...希望能帮到大家.. ...
- 整理常用加密 iOS 与 Android 加密 MD5-SHA1
1.MD5算法 不可逆 128位或者64位串,byte数字长度就是16和8,一般表示是使用16进制来表示的话,1个byte转换成2个16bit,分别表示高地位,所以生成的字符串是16位或者是32位的, ...
- Visual Studio2015 常用快捷键
项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添加 ...
- git命令查看远程分支
使用git remote -v命令可以查看本地设置好的所有远程仓库地址. ➜ learn-vue git:(master) git remote -v origin https://github.co ...
- js的replace函数入参为function时的疑问
近期在写js导出excel文件时运用到replace方法,此处详细的记录下它各个参数所代表的的意义. 定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式 ...
- MySQL 导出数据
MySQL中你可以使用SELECT...INTO OUTFILE语句来简单的导出数据到文本文件上. 使用 SELECT ... INTO OUTFILE 语句导出数据 以下实例中我们将数据表 cnbl ...