📄 jim.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;
import javax.swing.border.*;
import java.util.Vector;
//Jim类是客户端的主类。主要是创建一个Login类的对象,用于显示用户登陆界面。代码如下:
public class Jim
{
public static void main(String[ ] args)//主程序
{
Login loginWin=new Login( );//创建一个Login类的对象
loginWin.setVisible(true);//显示用户登录界面
}
}
//Login类为用户登录类,显示用户登录界面,处理用户登陆过程。代码如下:
class Login extends JFrame //登录窗口类
{
JPanel contentPane;
String serverName; //服务器名
int serverPort; //端口
JPanel jPanel1=new JPanel( ); //面板1
JLabel jlImNo=new JLabel( ); //用户JIM号标签
JTextField jtfImNo=new JTextField( ); //输入用户JIM号的文本框
JLabel jlPassword=new JLabel( ); //用户口令标签
JPasswordField jpfPassword=new JPasswordField( ); //输入用户口令的文本框
JPanel jPanel2=new JPanel( ); //面板2
JButton jbLogin=new JButton( ); //"登录"按钮
JButton jbNewUser=new JButton( ); //"注册"按钮
JButton jbQuit=new JButton( ); //"退出"按钮
public Login( )
{
//激活窗口事件,使界面能响应窗口事件
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try
{
loginInit( ); //界面初始化
getServerConfig( ); //从配置文件中获取服务器端的配置
}catch (Exception e){e.printStackTrace( );}
}
public void getServerConfig( ) //从配置文件中获取服务器端的配置
{
try
{
File fileConfig=new File("config.txt");
BufferedReader br=new BufferedReader(new FileReader(fileConfig));
serverName=br.readLine( ).substring(11);
serverPort=Integer.parseInt(br.readLine( ).substring(11));
}
catch(Exception e1)
{
serverName="127.0.0.1";
serverPort=8080;
}
}
private void loginInit( )throws Exception //界面初始化
{
contentPane=(JPanel)this.getContentPane( );
contentPane.setLayout(null); //设置窗口布局为无布局管理器
this.setResizable(false); //窗口不能改变大小
this.setSize(new Dimension(350,250)); //指定窗口大小
this.setTitle("JIM用户登陆"); //指定窗口标题
jPanel1.setBounds(new Rectangle(0,20,350,90)); //指定面板大小
jPanel1.setLayout(null); //指定面板1的布局为无布局管理器
jlImNo.setText("JIM号码");
//指定标签位置和大小
jlImNo.setBounds(new Rectangle(40,20,60,20));
//指定输入用户JIM号的文本框的位置和大小
jtfImNo.setBounds(new Rectangle(105,19,180,22));
jlPassword.setText("JIM密码");
jlPassword.setBounds(new Rectangle(40,60,60,20));
jpfPassword.setBounds(new Rectangle(105,59,180,22));
jPanel2.setBounds(new Rectangle(1,120,344,100));
jPanel2.setLayout(null);
jbLogin.setText("登录");
jbLogin.setBounds(new Rectangle(5,10,60,25));
//为"登录"按钮增加鼠标事件监听器
jbLogin.addMouseListener(new java.awt.event.MouseAdapter(){
public void mouseClicked(MouseEvent e){
jbLogin_mouseClicked(e);
}
});
jbQuit.setText("退出");
jbQuit.setBounds(new Rectangle(85,10,60,25));
//为退出按钮增加鼠标事件监听器
jbQuit.addMouseListener(new java.awt.event.MouseAdapter(){
public void mouseClicked(MouseEvent e){
jbQuit_mouseClicked(e);
}
});
jbNewUser.setText("注册");
jbNewUser.setBounds(new Rectangle(245,10,60,25));
//为"注册"按钮增加鼠标事件监听器
jbNewUser.addMouseListener(new java.awt.event.MouseAdapter( ){
public void mouseClicked(MouseEvent e){
jbNewUser_mouseClicked(e);
}
});
//将面板1加到窗口上
contentPane.add(jPanel1,null);
//将标签和文本框加到面板1上
jPanel1.add(jlImNo,null);
jPanel1.add(jtfImNo,null);
jPanel1.add(jlPassword,null);
jPanel1.add(jpfPassword,null);
//将面板2加到窗口上
contentPane.add(jPanel2,null);
//将按钮加到面板2上
jPanel2.add(jbLogin,null);
jPanel2.add(jbQuit,null);
jPanel2.add(jbNewUser,null);
}
//以下为当发生窗口关闭事件时的动作
protected void processWindowEvent(WindowEvent e){
super.processWindowEvent(e);
if(e.getID( )==WindowEvent.WINDOW_CLOSING){
System.exit(0); //程序退出
}
}
//以下为当发生"登录"按钮的Clicked事件将产生的动作
void jbLogin_mouseClicked(MouseEvent e)
{
try
{
//连接服务器
Socket socket=new Socket(InetAddress.getByName(serverName),serverPort);
//创建输入输出流
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
//向服务器发送登录请求
out.println("LOGIN");
out.println(jtfImNo.getText( ));
out.println(jpfPassword.getPassword( ));
String str=" ",msgStr=" ";
str=in.readLine().trim( );
msgStr=in.readLine().trim( );
//向服务器发出中断通讯的消息
out.println("END");
//若服务器返回的消息是FALSE,将显示出具体的错误内容
if(str.equals("FALSE"))JOptionPane.showMessageDialog(this,msgStr,"确定",JOptionPane.INFORMATION_MESSAGE);
else{
//若正确,则关闭通讯连接,并关闭窗口
socket.close( );
this.dispose( );
//打开JIM的界面
int g=Integer.parseInt(jtfImNo.getText( ));
JimWin jimWin=new JimWin(g,serverName,serverPort);
jimWin.setVisible(true);
}
}catch(IOException e1){}
}
//以下为"注册"按钮发生Clicked事件时的动作
void jbNewUser_mouseClicked(MouseEvent e)
{
JDialog d=new Register(serverName,serverPort);//打开注册窗口
d.pack();
d.setLocationRelativeTo(this);//指定注册窗口显示的位置在本窗口位置
d.setSize(400,400); //指定注册窗口的大小
this.dispose(); //关闭登录窗口
d.show(); //显示注册窗口
}
//以下为退出按钮发生事件时的动作
void jbQuit_mouseClicked(MouseEvent e)
{
this.dispose(); //关闭登录窗口
System.exit(0); //程序退出
}
}
//Register类
//该类用于显示用户的注册界面,并处理用户的注册请求。代码如下:
class Register extends JDialog //注册用户类
{
JPanel jpBottom = new JPanel();
JLabel jlPrompt = new JLabel();
JTextField jtNickName = new JTextField();
JLabel jlNickName = new JLabel();
JLabel jlPassword = new JLabel();
JPasswordField jpfPassWord=new JPasswordField();
JComboBox jcbFace=new JComboBox();
JLabel jlSex= new JLabel();
JComboBox jcbSex=new JComboBox();
JLabel jlAge= new JLabel();
JTextField jtfAge = new JTextField();
JLabel jlPhone = new JLabel();
JTextField jtfPhone = new JTextField();
JTextField jtfEMail = new JTextField();
JLabel jlEMail = new JLabel();
JLabel jlHomePage = new JLabel();
JTextField jtfHomePage = new JTextField();
JLabel jlResume=new jLabel( );
JTextPane jtpResume = new JTextPane();
JButton jbOK= new JButton();
JLabel jbCancel = new JButton();
String serverName;//服务器名
int serverPort;//服务器端口
public Register(String s,int port) //构造函数
{
serverName=s;
serverPort=port;
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try
{
registerInit();//创建窗口
pack();
this.setResizable(false);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
void registerInit() throws Exception //初始化创建窗口
{
String[ ] pics; //存放头像的图像文件名
//以下为通过设置文件过滤器,用于查找图像文件
FilenameFilter fileFilter=new FilenameFilter(){
public boolean accept(File dir,String name){
if(name.endsWith("_1.JPG")||name.endsWith("_1.jpg")){
return true;
}
return false;
}
};
File dir=new File("face"); //图像文件存放在face目录下
pics=dir.list(fileFilter);
jpBottom.setLayout(null);
this.getContentPane().setLayout(null);
jpBottom.setBounds(new Rectangle(0,0,550,550));
this.setTitle("注册新用户");
jlPrompt.setText("请填写以下内容");
jlPrompt.setBounds(new Rectangle(10,10,100,20));
jlNickName.setText("昵称");
jlNickName.setBounds(new Rectangle(36,40,45,20));
jtNickName.setBounds(new Rectangle(70,40,180,22));
jlPassword.setText("密码");
jlPassword.setBounds(new Rectangle(36,70,60,20));
jpfPassWord.setBounds(new Rectangle(70,70,180,22));
//将显示头像的下拉列表框进行个性化设置
//使其能够显示图标而不是平常的文字
ComboBoxModel model=new HeadPicCombobox(pics);
ListCellRenderer renderer=new HeadPicCellRenderer();
jcbFace.setBounds(new Rectangle(290,40,80,50));
jcbFace.setModel(model); //设置控件的模型
jcbFace.setRenderer(renderer); //安装绘制器
jlSex.setText("性别");
jlSex.setBounds(new Rectangle(36,100,45,20));
jcbSex.setToolTipText("");
jcbSex.addItem("女");
jcbSex.addItem("男");
jcbSex.setBounds(new Rectangle(70,100,45,22));
jlAge.setText("年龄");
jlAge.setBounds(new Rectangle(135,100,50,20));
jtfAge.setBounds(new Rectangle(170,100,40,22));
jlPhone.setText("电话");
jlPhone.setBounds(new Rectangle(225,100,50,20));
jtfPhone.setBounds(new Rectangle(260,100,110,22));
jlEMail.setText("电子邮件");
jlEMail.setBounds(new Rectangle(10,130,60,20));
jtfEMail.setBounds(new Rectangle(70,130,300,22));
jlHomePage.setText("个人主页");
jlHomePage.setBounds(new Rectangle(10,160,60,20));
jtfHomePage.setBounds(new Rectangle(70,160,300,22));
jlResume.setText("个人说明");
jlResume.setBounds(new Rectangle(10,190,60,20));
jtpResume.setBounds(new Rectangle(70,190,300,110));
jbOK.setText("确定");
jbOK.setBounds(new Rectangle(147,330,79,29));
jbOK.addMouseListener(new java.awt.event.MouseAdapter(){
public void mouseClicked(MouseEvent e){
jbOK_mouseClicked(e);
}
});
jbCancel.setText("取消");
jbCancel.setBounds(new Rectangle(260,329,79,29));
jbCancel.addMouseListener(new java.awt.event.MouseAdapter(){
public void mouseClicked(MouseEvent e){
jbCancel_mouseClicked(e);
}
});
this.getContentPane().add(jpBottom,null);
jpBottom.add(jlPrompt,null);
jpBottom.add(jlNickName,null);
jpBottom.add(jtNickName,null);
jpBottom.add(jlPassword,null);
jpBottom.add(jpfPassWord,null);
jpBottom.add(jcbFace,null);
jpBottom.add(jlSex,null);
jpBottom.add(jcbSex,null);
jpBottom.add(jlAge,null);
jpBottom.add(jtfAge,null);
jpBottom.add(jlPhone,null);
jpBottom.add(jtfPhone,null);
jpBottom.add(jtfEmail,null);
jpBottom.add(jlEmail,null);
jpBottom.add(jlHomePage,null);
jpBottom.add(jtfHomePage,null);
jpBottom.add(jlResume,null);
jpBottom.add(jtpResume,null);
jpBottom.add(jbOK,null);
jpBottom.add(jbCancel,null);
}
//处理"确定"按钮的mouseClicked事件的方法
void jbOK_mouseClicked(MouseEvent e)
{
try
{
Socket socket=new Socket(InetAddress.getByName(serverName),serverPort);
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
//按照通讯协议发送用户注册的请求
out.println("NEW");
out.println(jtNickName.getText( ).trim()); //昵称
out.println(jpfPassWord.getPassword()); //口令
out.println(jcbFace.getSelectedIndex()+1); //头像号
out.println(jcbSex.getSelectedIndex()); //性别
out.println(jtfAge.getText( ).trim()); //年龄
out.println(jtfEMail.getText( ).trim()); //EMail
out.println(jtfHomePage.getText( ).trim()); //个人主页
out.println(jtfPhone.getText( ).trim()); //电话
out.println(jtpResume.getText( ).trim()); //个人简介
//读取服务器的返回信息
int no;
no=Integer.parseInt(in.readLine()); //返回的用户JIM号
String str="";
str=in.readLine().trim(); //返回成功或失败
//告诉服务器结束通讯
out.println("END");
socket.close();
if (str.equals("FALSE"))
JOptionPane.showMessageDialog(this,"对不起,出错了:-(","OK",JOptionPane.INFORMATION_MESSAGE);
else
{//如果成功就告诉用户其号码
JOptionPane.showMessageDialog(this,"你的JIM号码是"+no,"OK",JOptionPane.INFORMATION_MESSAGE);
this.dispose(); //关闭注册窗口
//打开JIM的窗口界面
JimWin jimWin=new JimWin(no,serverName,serverPort);
jimWin.setVisible(true);
}
}catch(IOException e1){ }
}
//处理"取消"按钮的mouseClicked事件
void jbCancel_mouseClicked(MouseEvent e)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -