之前在《仿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大战—界面篇的更多相关文章

  1. 高仿qq聊天界面

    高仿qq聊天界面,给有需要的人,界面效果如下: 真心觉得做界面非常痛苦,给有需要的朋友. chat.xml <?xml version="1.0" encoding=&quo ...

  2. WPF开发实例——仿QQ登录界面

    原文:WPF开发实例--仿QQ登录界面 版权声明:本文为博主原创文章,如需转载请标明转载地址 http://blog.csdn.net/u013981858 https://blog.csdn.net ...

  3. 编写Java程序,使用Swing布局管理器和常用控件,实现仿QQ登录界面

    返回本章节 返回作业目录 需求说明: 使用Swing布局管理器和常用控件,实现仿QQ登录界面 实现思路: 创建登录界面的类QQLogin,该类继承父类JFrame,在该类中创建无参数的构造方法,在构造 ...

  4. 零基础~仿qq登录界面

    html代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  5. JavaSwing仿QQ登录界面,注释完善,适合新手学习

    使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为“素材”的文件夹. 素材: https://pan. ...

  6. Android—简单的仿QQ聊天界面

    最近仿照QQ聊天做了一个类似界面,先看下界面组成(画面不太美凑合凑合呗,,,,):

  7. Android 仿QQ消息界面

    values 下面 dimens.xml <resources> <!-- Default screen margins, per the Android Design guidel ...

  8. C#仿QQ设置界面导航

    效果预览,选择左边标签,右边内容会自动滚动到适当位置 public class AnchorPanel { List<PanelMenu> lst = new List<PanelM ...

  9. 32.qt quick-模仿QQ登录界面实现3D旋转(Rotation、Flipable)

    要想模仿QQ登录界面的3D旋转,我们需要学习Rotation和Flipable.由于没找到QQ的资源图,所以我们以两个图片为例模仿QQ的3D旋转,如下图所示: 最终效果如下所示: 1.Rotation ...

随机推荐

  1. 微信小程序开发教程

    9月21日晚发布的微信公众平台·小程序内侧邀请,微信应用号(小程序,「应用号」的新称呼)终于来了!目前还处于内测阶段,微信只邀请了部分企业参与封测.想必大家都关心应用号的最终形态到底是什么样子? 怎样 ...

  2. Mac 热键大全

    屏幕捕捉快捷键动作............................保存到............-快捷键 全屏捕捉........................桌面(.PDF文件)..... ...

  3. java web学习总结(三十) -------------------JSTL表达式

    一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...

  4. Node.js 教程 04 - 模块系统

    前言: Node.js的模块系统类似于C/C++的文件引用,可以声明对象,也可以定义类 创建对象. 大家这么理解,就简单了. 定义: 为了让Node.js的文件可以相互调用,Node.js提供了一个简 ...

  5. 理解Docker(4):Docker 容器使用 cgroups 限制资源使用

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  6. JAVA开发中遇到的小白点

    这里主要是自己个人开发中遇到的一些小问题,自己攒起来,来弥补自己薄弱的JAVA基础,大神不要见笑 1. DateFormat格式化的HH和hh区别: public static boolean com ...

  7. hdu1032 Train Problem II (卡特兰数)

    题意: 给你一个数n,表示有n辆火车,编号从1到n,入站,问你有多少种出站的可能.    (题于文末) 知识点: ps:百度百科的卡特兰数讲的不错,注意看其参考的博客. 卡特兰数(Catalan):前 ...

  8. 用java String类的getBytes(String charsetName)和String(byte[] bytes, String charsetName)解决乱码问题

    Java中String的数据是如何存储的,查看源代码就可以知道,String的数据是存储在char[] value这样一个成员变量中的,char类型的大小在java中是2个字节 我们还知道,现在普遍使 ...

  9. Java的JDBC操作

    Java的JDBC操作 [TOC] 1.JDBC入门 1.1.什么是JDBC JDBC从物理结构上来说就是java语言访问数据库的一套接口集合,本质上是java语言根数据库之间的协议.JDBC提供一组 ...

  10. js 批量设置css样式

    在js中更换样式比较常见,但是批量设置比较少遇见: 但是在做就是插件时,不想额外的添加css文件(需要导入,还可能引起冲突),能批量设置就比较方便了. 以下代码是来自网上的三种方法,使用第二种最方便了 ...