📄 chatclient.java
字号:
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/*****************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 + -