仿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 ...
随机推荐
- 记录一次bug解决过程:eclipse Installed JREs 配置引出的问题
一 总结 eclipse Installed JREs 配置引出的问题:编译以来JDK,不是JRE spring boot内嵌tomcat运行程序,tomcat:run 二 Bug描述:eclipse ...
- atitit.日期,星期,时候的显示方法ISO 8601标准
atitit.日期,星期,时候的显示方法ISO 8601标准 1. ISO 86011 2. DAte日期的显示1 2.1. Normal1 2.2. 顺序日期表示法(可以将一年内的天数直接表示)1 ...
- 【项目管理】图解GitHub基本操作
一.注册并登陆到github网站 1.1.打开github网站首页(https://github.com/) 1.2.注册一个自己的github账号 创建账户后再验证自己的邮箱,然后就可以登陆到git ...
- Css3新特性应用之形状
一.自适应椭圆 * border-radius特性: * 可以单独指定水平和垂直半径,并且值可以是百分比,用/(斜杠)分隔这两个值即可(可以实现自适应宽度椭圆). * 还可以单独指定四个角 ...
- html5上传图片(一)一跨域上传
最近开发一个上传图片的模块,传图片的接口不支持跨域上传,并且只支持单张上传,而我们的产品要求要实现多张上传.我搞了一个代理页面,先将图片传到代理页面,然后再通过代理页面传到上传图片接口.虽然这种方式经 ...
- VS2012 Unit Test —— 我对IdleTest库动的大手术以及对Xml相关操作进行测试的方式
[1]我的IdleTest源码地址:http://idletest.codeplex.com/ [2]IdleTest改动说明:2013年10月份在保持原有功能的情况下对其动了较大的手术,首先将基本的 ...
- GreenDao3.0新特性解析(配置、注解、加密)
Greendao3.0release与7月6日发布,其中最主要的三大改变就是:1.换包名 2.实体注解 3.加密支持的优化 本文里面会遇到一些代码示例,就摘了官方文档和demo里的例子了,因为他们的例 ...
- Android界面架构(Activity,PhoneWiondow,DecorView)简介
在一个Android应用程序中,用户界面通过View和ViewGroup对象构建.所有View的子类成为"Widget",所有ViewGroup的子类成为"Layout& ...
- 如何dos中查看当前MySQL版本信息?
dos中MySQL安装服务成功--启动服务成功--登录MySQL成功后输入:select version(); 如图:
- Eclipse创建Maven工程报错
问题 用Eclipse创建maven工程的时候,总是会报错,例如提示: Unable to create project from archetype [org.apache.maven.archet ...