广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现聊天室界面
  • 837
分享到

Java实现聊天室界面

2024-04-02 19:04:59 837人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本文实例为大家分享了Java实现聊天室界面的具体代码,供大家参考,具体内容如下 服务器端: package Server;   import java.awt.Toolkit; im

本文实例为大家分享了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<String> online_usernames;
    public List<Integer> online_usernameids;
 
    public ServerFrame(Server server) {
        this.server = server;
        online_usernames = new ArrayList<String>();
        online_usernameids = new ArrayList<Integer>();
        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"));
        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 < dis.length; i++) {
                    disUsernames[j++] = dis[i++];
                }
                jlt_disUsers.removeAll();
                jlt_disUsers.setListData(disUsernames);
            }
            if (userNames.contains("@exit")) {
                String[] dis = {};
                jlt_disUsers.setListData(dis);
            }
        }
    }
 
    public void setDisMess(String message) {
        if (message.contains("@chat")) {
            int local = message.indexOf("@chat");
            jta_disMess.append(message.substring(0, local) + "\n");
            jta_disMess.setCaretPosition(jta_disMess.getText().length());
        }
        if (message.contains("@exit")) {
            jta_disMess.setText("");
        }
    }
 
    public void setStartAndStopUnable() {
        JOptionPane.showMessageDialog(this, "不能同时开启两个服务器");
        jbt_start.setEnabled(false);
        jbt_stop.setEnabled(false);
    }
}

设置窗口居中代码:

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"));
        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"));
        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 < infos.length; i++) {
            int id_user = 0;
            try {
                id_user = Integer.parseInt(infos[i]);
                if (client.getThreadID() == id_user) {
                    if (!client.username.equals(infos[i - 1])) {
                        JOptionPane.showMessageDialog(this,
                                "由于有同名的用户登录,所以您的用户名后面加上了编号");
                        client.username = infos[i - 1];
                        this.setTitle("聊天室    " + client.username);
                        break;
                    } else {
                        break;
                    }
                } else {
                    i++;
                }
            } catch (Exception e) {
            }
        }
        if (infos.length == 2) {
            String[] s = new String[]{};
            if (!client.c_singleFrames.isEmpty()) {
                ListModel list = jlt_disUsers.getModel();
                for (int i = 0; i < list.getSize(); i++) {
                    if (client.c_singleFrames.get(list.getElementAt(i)) != null) {
                        client.c_singleFrames.get(list.getElementAt(i))
                                .setExitNotify();
                    }
                }
            }
            jlt_disUsers.removeAll();
            jlt_disUsers.setListData(s);
        } else {
            if ((infos.length / 2 - 1) < client.username_online.size()) {
                // 有人下线
                List<String> rec = new ArrayList<String>();
                int i = 0;
                for (; i < infos.length; i++) {
                    rec.add(0, infos[i++]);
                }
                for (i = 0; i < client.username_online.size(); i++) {
                    if (!rec.contains(client.username_online.get(i))) {
                        break;
                    }
                }
                String name = client.username_online.get(i);
                client.username_online.remove(i);
                try {
                    client.clientuserid.remove(i);
                } catch (Exception e) {
                    e.printStackTrace();
                }
 
                if (client.c_singleFrames.containsKey(name)) {
                    client.c_singleFrames.get(name).closeSingleFrame();
                    client.c_singleFrames.remove(name);
                }
            } else {
                List<Integer> online = new ArrayList<Integer>();
                for (int i = 0; i < client.username_online.size(); i++) {
                    online.add(0, client.clientuserid.get(i));
                }
                if (online.isEmpty()) {
                    for (int i = 1; i < infos.length; i++) {
                        if ((int) Integer.parseInt(infos[i]) != client
                                .getThreadID()) {
                            client.username_online.add(0, infos[i - 1]);
                            client.clientuserid.add(0,
                                    Integer.parseInt(infos[i]));
                        }
                        i++;
                    }
                } else {
                    for (int i = 1; i < infos.length; i++) {
                        if (Integer.parseInt(infos[i]) != client.getThreadID()) {
                            if (!online.contains(Integer.parseInt(infos[i]))) {
                                client.username_online.add(0, infos[i - 1]);
                                client.clientuserid.add(0,
                                        Integer.parseInt(infos[i]));
                            } else {
                                String name = client.username_online
                                        .get(client.clientuserid
                                                .indexOf(Integer
                                                        .parseInt(infos[i])));
                                if (!name.equals(infos[i - 1])) {
                                    if (client.c_singleFrames.containsKey(name)) {
                                        Client_singleFrame cf = client.c_singleFrames
                                                .get(name);
                                        cf.setTitle(name);
                                        client.c_singleFrames.remove(name);
                                        client.c_singleFrames.put(name, cf);
                                        cf.setVisible(false);
 
                                    }
                                    client.username_online.remove(name);
                                    client.clientuserid.remove(new Integer(
                                            Integer.parseInt(infos[i])));
                                    client.username_online.add(0, infos[i - 1]);
                                    client.clientuserid.add(0,
                                            Integer.parseInt(infos[i]));
                                }
                            }
                        }
                        i++;
                    }
                }
 
            }
            try {
                for (int i = 0; i < client.username_online.size(); i++) {
                    info[i] = client.username_online.get(i);
                }
 
            } catch (Exception e) {
            }
            jlt_disUsers.removeAll();
            jlt_disUsers.setListData(info);
        }
    }
 
    public void closeClient() {
        JOptionPane.showMessageDialog(this, "服务器已关闭", "提示",
                JOptionPane.OK_OPTION);
        client.exitClient();
        setVisible(false);
    }
 
    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (e.getSource() == jlt_disUsers) {
        }
    }
 
    public void createSingleChatFrame(String name) {
        Client_singleFrame c_singlFrame = new Client_singleFrame(client, name);
        client.c_singleFrames.put(name, c_singlFrame);
        try {
            c_singlFrame.userThreadID = client.clientuserid
                    .get(client.username_online.indexOf(name));
        } catch (Exception e) {
        }
 
        c_singlFrame.setVisible(true);
    }
 
    public void setSingleFrame(String chat_re) {
        String[] infos = chat_re.split("@single");
        try {
            if (client.c_singleFrames.containsKey(infos[0])) {
                client.c_singleFrames.get(infos[0]).setDisMess(infos[3]);
            } else {
                createSingleChatFrame(infos[0]);
                client.c_singleFrames.get(infos[0]).setDisMess(infos[3]);
            }
        } catch (Exception e) {
        }
    }
}

单人聊天界面

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"));
        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);
    }
}

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

--结束END--

本文标题: Java实现聊天室界面

本文链接: https://www.lsjlt.com/news/149242.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实现聊天室界面
    本文实例为大家分享了Java实现聊天室界面的具体代码,供大家参考,具体内容如下 服务器端: package Server;   import java.awt.Toolkit; im...
    99+
    2022-11-13
  • Java如何实现聊天室界面
    这篇“Java如何实现聊天室界面”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何实现聊天室界面”文章吧。服务器端:...
    99+
    2023-06-30
  • Java实现多人聊天室(含界面)
    本文实例为大家分享了Java实现多人聊天室的具体代码,供大家参考,具体内容如下 先说,记录本人的学习过程,当笔记了 多人聊天室分为 1.服务器 ①.while循环 (guanbo) ...
    99+
    2022-11-13
  • Java聊天室之实现聊天室服务端功能
    目录一、题目描述二、解题思路三、代码详解多学一个知识点一、题目描述 题目实现:实现聊天室服务器端功能。运行程序,服务端等待客户端连接,并显示客户端的连接信息。 二、解题思路 创建一个...
    99+
    2022-11-13
    Java实现聊天室 Java 聊天室 Java 服务端
  • Java聊天室之实现聊天室客户端功能
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:实现聊天室客户端。运行程序,用户登录服务器后,可以从用户列表中选择单个用户进行聊天,也可以选择多个用户进行聊天。 二、...
    99+
    2022-11-13
    Java实现聊天室 Java 聊天室 Java 客户端
  • Vue实现聊天界面
    本文实例为大家分享了Vue实现聊天界面展示的具体代码,供大家参考,具体内容如下 1.功能需求 根据索引选择跟不同的人进行聊天 2.代码展示 mock.js: import M...
    99+
    2022-11-12
  • Java Socket实现简易聊天室
    Java-Socket编程实现简易聊天室(TCP),供大家参考,具体内容如下 实现一个服务器接收多个客户端 测试: 首先启动服务器,然后启动三个客户端,输入三个不同的用户名,分别在聊...
    99+
    2022-11-11
  • Java Socket模拟实现聊天室
    使用Java Socket模拟实现了一个聊天室,实现了基本的私聊以及群聊。分为服务器端和客户端,下面我来介绍一下实现的步骤。 服务器端 服务器端是聊天室的核心所在,主要用来处理客户端...
    99+
    2022-11-12
  • Java实现单线程聊天室
    本文实例为大家分享了Java实现单线程聊天室的具体代码,供大家参考,具体内容如下 一. Socket API简介 1. Socket编程 Java.net.Socket类代表一个套接...
    99+
    2022-11-13
  • Java实现多线程聊天室
    本文实例为大家分享了Java实现多线程聊天室的具体代码,供大家参考,具体内容如下 之前呢已经用单线程的方式来实现了聊天室,但其实它的功能并不齐全,下面用多线程来实现,功能会比单线程聊...
    99+
    2022-11-12
  • Java Socket实现聊天室功能
    本文实例为大家分享了Java Socket实现聊天室的具体代码,供大家参考,具体内容如下 1 创建登录判断类UserLogin import java.util.HashSet; i...
    99+
    2022-11-13
  • Java怎么实现NIO聊天室
    这篇文章给大家分享的是有关Java怎么实现NIO聊天室的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。功能介绍功能:群聊+私发+上线提醒+下线提醒+查询在线用户文件Utils需要用maven导入下面两个包 ...
    99+
    2023-06-15
  • Java NIO实现聊天室功能
    本文实例为大家分享了Java NIO实现聊天室功能的具体代码,供大家参考,具体内容如下 代码里面已经包含了必要的注释,这里不详述了。实现了基本的聊天室功能。 常量类: publi...
    99+
    2022-11-12
  • Java NIO实现多人聊天室
    本文实例为大家分享了Java NIO实现多人聊天室的具体代码,供大家参考,具体内容如下 1. 服务器端代码 ChatServer类: package nio.test.serve...
    99+
    2022-11-12
  • Java编写实现多人聊天室
    本文实例为大家分享了Java实现多人聊天室的具体代码,供大家参考,具体内容如下 1.客户端 package tk.javazhangwei.net.tcp.chat.Demo03; ...
    99+
    2022-11-13
  • java实现多人聊天对话室
    使用ServerSocket和Socket实现服务器端和客户端的Socket通信。 了解完socket通信步骤后可以发现本实验需要写两个类:Server和Client,并且要先运行...
    99+
    2022-11-12
  • python socket实现聊天室
    本文实例为大家分享了python socket实现聊天室的具体代码,供大家参考,具体内容如下 server端 import socket import json,struct from concurrent.fu...
    99+
    2022-06-02
    python socket 聊天室
  • Python实现web聊天室
    使用Python模块中的select模块实现web聊天室功能select模块Python中的select模块专注于I/O多路复用,提供了select  poll  epoll三个方法(其中后两个在Linux中可用,windows仅支持sel...
    99+
    2023-01-31
    聊天室 Python web
  • Python聊天室带界面实现的示例代码(tkinter,Mysql,Treading,socket)
    一、前言 我用的是面向对象写的,把界面功能模块封装成类,然后在客户端创建对象然后进行调用。好处就是方便我们维护代码以及把相应的信息封装起来,每一个实例都是各不相同的。 所有的界面按钮...
    99+
    2022-11-12
  • Java实现局域网聊天室功能(私聊、群聊)
    本文实例为大家分享了Java实现局域网聊天室功能的具体代码,供大家参考,具体内容如下 Server 服务端 import java.io.IOException; import ja...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作