Introduction
In this article, we are going to create a Chat Application in Java. We will implement this application with the help of swing and sockets.
Socket in Java is used for communication between the applications running on different JRE. Socket and ServerSocket classes are the classes used for connection-oriented socket programming.
In the Chat Application in Java, we are going to make one-way client and server communication. So, the client sends a message to the server, and the server reads the message and prints it. Here, we will use two classes Socket and ServerSocket. The Socket class is used to communicate between the client and the server. With this class, we can read and write messages. The ServerSocket class is used on the server side.
Coding Chat Application in Java
First, let’s see the code for the Chat Application in Java then we will see the output. Create a project in Eclipse and give the name ChatApp or anything you want. Then create a package with the same name ChatApp. Then add two files Client.java and Server.java and paste the following code.
Client.java
package chatapp; import java.io.*; import java.util.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.text.*; import java.net.*; import javax.swing.border.*; public class Client implements ActionListener { JTextField text; static JPanel a1; static Box vertical = Box.createVerticalBox(); static JFrame f = new JFrame(); static DataOutputStream dout; public static JPanel formatLabel(String out) { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); JLabel output = new JLabel("<html><p style=\"width: 150px\">" + out + "</p></html>"); output.setFont(new Font("Tahoma", Font.PLAIN, 16)); output.setBackground(new Color(227, 250, 248)); output.setOpaque(true); output.setBorder(new EmptyBorder(15, 15, 15, 50)); panel.add(output); Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); JLabel time = new JLabel(); time.setText(sdf.format(cal.getTime())); panel.add(time); return panel; } public void actionPerformed(ActionEvent ae) { try { String out = text.getText(); JPanel p2 = formatLabel(out); a1.setLayout(new BorderLayout()); JPanel right = new JPanel(new BorderLayout()); right.add(p2, BorderLayout.LINE_END); vertical.add(right); vertical.add(Box.createVerticalStrut(15)); a1.add(vertical, BorderLayout.PAGE_START); dout.writeUTF(out); text.setText(""); f.repaint(); f.invalidate(); f.validate(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { new Client(); try { //object of the class Socket Socket s = new Socket("127.0.0.1", 6001); DataInputStream din = new DataInputStream(s.getInputStream()); dout = new DataOutputStream(s.getOutputStream()); while(true) { a1.setLayout(new BorderLayout()); String msg = din.readUTF(); JPanel panel = formatLabel(msg); JPanel left = new JPanel(new BorderLayout()); left.add(panel, BorderLayout.LINE_START); vertical.add(left); vertical.add(Box.createVerticalStrut(15)); a1.add(vertical, BorderLayout.PAGE_START); f.validate(); } } catch (Exception e) { e.printStackTrace(); } } Client() { f.setLayout(null); JPanel p1 = new JPanel(); p1.setBackground(new Color(37, 147, 211)); p1.setBounds(0, 0, 450, 70); p1.setLayout(null); f.add(p1); ImageIcon i1 = new ImageIcon(ClassLoader.getSystemResource("icons/3.png")); Image i2 = i1.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT); ImageIcon i3 = new ImageIcon(i2); JLabel back = new JLabel(i3); back.setBounds(5, 20, 25, 25); p1.add(back); back.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent ae) { System.exit(0); } }); ImageIcon i4 = new ImageIcon(ClassLoader.getSystemResource("")); Image i5 = i4.getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT); ImageIcon i6 = new ImageIcon(i5); JLabel profile = new JLabel(i6); profile.setBounds(40, 10, 50, 50); p1.add(profile); ImageIcon i7 = new ImageIcon(ClassLoader.getSystemResource("images/video.png")); Image i8 = i7.getImage().getScaledInstance(30, 30, Image.SCALE_DEFAULT); ImageIcon i9 = new ImageIcon(i8); JLabel video = new JLabel(i9); video.setBounds(300, 20, 30, 30); p1.add(video); ImageIcon i10 = new ImageIcon(ClassLoader.getSystemResource("images/phone.png")); Image i11 = i10.getImage().getScaledInstance(35, 30, Image.SCALE_DEFAULT); ImageIcon i12 = new ImageIcon(i11); JLabel phone = new JLabel(i12); phone.setBounds(360, 20, 35, 30); p1.add(phone); ImageIcon i13 = new ImageIcon(ClassLoader.getSystemResource("images/3icon.png")); Image i14 = i13.getImage().getScaledInstance(10, 25, Image.SCALE_DEFAULT); ImageIcon i15 = new ImageIcon(i14); JLabel morevert = new JLabel(i15); morevert.setBounds(420, 20, 10, 25); p1.add(morevert); JLabel name = new JLabel("Me"); name.setBounds(110, 15, 100, 18); name.setForeground(Color.WHITE); name.setFont(new Font("SAN_SERIF", Font.BOLD, 18)); p1.add(name); JLabel status = new JLabel("Active"); status.setBounds(110, 35, 100, 18); status.setForeground(Color.WHITE); status.setFont(new Font("SAN_SERIF", Font.BOLD, 14)); p1.add(status); a1 = new JPanel(); a1.setBounds(5, 75, 440, 500); f.add(a1); text = new JTextField(); text.setBounds(5, 575, 310, 40); text.setFont(new Font("SAN_SERIF", Font.PLAIN, 16)); f.add(text); JButton send = new JButton("Send"); send.setBounds(320, 575, 123, 40); send.setBackground(new Color(37, 147, 211)); send.setForeground(Color.WHITE); send.addActionListener(this); send.setFont(new Font("SAN_SERIF", Font.PLAIN, 16)); f.add(send); f.setSize(450, 700); f.setLocation(800, 50); f.setUndecorated(true); f.getContentPane().setBackground(Color.WHITE); f.setVisible(true); } }
Server.java
package chatapp; import java.io.*; import java.util.*; import java.text.*; import java.net.*; import javax.swing.*; import java.awt.*; import javax.swing.border.*; import java.awt.event.*; public class Server implements ActionListener { JTextField text; JPanel a1; static Box vertical = Box.createVerticalBox(); static JFrame f = new JFrame(); static DataOutputStream dout; public void actionPerformed(ActionEvent ae) { try { String out = text.getText(); JPanel p2 = formatLabel(out); a1.setLayout(new BorderLayout()); JPanel right = new JPanel(new BorderLayout()); right.add(p2, BorderLayout.LINE_END); vertical.add(right); vertical.add(Box.createVerticalStrut(15)); a1.add(vertical, BorderLayout.PAGE_START); dout.writeUTF(out); text.setText(""); f.repaint(); f.invalidate(); f.validate(); } catch (Exception e) { e.printStackTrace(); } } public static JPanel formatLabel(String out) { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); JLabel output = new JLabel("<html><p style=\"width: 150px\">" + out + "</p></html>"); output.setFont(new Font("Tahoma", Font.PLAIN, 16)); output.setBackground(new Color(37, 211, 102)); output.setOpaque(true); output.setBorder(new EmptyBorder(15, 15, 15, 50)); panel.add(output); Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); JLabel time = new JLabel(); time.setText(sdf.format(cal.getTime())); panel.add(time); return panel; } public static void main(String[] args) { new Server(); try { ServerSocket skt = new ServerSocket(6001); while(true) { Socket s = skt.accept(); DataInputStream din = new DataInputStream(s.getInputStream()); dout = new DataOutputStream(s.getOutputStream()); while(true) { String msg = din.readUTF(); JPanel panel = formatLabel(msg); JPanel left = new JPanel(new BorderLayout()); left.add(panel, BorderLayout.LINE_START); vertical.add(left); f.validate(); } } } catch (Exception e) { e.printStackTrace(); } } Server() { f.setLayout(null); JPanel p1 = new JPanel(); p1.setBackground(new Color(37, 147, 211)); p1.setBounds(0, 0, 450, 70); p1.setLayout(null); f.add(p1); ImageIcon i1 = new ImageIcon(ClassLoader.getSystemResource("images/3.png")); Image i2 = i1.getImage().getScaledInstance(25, 25, Image.SCALE_DEFAULT); ImageIcon i3 = new ImageIcon(i2); JLabel back = new JLabel(i3); back.setBounds(5, 20, 25, 25); p1.add(back); back.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent ae) { System.exit(0); } }); ImageIcon i4 = new ImageIcon(ClassLoader.getSystemResource("")); Image i5 = i4.getImage().getScaledInstance(50, 50, Image.SCALE_DEFAULT); ImageIcon i6 = new ImageIcon(i5); JLabel profile = new JLabel(i6); profile.setBounds(40, 10, 50, 50); p1.add(profile); ImageIcon i7 = new ImageIcon(ClassLoader.getSystemResource("images/video.png")); Image i8 = i7.getImage().getScaledInstance(30, 30, Image.SCALE_DEFAULT); ImageIcon i9 = new ImageIcon(i8); JLabel video = new JLabel(i9); video.setBounds(300, 20, 30, 30); p1.add(video); ImageIcon i10 = new ImageIcon(ClassLoader.getSystemResource("images/phone.png")); Image i11 = i10.getImage().getScaledInstance(35, 30, Image.SCALE_DEFAULT); ImageIcon i12 = new ImageIcon(i11); JLabel phone = new JLabel(i12); phone.setBounds(360, 20, 35, 30); p1.add(phone); ImageIcon i13 = new ImageIcon(ClassLoader.getSystemResource("images/3icon.png")); Image i14 = i13.getImage().getScaledInstance(10, 25, Image.SCALE_DEFAULT); ImageIcon i15 = new ImageIcon(i14); JLabel morevert = new JLabel(i15); morevert.setBounds(420, 20, 10, 25); p1.add(morevert); JLabel name = new JLabel("Friend"); name.setBounds(110, 15, 100, 18); name.setForeground(Color.WHITE); name.setFont(new Font("SAN_SERIF", Font.BOLD, 18)); p1.add(name); JLabel status = new JLabel("Active"); status.setBounds(110, 35, 100, 18); status.setForeground(Color.WHITE); status.setFont(new Font("SAN_SERIF", Font.BOLD, 14)); p1.add(status); a1 = new JPanel(); a1.setBounds(5, 75, 440, 500); f.add(a1); text = new JTextField(); text.setBounds(5, 575, 310, 40); text.setFont(new Font("SAN_SERIF", Font.PLAIN, 16)); f.add(text); JButton send = new JButton("Send"); send.setBounds(320, 575, 123, 40); send.setBackground(new Color(37, 147, 211)); send.setForeground(Color.WHITE); send.addActionListener(this); send.setFont(new Font("SAN_SERIF", Font.PLAIN, 16)); f.add(send); f.setSize(450, 700); f.setLocation(200, 50); f.setUndecorated(true); f.getContentPane().setBackground(Color.WHITE); f.setVisible(true); } }
Conclusion
In this article, we have built a Chat Application in Java. With this app, we have sent a message from the Client to Server i.e. from you to a friend. We recommend you try more and make this Chat Application in Java more advanced like adding group chat, showing real-time typing, adding profile images, etc. I hope you liked the article.
Thank you for reading our website.
Also Read:
- Dino Game in Java
- Java Games Code | Copy And Paste
- Supply Chain Management System in Java
- Survey Management System In Java
- Phone Book in Java
- Email Application in Java
- Inventory Management System Project in Java
- Blood Bank Management System Project in Java
- Electricity Bill Management System Project in Java
- CGPA Calculator App In Java
- Chat Application in Java
- 100+ Java Projects for Beginners 2023
- Airline Reservation System Project in Java
- Password and Notes Manager in Java
- GUI Number Guessing Game in Java
- How to create Notepad in Java?
- Memory Game in Java
- Simple Car Race Game in Java
- ATM program in Java
- Drawing Application In Java
- Tetris Game in Java
- Pong Game in Java
- Hospital Management System Project in Java
- Ludo Game in Java
- Restaurant Management System Project in Java
- Flappy Bird Game in Java
- ATM Simulator In Java
- Brick Breaker Game in Java
- Best Java Roadmap for Beginners 2023
- Snake Game in Java