Click here to Skip to main content
15,867,779 members
Articles / Programming Languages / Java / Java SE
Article

Java Chat With Customizable GUI

Rate me:
Please Sign up or sign in to vote.
4.75/5 (105 votes)
7 May 2007CPOL3 min read 1.1M   63.2K   134   259
A complete Java (AWT) Chat Application with great customizable GUI Interface. It has features such as general chat and private chat, music when message arrives, sending images and more
Sample Image - chat.jpg

Note: The latest source code has been uploaded along with this article now.

Introduction

This is my second article on The Code Project. I have already posted Tap Control in Java here.

This Java Chat is purely AWT based, no Swing Components used and still it has a great look and feel. For this application, I have developed my own Tab Control and Image Canvas. Also, I have uploaded the complete source code here. You can download it from there.

This is the updated article . Now I have posted all the concepts behind the chat instead
of putting the source code as per the request of The Code Project members.

Features

  1. Transfer Smilies with Text
  2. Private Chat
  3. Great Look and Feel with Customized Color
  4. Audio Enabled

Description

In this Chat application, we have both server side and client side modules.. In server side, I have defined our own RFC Commands. Some of the commands which I have used in this application are listed below:

  • HELO - Initialize connection to server
  • QUIT - Remove users from chat
  • KICK - Kickoff from chat
  • CHRO - Change room
  • MESS - Send general message
  • PRIV - Send private message
  • ROCO - Get users count in specified room
  • CALL - Request for voice chat (not included with this one)

Server Side Module

I will briefly explain the concepts behind the server side.

  • Created custom UserObject class which will have the client details like username, the socket of user, and the room name, etc.
  • When the Chat Server runs, it opens the Server Socket at port 1436 (we can modify too) and listen for the client to connect. If the client connects to the server, it will open a separate thread to service. So, when the client sends QUIT command, it will close the thread too. If you take a look ChatCommunication.java, you will get all the details.

This is a sample code of getting connection from the Chat Client and creating a new object of ChatCommunication. In ChatCommunication class, we will create a thread to watch all the commands from the client and responds to the client too.

Java
ChatServer.java
while(true
{
    Socket socket = serversocket.accept();
    ChatCommunication chat = new ChatCommunication(socket);
}
.........
         
ChatCommunication.java
..........
ChatCommuncation(Socket socket)
{
    personalsocket = socket;
    dout = new Dataoutputstream(personalsocket.getoutoutstream());
.....
}

Client Side Module

I will also briefly explains the concepts behind the Client side Chat.

  • When the Chat Client runs, it will open a socket and connect to ChatServer by sending HELO RFC to Server.. Once it gets connected, the chat client will keep the socket connection and communicate with the server whenever the user commands it.
  • Another important thing in the client module is the USER INTERFACE. I have created my OWN Custom Components like Tab Control and Image Supported Message Canvas.
  • The basic idea of creating a message canvas is based on simple logic. Whenever users enter the message, I will store it in arraylist. Also, in the Arraylist, I keep the XOffset and YOffSet position of each message. If you have a look of this sample code, you might get an idea of what I mean.
Java
Ex:
...........
for(int i =0; i < messagearraylist.size();i++)
{
PaintMessageToMessageCanvas((MessageObject)messagearraylist.get(i);
}.........

**************************************************************
This is the Function To Paint Images and Text Messages
**************************************************************
private void PaintMessageIntoCanvas(MessageObject messageObject)
{                
int m_YPos = messageobject.StartY - YOffset;
int m_XPos = 5 - XOffset;
int CustomWidth = 0;
String Message = messageobject.Message;

/*************Print The User Name in UserName Font **************/        
if(Message.indexOf(":") >= 0)
{
graphics.setFont(UserNameFont);        
chatclient.getGraphics().setFont(UserNameFont);
fontmetrics = chatclient.getGraphics().getFontMetrics();
String m_UserName = Message.substring(0,Message.indexOf(":")+1);
graphics.drawString(m_UserName,m_XPos+CustomWidth,m_YPos);            
CustomWidth+=fontmetrics.stringWidth(m_UserName)+HorizantalSpace;
Message = Message.substring(Message.indexOf(":")+1);
}

/*********Set the Text Font **********/
chatclient.getGraphics().setFont(TextFont);
graphics.setFont(TextFont);        
fontmetrics =  chatclient.getGraphics().getFontMetrics();

/**********Print Image Area********/
if(messageobject.IsImage == true)
{
tokenizer = new StringTokenizer(Message," ");    
while(tokenizer.hasMoreTokens())
{
TokenString = tokenizer.nextToken();                
if(TokenString.indexOf("~~") >= 0)
{
/********If its a Proper Image*************/
try {
int m_ImageIndex = Integer.parseInt(TokenString.substring(2));
if((m_ImageIndex >= 0) && (m_ImageIndex < chatclient.IconCount))
{                        
graphics.drawImage(chatclient.IconArray[m_ImageIndex]
,m_XPos+CustomWidth,m_YPos - 15,messageobject.Width,messageobject.Height,this);
CustomWidth+=messageobject.Width+HorizantalSpace;                            
}    
}catch(Exception _Exc) { }                
}
else
{                    
graphics.drawString(TokenString,m_XPos+CustomWidth,m_YPos);
CustomWidth+=fontmetrics.stringWidth(TokenString)+HorizantalSpace;
}
if(TotalWidth < m_XPos+CustomWidth)
{
TotalWidth = m_XPos+CustomWidth;
scrollview.setValues(TotalWidth,TotalHeight);
}
.................
}

Conclusion

In this updated article, I have uploaded my complete source code. To download the full source code, click here.

If you still have any doubts, feel free to contact me at vavjeeva@gmail.com.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Generaldocumentation of chat server Pin
anuradha bais14-Apr-09 6:28
anuradha bais14-Apr-09 6:28 
Questioncompile error... Pin
jayeth13-Apr-09 6:39
jayeth13-Apr-09 6:39 
RantRe: compile error... Pin
praveenrejeti28-Jul-10 17:43
praveenrejeti28-Jul-10 17:43 
Generalhello sir... Pin
niveditha.mm8-Apr-09 19:04
niveditha.mm8-Apr-09 19:04 
Generalrtyer Pin
lienhop29-Mar-09 18:25
lienhop29-Mar-09 18:25 
GeneralHi Pin
Verina17-Jan-09 8:59
Verina17-Jan-09 8:59 
Generalunable to use it on a network Pin
yuvraj31101-Jan-09 3:12
yuvraj31101-Jan-09 3:12 
GeneralRe: unable to use it on a network Pin
gaugau3-Jan-09 1:16
gaugau3-Jan-09 1:16 
Hi yuvraj3110,

I also manage to run this chat on the same machine.

Then I managed to run it on two diferents machine on the same local network (lan) and diferent OS.

I tried to run ServerChat on a remote machine and I got the same problem you have. My domain name resolves correctly and anyway I have already tried using the IP instead of Server Name.

I have done this:

sudo nmap -T Aggressive -A -v 127.0.0.1 -p 1-65000
Before and after running the ServerChat to check the way port 1436 is afected.

Then I tried:
sudo fuser -v 1436/tcp

In my case all seems ok, but the client remains unable to connect.

If you finally manage to find out how to do this I would be grateful you let me know.

Thanks.
GeneralRequest Pin
sentaroso5-Dec-08 0:50
sentaroso5-Dec-08 0:50 
QuestionHow to run this chat server project by using the same pc as client and server? Pin
shurovi4-Nov-08 2:29
shurovi4-Nov-08 2:29 
QuestionHow to get Class Diagram Of Chat Server in JAVA ? Pin
Rohan_kanhai2-Nov-08 4:55
Rohan_kanhai2-Nov-08 4:55 
GeneralSystem tray scrolling message application Pin
fred makossa28-Oct-08 6:28
fred makossa28-Oct-08 6:28 
GeneralChatCommunication.java compile Pin
dsuazo24-Oct-08 7:50
dsuazo24-Oct-08 7:50 
Generaldata flow diagram Pin
shikhar mishra18-Oct-08 0:16
shikhar mishra18-Oct-08 0:16 
Questionhow to run? Pin
niozect9-Oct-08 18:30
niozect9-Oct-08 18:30 
Questionhow to create a java intraner chatting software Pin
vivekanand343527-Sep-08 8:06
vivekanand343527-Sep-08 8:06 
QuestionCompilation of the java files Pin
vinvishwa22-Sep-08 5:20
vinvishwa22-Sep-08 5:20 
AnswerRe: Compilation of the java files Pin
shikhar mishra18-Oct-08 0:21
shikhar mishra18-Oct-08 0:21 
Questionhow to call jsp pages using ajax Pin
karanpsp16-Sep-08 21:21
karanpsp16-Sep-08 21:21 
GeneralHi sir...I am very interested with your chat software.... I have a question... [modified] Pin
Albz Malinao12-Sep-08 20:17
Albz Malinao12-Sep-08 20:17 
QuestionThe code in VB.net Pin
danielagaba26-Aug-08 2:25
danielagaba26-Aug-08 2:25 
AnswerRe: The code in VB.net Pin
Shihab110-Dec-08 20:58
Shihab110-Dec-08 20:58 
GeneralChat server Pin
Umamadu22-Aug-08 6:39
Umamadu22-Aug-08 6:39 
Generalchat server Pin
aanchal3113-Aug-08 22:46
aanchal3113-Aug-08 22:46 
GeneralRequest Pin
Ranganayaki10-Jul-08 3:03
Ranganayaki10-Jul-08 3:03 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.