仿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
 *字号:字的大小(磅数)
 */

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GEC6818飞机大战是一个在GEC6818开发板上实现的游戏项目。根据引用[1]的描述,该项目最初是由一个学生小组在小学期的实训中完成的。在选择项目时,他们得到了电子钢琴、电子相册、五子棋和2048等选项,但他们决定做一个飞机大战游戏,因为这是他们童年的回忆,并且他们想要做一个网上找不到的独特版本。 根据引用中的坐标跟踪和事件描述,游戏中的英雄机可以通过手指在屏幕上的滑动来控制,英雄机的子弹从上方出发并向上移动,当与敌机坐标重合时发生碰撞事件。敌机的出生位置是屏幕上方的随机位置,敌机的子弹与英雄机的子弹类似,只是方向相反。 根据引用的整体设计框图描述,GEC6818开发板上的游戏包括英雄机、敌机、子弹和背景图等元素。英雄机出生在屏幕底部中间位置,可以在屏幕下半部分随意移动,并发射子弹。敌机出生在屏幕上方的随机位置,并以每秒50个像素点的速度向下移动。游戏界面中还有背景图、最高分和当前分数的显示。 游戏中还有一些事件,例如击中事件和撞击事件。当英雄机的子弹与敌机的坐标重合时,即可判定为击中,敌机和子弹消失。当英雄机与敌机的坐标重合时,即可判定为撞击,游戏结束。 综上所述,GEC6818飞机大战是一个使用GEC6818开发板实现的游戏项目,具有可控制英雄机、发射子弹、击中敌机、避免撞击等功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C飞机大战](https://blog.csdn.net/qq_45139915/article/details/119668015)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值