仿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 ...
随机推荐
- Aix/Linux下自动备份oracle数据库
曾经有个同事,来回操作开发和生产的数据库,结果误删了生产的数据库,那种心情我想不是一般人能理解的,虽然说oracle可以有方法还原,但并不是彻底的. 所以,在工作中,不管是开发还是维护,备份数据库是非 ...
- 来玩Play框架01 简介
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 说到网络框架,Ruby的Ruby on Rail和Python的Django都相当 ...
- 用jmeter通过ssl验证访问https
找了一个支付宝的网站尝试.https://memberprod.alipay.com/account/reg/index.htm 我用的是chrome,点这个小锁 如果是IE也可以在网页上右键,属性, ...
- iOS开发中常用的设计模式
常用的设计模式(一)代理模式应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现.优势:解耦合敏捷原则:开放-封闭原则实例:tableview的 数据源delegate,通过 ...
- 如何禁止内部viewPager滑动
众所周知,viewPager是能够滑动的,但有时候我们需要禁止它的滑动(微笑地面对*----*). 情况是这样的: activity中有一个viewPager,viewPager中加入3个Fragme ...
- ListView之性能优化
listview加载的核心是其adapter,本文通过减少adapter中创建.处理view的次数来提高listview加载的性能,总共分四个层次: 0.最原始的加载 1.利用convertView ...
- easyUI的基础布局easyui-accordion
---恢复内容开始--- <html> <head> <meta charset="UTF-8"> <title>树状图</t ...
- 一种面向对象的TCP/IP中间件
这是一个使用C++封装的TCP/IP协议栈(仅传输层),属于本人所设计的中间件的一员,具有硬件无关,应用无关特性,使用非常方便,一看代码便知: #include "net.h" / ...
- Linux 关于Transparent Hugepages的介绍
透明大页介绍 Transparent Huge Pages的一些官方介绍资料: Transparent Huge Pages (THP) are enabled by default in RHEL ...
- Visual Studio Emulator for Android 初体验
Visual Studio Emulator for Android已经推出一段时间了,但一直没有用过.前两天下载安装用了下,整体感觉比谷歌自带的模拟器强多了.Visual Studio Emulat ...