java程序设计实验报告
文章目录
实验环境:
普通PC机,Windows10系统,IDEA Community Edition,java
实验目的:
-
学会运用java.awt和java.swing来实现窗口界面的建立,其中主要窗口包括登陆界面、好友界面、聊天界面
-
会运用监听,登录界面时点击登陆按钮能跳转至好友列表界面,好友列表界面中双击好友名称或头像能跳转至聊天界面,聊天界面中点击发送按钮的时候能将信息发送出去并显示在对话框中
-
掌握socket的用法,在消息的传送中,在客户端与服务器中建立socket,客户端与客户端之间能实现单独通信,且消息通过服务器中转,实现并行通信
实验内容:
运用java这一编程软件,进行一个伪QQ项目的实现。该伪QQ所能实现的功能为:实现登陆成功或失败,登陆成功则进入好友列表界面,在好友列表界面双击好友名称时,能进入与该好友聊天的界面。实现客户与客户的单独通信,且该信息通信通过服务端中转,且实现并行通信的模式。
实验步骤:
一、实验预处理
先建立一系列的包,以及将所需要的图片放入文件夹中,所建立的包以及图片放置位置如下图
其中,所需要的图片如下:
登录界面的背景图片
登陆界面时的头像
登录界面的窗体图标
好友列表中的好友头像
好友列表中黑名单选框中黑名单人员的头像
二、登录界面
进行登录界面的实现,该界面的效果为
当输入任意账号,密码为:11111111 时,即可登录成功,转入好友列表界面。
当输入的密码错误时,弹出用户名或密码错误
的窗口
实现登录界面的代码为:
package qq.client.view;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import qq.client.model.*;
import qq.common.*;
public class QqClientLogin extends JFrame implements ActionListener{
JLabel jup; //定义上部需要的组件 //标签
//定义中部需要的组件
JPanel jmid ;
JLabel jmid_num1,jmid_key1;
JTextField jmid_num2; //文本框
JPasswordField jmid_key2; //密码框
JCheckBox jmid_rember,jmid_automatic; //复选框
//JLabel jLabel2;
JPanel jdown; //JPanel 面板
JButton jdown_1,jdown_2; //定义下部需要的组件
private static final long serialVersionUID = -6788045638380819221L;
//用户名
private final JTextField ulName;
//密码
private final JPasswordField ulPasswd;
//小容器
private final JLabel j1;
private final JLabel j2;
private final JLabel j3;
private final JLabel j4;
//小按钮
private final JButton b1;
private final JButton b2;
private final JButton b3;
//复选框
private final JCheckBox c1;
private final JCheckBox c2;
//列表框
private final JComboBox<String> cb1;
/**
* 初始化QQ登录页面
* */
public QqClientLogin()
{
//设置登录窗口标题
this.setTitle("QQ登录");
//去掉窗口的装饰(边框)
// this.setUndecorated(true);
//采用指定的窗口装饰风格
this.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
//窗体组件初始化
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置布局为绝对定位
this.setLayout(null);
this.setBounds(0, 0, 355, 265);
//设置窗体的图标
Image img0 = new ImageIcon("D:/黑猫紧张/JDK/wen/QqClient/logo.png").getImage();
this.setIconImage(img0);
//窗体大小不能改变
this.setResizable(false);
//居中显示
this.setLocationRelativeTo(null);
//窗体显示
this.setVisible(true);
/**
* 窗体组件初始化
* */
//创建一个容器,其中的图片大小和setBounds第三、四个参数要基本一致(需要自己计算裁剪)
Container container = this.getContentPane();
j1 = new JLabel();
//设置背景色
Image img1 = new ImageIcon("D:/黑猫紧张/JDK/wen/QqClient/beijing.png").getImage();
j1.setIcon(new ImageIcon(img1));
j1.setBounds(0, 0, 355, 265);
//qq头像设定
j2 = new JLabel();
Image img2 = new ImageIcon("D:/黑猫紧张/JDK/wen/QqClient/touxiang.png").getImage();
j2.setIcon(new ImageIcon(img2));
j2.setBounds(40, 95, 50, 53);
//用户名输入框
ulName = new JTextField();
ulName.setBounds(100, 100, 150, 20);
//注册账号
j3 = new JLabel("注册账号");
j3.setBounds(260, 100, 70, 20);
j3.setForeground(Color.WHITE);
//密码输入框
ulPasswd = new JPasswordField();
ulPasswd.setBounds(100, 130, 150, 20);
//找回密码
j4= new JLabel("找回密码");
j4.setBounds(260, 130, 70, 20);
j4.setForeground(Color.WHITE);
//记住密码
c1 = new JCheckBox("记住密码");
c1.setBounds(105, 155, 80, 15);
//自动登陆
c2 = new JCheckBox("自动登陆");
c2.setBounds(185, 155, 80, 15);
//用户登陆状态选择
cb1 = new JComboBox<String>();
cb1.addItem("在线");
cb1.addItem("隐身");
cb1.addItem("离开");
cb1.setBounds(40, 150, 55, 20);
//登陆按钮
b1 = new JButton("登录");
b1.addActionListener(this); //监控
//设置字体和颜色和手形指针
b1.setFont(new Font("宋体", Font.PLAIN, 12));
b1.setForeground(Color.BLUE);
b1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
b1.setBounds(280, 200, 65, 20);
//多账号
b2 = new JButton("多账号")