Java实现聊天室界面

这篇文章主要为大家详细介绍了Java实现聊天室界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java实现聊天室界面的具体代码,供大家参考,具体内容如下

服务器端:

package Server;   import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.List;   import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JList; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException;   public class ServerFrame extends JFrame implements ActionListener {       private JButton jbt_start;     private JButton jbt_stop;     private JButton jbt_exit;     private JTextArea jta_disMess;     private JList jlt_disUsers;       private Server server;       public List online_usernames;     public List online_usernameids;       public ServerFrame(Server server) {         this.server = server;         online_usernames = new ArrayList();         online_usernameids = new ArrayList();         try {             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());         } catch (ClassNotFoundException e) {             e.printStackTrace();         } catch (InstantiationException e) {             e.printStackTrace();         } catch (IllegalAccessException e) {             e.printStackTrace();         } catch (UnsupportedLookAndFeelException e) {             e.printStackTrace();         }         setTitle("\u670D\u52A1\u5668");         setIconImage(Toolkit.getDefaultToolkit().getImage("Images/socket.jpg-600"));         setSize(449, 301);         setResizable(false);         WinCenter.center(this);         addWindowListener(new WindowAdapter() {             @Override             public void windowClosing(WindowEvent arg0) {                 jbt_exit.doClick();             }         });         getContentPane().setLayout(null);           jbt_start = new JButton("\u542F\u52A8\u670D\u52A1\u5668");         jbt_start.setBounds(32, 23, 103, 34);         jbt_start.addActionListener(this);         getContentPane().add(jbt_start);           jbt_stop = new JButton("\u505C\u6B62\u670D\u52A1\u5668");         jbt_stop.setBounds(145, 23, 103, 34);         jbt_stop.setEnabled(false);         jbt_stop.addActionListener(this);         getContentPane().add(jbt_stop);           jbt_exit = new JButton("\u9000\u51FA\u670D\u52A1\u5668");         jbt_exit.setBounds(258, 23, 103, 34);         jbt_exit.addActionListener(this);         getContentPane().add(jbt_exit);           JScrollPane scrollPane = new JScrollPane();         scrollPane.setBounds(10, 64, 221, 192);         scrollPane.setWheelScrollingEnabled(true);         scrollPane.setBorder(BorderFactory.createTitledBorder("聊天消息"));         getContentPane().add(scrollPane);           jta_disMess = new JTextArea();         scrollPane.setViewportView(jta_disMess);           JScrollPane scrollPane_1 = new JScrollPane();         scrollPane_1.setBounds(258, 65, 157, 191);         scrollPane_1.setBorder(BorderFactory.createTitledBorder("在线用户"));         getContentPane().add(scrollPane_1);           jlt_disUsers = new JList();         jlt_disUsers.setVisibleRowCount(4);         scrollPane_1.setViewportView(jlt_disUsers);     }       /**      *      */     private static final long serialVersionUID = 1L;       @Override     public void actionPerformed(ActionEvent arg0) {         if (arg0.getSource() == jbt_start) {             jbt_start.setEnabled(false);             jbt_stop.setEnabled(true);             server.startServer();         }         if (arg0.getSource() == jbt_stop) {             int flag = JOptionPane.showConfirmDialog(this, "是否要停止服务器?", "",                     JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);             if (flag == JOptionPane.OK_OPTION) {                 server.stopServer();                 jbt_start.setEnabled(true);                 jbt_stop.setEnabled(false);             }         }         if (arg0.getSource() == jbt_exit) {             if (jbt_stop.isEnabled()) {                 jbt_stop.doClick();             }             server.close();         }     }       public void setDisUsers(String userNames) {         if (userNames.equals("@userlist")) {             jlt_disUsers.removeAll();             String[] user_null = new String[]{};             jlt_disUsers.setListData(user_null);         } else {             if (userNames.contains("@userlist")) {                 String[] dis = userNames.split("@userlist");                 String[] disUsernames = new String[dis.length / 2];                 int j = 0;                 for (int i = 0; i 

设置窗口居中代码:

package Server;   import java.awt.Dimension; import java.awt.Toolkit; import java.awt.Window;   public class WinCenter {     public static void center(Window win) {         Toolkit tkit = Toolkit.getDefaultToolkit();         Dimension sSize = tkit.getScreenSize();         Dimension wSize = win.getSize();         if (wSize.height > sSize.height) {             wSize.height = sSize.height;         }         if (wSize.width > sSize.width) {             wSize.width = sSize.width;         }         win.setLocation((sSize.width - wSize.width) / 2, (sSize.height - wSize.height) / 2);     } }

客户端:

登录界面

package Client;   import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException;   import java.awt.Font; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.net.Inet4Address; import java.net.UnknownHostException;   import javax.swing.JTextField; import javax.swing.JButton;   public class Client_enterFrame extends JFrame implements ActionListener, KeyListener {     public Client_enterFrame(Client client) {         this.client = client;         try {             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());         } catch (ClassNotFoundException e1) {             e1.printStackTrace();         } catch (InstantiationException e1) {             e1.printStackTrace();         } catch (IllegalAccessException e1) {             e1.printStackTrace();         } catch (UnsupportedLookAndFeelException e1) {             e1.printStackTrace();         }         setIconImage(Toolkit.getDefaultToolkit().getImage("Images/socket.jpg-600"));         setTitle("\u804A\u5929\u5BA4");         getContentPane().setLayout(null);         setSize(296, 249);         WinCenter.center(this);         setResizable(false);         addWindowListener(new WindowAdapter() {             @Override             public void windowClosing(WindowEvent e) {                 jbt_exit.doClick();             }         });           JLabel lblNewLabel = new JLabel("\u7528\u6237\u540D");         lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 14));         lblNewLabel.setBounds(23, 30, 81, 34);         getContentPane().add(lblNewLabel);           jtf_username = new JTextField();         jtf_username.addKeyListener(this);         jtf_username.setBounds(114, 30, 143, 34);         getContentPane().add(jtf_username);         jtf_username.setColumns(10);           JLabel lblNewLabel_1 = new JLabel("\u670D\u52A1\u5668\u5730\u5740");         lblNewLabel_1.setFont(new Font("宋体", Font.PLAIN, 14));         lblNewLabel_1.setBounds(23, 74, 81, 34);         getContentPane().add(lblNewLabel_1);           jtf_hostIp = new JTextField();         jtf_hostIp.setBounds(114, 74, 143, 34);         jtf_hostIp.addKeyListener(this);         getContentPane().add(jtf_hostIp);         try {             String ip = (String) Inet4Address.getLocalHost().getHostAddress();             jtf_hostIp.setText(ip);         } catch (UnknownHostException e) {             e.printStackTrace();         }         jtf_hostIp.setColumns(10);           JLabel lblNewLabel_2 = new JLabel("\u7AEF\u53E3\u53F7");         lblNewLabel_2.setFont(new Font("宋体", Font.PLAIN, 14));         lblNewLabel_2.setBounds(23, 118, 81, 34);         getContentPane().add(lblNewLabel_2);           jtf_hostPort = new JTextField();         jtf_hostPort.addKeyListener(this);         jtf_hostPort.setBounds(114, 118, 143, 34);         getContentPane().add(jtf_hostPort);         jtf_hostPort.setText("5000");         jtf_hostPort.setColumns(10);           jbt_enter = new JButton("\u8FDB\u5165\u804A\u5929\u5BA4");         jbt_enter.addActionListener(this);         jbt_enter.addKeyListener(this);         jbt_enter.setFont(new Font("宋体", Font.PLAIN, 14));         jbt_enter.setBounds(23, 162, 108, 39);         getContentPane().add(jbt_enter);           jbt_exit = new JButton("\u9000\u51FA\u804A\u5929\u5BA4");         jbt_exit.setFont(new Font("宋体", Font.PLAIN, 14));         jbt_exit.setBounds(144, 162, 113, 39);         jbt_exit.addActionListener(this);         getContentPane().add(jbt_exit);     }       /**      *      */     private static final long serialVersionUID = 1L;     private JTextField jtf_username;     private JTextField jtf_hostIp;     private JTextField jtf_hostPort;     private JButton jbt_enter;     private JButton jbt_exit;     private Client client;         @Override     public void actionPerformed(ActionEvent e) {         if (e.getSource() == jbt_exit) {             setVisible(false);             client.exitLogin();         }         if (e.getSource() == jbt_enter) {             String username = jtf_username.getText();             username.trim();             String hostIp = jtf_hostIp.getText();             hostIp.trim();             String hostPort = jtf_hostPort.getText();             hostPort.trim();             if (!username.equals("")) {                 if (!hostIp.equals("")) {                     if (!hostPort.equals("")) {                         String login_mess = client.login(username, hostIp, hostPort);                         if (login_mess.equals("true")) {                             this.setVisible(false);                             client.showChatFrame(username);                         } else {                             JOptionPane.showMessageDialog(this, login_mess);                         }                     } else {                         JOptionPane.showMessageDialog(this, "服务器连接端口号不能为空!");                     }                 } else {                     JOptionPane.showMessageDialog(this, "服务器地址不能为空!");                 }             } else {                 JOptionPane.showMessageDialog(this, "用户名不能为空!");             }         }     }       @Override     public void keyPressed(KeyEvent arg0) {         if (arg0.getKeyCode() == KeyEvent.VK_ENTER) {             jbt_enter.doClick();         }     }       @Override     public void keyReleased(KeyEvent arg0) {     }       @Override     public void keyTyped(KeyEvent arg0) {     } }

聊天主界面

package Client;   import java.awt.Font; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.List;   import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.ListModel; import javax.swing.ListSelectionModel; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener;   public class Client_chatFrame extends JFrame implements ActionListener,         KeyListener, ListSelectionListener {     public Client_chatFrame(Client client, String title) {         this.client = client;         try {             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());         } catch (ClassNotFoundException e) {             e.printStackTrace();         } catch (InstantiationException e) {             e.printStackTrace();         } catch (IllegalAccessException e) {             e.printStackTrace();         } catch (UnsupportedLookAndFeelException e) {             e.printStackTrace();         }         setIconImage(Toolkit.getDefaultToolkit().getImage("Images/socket.jpg-600"));         setTitle("\u804A\u5929\u5BA4" + "  " + title);         setSize(450, 325);         WinCenter.center(this);         setResizable(false);         addWindowListener(new WindowAdapter() {             @Override             public void windowClosing(WindowEvent arg0) {                 jbt_exit.doClick();             }         });         getContentPane().setLayout(null);           JScrollPane scrollPane = new JScrollPane();         scrollPane.setBorder(BorderFactory.createTitledBorder("聊天消息"));         scrollPane.setBounds(10, 10, 283, 167);         scrollPane.setWheelScrollingEnabled(true);         getContentPane().add(scrollPane);           jta_disMess = new JTextArea();         jta_disMess.setEditable(false);         scrollPane.setViewportView(jta_disMess);           jtf_inputMess = new JTextField();         jtf_inputMess.addKeyListener(this);         jtf_inputMess.setBounds(10, 242, 192, 32);         getContentPane().add(jtf_inputMess);         jtf_inputMess.setColumns(10);           jbt_trans = new JButton("\u53D1  \u9001");         jbt_trans.setFont(new Font("宋体", Font.PLAIN, 14));         jbt_trans.setBounds(212, 241, 93, 32);         jbt_trans.addActionListener(this);         getContentPane().add(jbt_trans);           jbt_clear = new JButton("\u6E05\u9664\u804A\u5929\u8BB0\u5F55");         jbt_clear.setFont(new Font("宋体", Font.PLAIN, 14));         jbt_clear.setBounds(158, 187, 135, 37);         jbt_clear.addActionListener(this);         getContentPane().add(jbt_clear);           jbt_exit = new JButton("\u9000\u51FA\u804A\u5929\u5BA4");         jbt_exit.setFont(new Font("宋体", Font.PLAIN, 14));         jbt_exit.setBounds(20, 189, 128, 37);         jbt_exit.addActionListener(this);         getContentPane().add(jbt_exit);           scrollPane_1 = new JScrollPane();         scrollPane_1.setBorder(BorderFactory.createTitledBorder("在线用户"));         scrollPane_1.setBounds(303, 10, 128, 214);         getContentPane().add(scrollPane_1);           jlt_disUsers = new JList();         jlt_disUsers.setVisibleRowCount(4);         jlt_disUsers.setSelectedIndex(0);         jlt_disUsers                 .setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);         jlt_disUsers.addListSelectionListener(this);         scrollPane_1.setViewportView(jlt_disUsers);           jbt_singlChat = new JButton("\u5355\u4EBA\u804A\u5929");         jbt_singlChat.setBounds(315, 241, 116, 32);         jbt_singlChat.addActionListener(this);         getContentPane().add(jbt_singlChat);     }       /**      *      */     private static final long serialVersionUID = 1L;     private JTextField jtf_inputMess;     private JTextArea jta_disMess;     private JButton jbt_trans;     private JButton jbt_clear;     private JButton jbt_exit;     private JList jlt_disUsers;     private JButton jbt_singlChat;     private JScrollPane scrollPane_1;     private Client client;       @Override     public void actionPerformed(ActionEvent e) {         if (e.getSource() == jbt_clear) {             jta_disMess.setText("");         }         if (e.getSource() == jbt_trans) {             String mess = jtf_inputMess.getText();             mess.trim();             jtf_inputMess.setText("");             if (mess.equals("")) {                 JOptionPane.showMessageDialog(this, "不能发送空消息");                 jtf_inputMess.setText("");             } else {                 client.transMess(mess);             }         }         if (e.getSource() == jbt_exit) {             if (JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog(this,                     "是否确定要退出聊天室?", "提示", JOptionPane.OK_CANCEL_OPTION)) {                 this.setVisible(false);                 client.exitChat();                 System.exit(0);             }         }         if (e.getSource() == jbt_singlChat) {             String user_names = (String) jlt_disUsers.getSelectedValue();             if (user_names == null) {                 JOptionPane.showMessageDialog(this, "您未选择聊天对象\n请选择要单独聊天的对象");             } else {                 if (!client.c_singleFrames.containsKey(user_names)) {                     createSingleChatFrame(user_names);                 } else {                     client.c_singleFrames.get(user_names)                             .setFocusableWindowState(true);                 }             }         }     }       @Override     public void keyPressed(KeyEvent arg0) {         if (arg0.getKeyCode() == KeyEvent.VK_ENTER) {             if (arg0.getSource() == jtf_inputMess) {                 jbt_trans.doClick();             }         }     }       @Override     public void keyReleased(KeyEvent arg0) {     }       @Override     public void keyTyped(KeyEvent arg0) {     }       public void setDisMess(String substring) {         int local = substring.indexOf("@chat");         jta_disMess.append(substring.substring(0, local) + "\n");         jta_disMess.setCaretPosition(jta_disMess.getText().length());     }       public void setDisUsers(String chat_re) {         String[] infos = chat_re.split("@userlist");         String[] info = new String[infos.length / 2];         for (int i = 1; i  rec = new ArrayList();                 int i = 0;                 for (; i  online = new ArrayList();                 for (int i = 0; i 

单人聊天界面

package Client;   import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date;   import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException;   public class Client_singleFrame extends JFrame implements ActionListener, KeyListener {       /**      *      */     private static final long serialVersionUID = 1L;     private static JTextArea jta_disMess;     private JTextField jtf_inputMess;     private JButton jbt_trans;       public int userThreadID = 0;       private Client client;       public Client_singleFrame(Client client, String title) {         this.client = client;         init(title);     }       private void init(String title) {         try {             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());         } catch (ClassNotFoundException e1) {             e1.printStackTrace();         } catch (InstantiationException e1) {             e1.printStackTrace();         } catch (IllegalAccessException e1) {             e1.printStackTrace();         } catch (UnsupportedLookAndFeelException e1) {             e1.printStackTrace();         }         setIconImage(Toolkit.getDefaultToolkit().getImage("Images/socket.jpg-600"));         WinCenter.center(this);         setTitle(title);         setSize(400, 400);         setResizable(false);         setContentPane(createContentPanel());         addWindowListener(new WindowAdapter() {             @Override             public void windowClosing(WindowEvent e) {                 closeSingleFrame();             }         });     }       private Container createContentPanel() {         JPanel jp = new JPanel();         jp.setBorder(BorderFactory.createTitledBorder("聊天消息"));         jp.setLayout(new BorderLayout());         jta_disMess = new JTextArea();         jta_disMess.setEditable(false);         jp.add(BorderLayout.CENTER, new JScrollPane(jta_disMess));         jp.add(BorderLayout.SOUTH, createInput());         return jp;     }       private Component createInput() {         JPanel jp = new JPanel();         jp.setBorder(BorderFactory.createTitledBorder("发送消息"));         jp.setLayout(new BorderLayout());         jtf_inputMess = new JTextField();         jtf_inputMess.addKeyListener(this);         jbt_trans = new JButton("发送");         jbt_trans.addActionListener(this);         jp.add(jtf_inputMess, BorderLayout.CENTER);         jp.add(jbt_trans, BorderLayout.EAST);         return jp;     }       @Override     public void keyPressed(KeyEvent arg0) {         if (arg0.getKeyCode() == KeyEvent.VK_ENTER) {             if (arg0.getSource() == jtf_inputMess) {                 jbt_trans.doClick();             }         }     }       @Override     public void keyReleased(KeyEvent arg0) {     }       @Override     public void keyTyped(KeyEvent arg0) {     }       @Override     public void actionPerformed(ActionEvent e) {         if (e.getSource() == jbt_trans) {             String str = jtf_inputMess.getText();             str.trim();             jtf_inputMess.setText("");             if (str.equals("")) {                 JOptionPane.showMessageDialog(this, "信息不能为空");             } else {                 SimpleDateFormat form = new SimpleDateFormat("yyyy-MM-dd  HH:mm");                 String date = form.format(new Date());                 String mess = client.username + "  " + date + "\n" + str;                 jta_disMess.append(mess + "\n");                 jta_disMess.setCaretPosition(jta_disMess.getText().length());                 int index = client.username_online.indexOf(this.getTitle());                 String info = client.username + "@single" + client.getThreadID() + "@single" +                         (int) client.clientuserid.get(index) + "@single" +                         mess + "@single";                 try {                     client.dos.writeUTF(info);                 } catch (IOException e1) {                     e1.printStackTrace();                 }             }         }     }       public void setDisMess(String chat_re) {         jta_disMess.append(chat_re + "\n");         jta_disMess.setCaretPosition(jta_disMess.getText().length());     }       public void closeSingleFrame() {         client.c_singleFrames.remove(this.getTitle());         setVisible(false);     }       public void setExitNotify() {         jta_disMess.append(this.getTitle() + "已下线.....");         jbt_trans.setEnabled(false);     } }

设置窗体居中

package Client;   import java.awt.Dimension; import java.awt.Toolkit; import java.awt.Window;   public class WinCenter {     public static void center(Window win) {         Toolkit tkit = Toolkit.getDefaultToolkit();         Dimension sSize = tkit.getScreenSize();         Dimension wSize = win.getSize();         if (wSize.height > sSize.height) {             wSize.height = sSize.height;         }         if (wSize.width > sSize.width) {             wSize.width = sSize.width;         }         win.setLocation((sSize.width - wSize.width) / 2, (sSize.height - wSize.height) / 2);     } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持0133技术站。

以上就是Java实现聊天室界面的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java