博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
仿QQ大战—界面篇
阅读量:5923 次
发布时间:2019-06-19

本文共 3134 字,大约阅读时间需要 10 分钟。

之前在《仿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实现了接口TableModeJTable 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 *字号:字的大小(磅数) */

转载于:https://www.cnblogs.com/hesi/p/6114069.html

你可能感兴趣的文章
Effective Java-第三章
查看>>
Mysql 半同步复制
查看>>
Error: One or more models did not validate
查看>>
eclipse zend shift tab 缩减不生效问题解决
查看>>
Oracle学习总结3-基本对象
查看>>
我的友情链接
查看>>
centos7.x搭建gitlab9.2.2
查看>>
Linux centos 下安装iftop端口流量监控工具(通过编译方式安装)
查看>>
如何在51CTO上面编写一篇好看的博客
查看>>
MyBatis之分页
查看>>
PPT教程-适合售前和管理人员
查看>>
利用Cocos2dx-3.0新物理特性模拟弹珠迷宫
查看>>
MySQL 5.6为什么关闭元数据统计信息自动更新&统计信息收集源代码探索
查看>>
刚入门,学习C语言。
查看>>
现代中小企业IT基础平台建设 - 完整案例实战(08_文件共享应用)
查看>>
EIGRP汇总后生成的Null0接口和路由黑洞详解
查看>>
IT职场人生系列之二十:危险职业(续1)
查看>>
Asp.net 获取网页源代码
查看>>
在asp.net中调用Office来制作各种(3D)统计图
查看>>
vue-router 路由懒加载
查看>>