⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jim.java

📁 照书上做的JIM软件,不过不知道为什么还不能运行.要是能调出来功能绝对完善
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
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 + -