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

📄 chatclient.java

📁 Java编写的GUI聊天工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*****************Chat Client Application*********************************/
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
package com.jeeva.chatclient;

import java.awt.Panel;
import java.awt.Label;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Window;
import java.awt.TextField;
import java.awt.TextArea;
import java.awt.Frame;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.CardLayout;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.MediaTracker;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.Socket;
import java.util.StringTokenizer;
import java.io.Serializable;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.DataOutputStream;
import java.net.URL;
import java.net.Socket;
import java.awt.Toolkit;
import java.awt.MenuBar;
import java.awt.Menu;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
/**********Chat Client**************/
public class ChatClient extends Frame implements Serializable,Runnable,KeyListener,ActionListener,CommonSettings {
	
	ChatClient() 
	{		
		toolkit = Toolkit.getDefaultToolkit();		
		if(toolkit.getScreenSize().getWidth() > 778)
			setSize(778, 575);
		else
			setSize((int)toolkit.getScreenSize().getWidth(),(int)toolkit.getScreenSize().getHeight() - 20);			
		setResizable(false);
		dimension = getSize();	
		setLayout(new BorderLayout());	

		setTitle(PRODUCT_NAME);		
		addWindowListener(new WindowAdapter() {
		public void windowClosing(WindowEvent evt) { DisconnectChat();System.exit(0);}});
				
		/*****Loading menubar ***********/
		MenuBar menubar = new MenuBar();
		Menu loginmenu = new Menu("Login");		
		loginitem = new MenuItem("Login");
		loginitem.addActionListener(this);
		disconnectitem = new MenuItem("Disconnect");
		disconnectitem.addActionListener(this);
		seperatoritem = new MenuItem("-");
		quititem = new MenuItem("Quit");
		quititem.addActionListener(this);
		loginmenu.add(loginitem);
		loginmenu.add(disconnectitem);
		loginmenu.add(seperatoritem);
		loginmenu.add(quititem);
		
		Menu aboutmenu = new Menu("Help ");
		aboutitem = new MenuItem("About "+PRODUCT_NAME);
		aboutitem.addActionListener(this);
		aboutmenu.add(aboutitem);
		
		menubar.add(loginmenu);
		menubar.add(aboutmenu);
		setMenuBar(menubar);
				
		/**********Getting all the Parameteres***********/	
		UserName 	= "";			
		UserRoom	="";
		IconCount 	= 21;
		ChatLogo	= "images/logo.gif";
		BannerName 	= "images/defaultbanner.gif";
		RoomList 	= "";
		IsProxy = false;
		/*********Assigning Global Colors*************/
		ColorMap 	= new Color[MAX_COLOR];
		/*******Backgorund*********/
		ColorMap[0] =  new Color(224,236,254); 
		/*******Information Panel Background*********/
		ColorMap[1] =  new Color(255,153,0);
		/*******Button Foreground*********/
		ColorMap[2] =  Color.black; 
		/*******Button Background**************/
		ColorMap[3] =  new Color(224,236,254); 
		/*******sstab button****************/
		ColorMap[4] =  new Color(255,153,0);
		/*******message canvas*********/
		ColorMap[5] =  Color.black;
		/*******Top Panel Background*********/
		ColorMap[6] =  Color.yellow;
		/*******Label Text Colors*********/
		ColorMap[7] =  Color.white;
		
		/**********Loading Images*********/		
		tracker = new MediaTracker(this);
		int ImageCount = 0;
		ImgLogo 	= toolkit.getImage(ChatLogo);
		tracker.addImage(ImgLogo,ImageCount);
		ImageCount++;
		ImgBanner 	= toolkit.getImage(BannerName);		
		tracker.addImage(ImgBanner,ImageCount);
		ImageCount++;
				
		/**********Loading Icons....***********/
		IconArray = new Image[IconCount];
		for(G_ILoop = 0; G_ILoop < IconCount; G_ILoop++)
		{
			IconArray[G_ILoop] = toolkit.getImage("icons/photo"+G_ILoop+".gif");
			tracker.addImage(IconArray[G_ILoop],ImageCount);
			ImageCount++;
		}
		
		/*********Initialize Private Window **********/
		privatewindow = new PrivateChat[MAX_PRIVATE_WINDOW];
		PrivateWindowCount = 0;
		
				
		try{
			SetAppletStatus("Loading Images and Icons.....");			
			tracker.waitForAll();
		}catch (InterruptedException e){}
		
		setIconImage(toolkit.getImage("images/logo.gif"));
		SetAppletStatus("");		
		/**********Initializing all the Components*********/
		InitializeAppletComponents();	
		
	}
	
	private void ConnectToServer()
	{
		/***********Initialize the Socket*******/
		messagecanvas.ClearAll();
		messagecanvas.AddMessageToMessageObject("Connecting To Server... Please Wait...",MESSAGE_TYPE_ADMIN);								
		try {
			
			if(IsProxy)
			{				
				/*********Proxy***********/				
				SocksSocketImplFactory factory=new SocksSocketImplFactory(ProxyHost, ProxyPort);							
				SocksSocket.setSocketImplFactory(factory);						
				socket = new SocksSocket(ServerName,ServerPort);
				socket.setSoTimeout(0);
			}
			else
			{
				/*******Not Proxy*********/
				socket = new Socket(ServerName,ServerPort);					
			}				
			dataoutputstream = new DataOutputStream(socket.getOutputStream());
			SendMessageToServer("HELO "+UserName);			
			datainputstream  = new DataInputStream(socket.getInputStream());
			/***********Send HELO To Server **********/
			StartFlag = true;			
			thread = new Thread(this);
			thread.start();				
			EnableAll();					
		}catch(IOException _IoExc) { QuitConnection(QUIT_TYPE_NULL);}			
	}
	
	private void SendMessageToServer(String Message)
	{
		try {
			dataoutputstream.writeBytes(Message+"\r\n");	
		}catch(IOException _IoExc) { QuitConnection(QUIT_TYPE_DEFAULT);}			
	}
	/*******Initialize all the Applet Components********/
	private void InitializeAppletComponents()
	{
		/*******Common Settings***********/
		setBackground(ColorMap[0]);	
		Font font = new Font("Dialog",Font.BOLD,11);
		TextFont = new Font("Dialog",0,11);	
		setFont(font);	
		
		/***********Top Panel Coding*************/
		Panel TopPanel = new Panel(new BorderLayout());
		TopPanel.setBackground(ColorMap[6]);
		Panel LogoPanel = new ImagePanel(this,ImgLogo);		
		TopPanel.add("East",LogoPanel);		
		Panel BannerPanel = new ImagePanel(this,ImgBanner);
		TopPanel.add("West",BannerPanel);		
		add("North",TopPanel);	
		
		/*************Information Label Panel Coding*************/
		Panel CenterPanel = new Panel(new BorderLayout());
		Panel InformationPanel = new Panel(new BorderLayout());	
		InformationPanel.setBackground(ColorMap[1]);			
		InformationLabel = new Label();		
		InformationLabel.setAlignment(1);
		UpdateInformationLabel();  
		InformationLabel.setForeground(ColorMap[7]); 
		InformationPanel.add("Center",InformationLabel);
		CenterPanel.add("North",InformationPanel);
		
		/*********Message Canvas and SSTAB Coding********/
		Panel MessagePanel = new Panel(new BorderLayout());
		messagecanvas = new MessageCanvas(this);				
		MessageScrollView = new ScrollView(messagecanvas,true,true,TAPPANEL_CANVAS_WIDTH,TAPPANEL_CANVAS_HEIGHT,SCROLL_BAR_SIZE);
	  	messagecanvas.scrollview = MessageScrollView;	
		MessagePanel.add("Center",MessageScrollView);
		
		tappanel = new TapPanel(this);
						
	    MessagePanel.add("East",tappanel);  	    
	    CenterPanel.add("Center",MessagePanel);
	    
	    /*********Input Panel Coding Starts..*********/
	    Panel InputPanel = new Panel(new BorderLayout());
	    Panel TextBoxPanel = new Panel(new BorderLayout());
	    Label LblGeneral = new Label("General Message!");	    
	    TxtMessage = new TextField();
	    TxtMessage.addKeyListener(this);
	    TxtMessage.setFont(TextFont);
	    CmdSend = new CustomButton(this,"Send Message!");
	    CmdSend.addActionListener(this);
	    TextBoxPanel.add("West",LblGeneral);
	    TextBoxPanel.add("Center",TxtMessage);
	    TextBoxPanel.add("East",CmdSend);
	    InputPanel.add("Center",TextBoxPanel);
	    
	    Panel InputButtonPanel =new Panel(new BorderLayout());
	    CmdExit = new CustomButton(this,"Exit Chat");
	    CmdExit.addActionListener(this);
	    InputButtonPanel.add("Center",CmdExit);
	  	InputPanel.add("East",InputButtonPanel);
	  	
	  	Panel EmptyPanel = new Panel();
	  	InputPanel.add("South",EmptyPanel);
	  	
	  	CenterPanel.add("South",InputPanel);
	  	
	  	
		add("Center",CenterPanel);	
		
		DisableAll();
		
		LoginToChat();
	}
	
	private void LoginToChat()
	{
		/********* Open the Dialog *********/
		dialog = new InformationDialog(this);	
		if (dialog.IsConnect == true)
		{
			UserName 	= dialog.TxtUserName.getText();
			//UserRoom 	= dialog.roomchoice.getSelectedItem();
			ServerName 	= dialog.TxtServerName.getText();
			ServerPort 	= Integer.parseInt(dialog.TxtServerPort.getText());
			if(dialog.IsProxyCheckBox.getState() == true)
			{
				IsProxy = true;
				ProxyHost = dialog.TxtProxyHost.getText();
				ProxyPort = Integer.parseInt(dialog.TxtProxyPort.getText());
			}
			else
			{
				IsProxy = false;	
			}
			ConnectToServer();				
		}		
	}
	
	/*********Button Events *****/
	public void actionPerformed(ActionEvent evt)
	{
		if(evt.getSource().equals(CmdSend))
		{
			if (!(TxtMessage.getText().trim().equals("")))
				SendMessage();	
		}	
		
		if ((evt.getSource().equals(CmdExit)) || (evt.getSource().equals(quititem)))
		{
			DisconnectChat();
			System.exit(0);
		}
		
		if(evt.getSource().equals(loginitem))
		{
			LoginToChat();				
		}
		
		if(evt.getSource().equals(disconnectitem))
		{			
			DisconnectChat();						
		}		
		if(evt.getSource().equals(aboutitem))
		{			
			MessageBox messagebox = new MessageBox(this,false);					
			messagebox.AddMessage("~~13 "+PRODUCT_NAME);
			messagebox.AddMessage("Developed By...");
			messagebox.AddMessage(COMPANY_NAME);
			
		}
		
		
	}
	
	/********* Key Listener Event *************/
	public void keyPressed(KeyEvent evt)
	{
		if((evt.getKeyCode() == 10) && (!(TxtMessage.getText().trim().equals(""))))		
		{
			SendMessage();
		}
	}
		
	public void keyTyped(KeyEvent e){}
	public void keyReleased(KeyEvent e){}

	/******** Function To Send MESS Rfc to Server *************/
	private void SendMessage()
	{
		/********Sending a Message To Server *********/
		SendMessageToServer("MESS "+UserRoom+"~"+UserName+": "+TxtMessage.getText());
		messagecanvas.AddMessageToMessageObject(UserName+": "+TxtMessage.getText(),MESSAGE_TYPE_DEFAULT);	
		TxtMessage.setText("");
		TxtMessage.requestFocus();	
	}

	/*********Function To Update the Information Label*****/
	private void UpdateInformationLabel()
	{
		stringbuffer = new StringBuffer();
		stringbuffer.append("User Name: ");
		stringbuffer.append(UserName);
		stringbuffer.append("       ");
		stringbuffer.append("Room Name: ");
		stringbuffer.append(UserRoom);
		stringbuffer.append("       ");
		stringbuffer.append("No. Of Users: ");
		stringbuffer.append(TotalUserCount);
		stringbuffer.append("       ");	
		InformationLabel.setText(stringbuffer.toString());
		
	}
	
	/********Implements the Thread ****************/
	public void run()
	{
		while(thread != null)
		{
			try {
					ServerData = datainputstream.readLine();									

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -