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

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

(0)

相关推荐

  • Java Socket聊天室编程(二)之利用socket实现单聊聊天室

    在上篇文章Java Socket聊天室编程(一)之利用socket实现聊天之消息推送中我们讲到如何使用socket让服务器和客户端之间传递消息,达到推送消息的目的,接下来我将写出如何让服务器建立客户端与客户端之间的通讯. 其实就是建立一个一对一的聊天通讯. 与上一篇实现消息推送的代码有些不同,在它上面加以修改的. 如果没有提到的方法或者类则和上一篇一模一样. 1,修改实体类(服务器端和客户端的实体类是一样的) 1,UserInfoBean 用户信息表 public class UserInfoB

  • java socket实现聊天室 java实现多人聊天功能

    用java socket做一个聊天室,实现多人聊天的功能.看了极客学院的视频后跟着敲的.(1DAY) 服务端: 1. 先写服务端的类MyServerSocket,里面放一个监听线程,一启动就好 2. 实现服务端监听类ServerListener.java,用accept来监听,一旦有客户端连上,生成新的socket,就新建个线程实例ChatSocket.启动线程后就把线程交给ChatManager管理 3. 在ChatSocket中实现从客户端读取内容,把读取到的内容发给集合内所有的客户端 4.

  • Java基于socket实现简易聊天室实例

    本文实例讲述了Java基于socket实现简易聊天室的方法.分享给大家供大家参考.具体实现方法如下: chatroomdemo.java package com.socket.demo; import java.io.IOException; import java.net.DatagramSocket; public class ChatRoomDemo { /** * @param args * @throws IOException */ public static void main(S

  • java聊天室的实现代码

    本文实例为大家分享了java实现聊天室的具体代码,供大家参考,具体内容如下 聊天室界面: 源码: public class ClientFrame extends Frame { private TextField textFieldContent = new TextField(); private TextArea textAreaContent = new TextArea(); private Socket socket = null; private OutputStream out

  • 基于java编写局域网多人聊天室

    由于需要制作网络计算机网络课程设计,并且不想搞网络布线或者局域网路由器配置等等这种完全搞不懂的东西,最后决定使用socket基于java编写一个局域网聊天室: 关于socket以及网络编程的相关知识详见我另一篇文章:Java基于socket编程 程序基于C/S结构,即客户端服务器模式. 服务器: 默认ip为本机ip 需要双方确定一个端口号 可设置最大连接人数 可启动与关闭 界面显示在线用户人以及姓名(本机不在此显示) 客户端: 需要手动设置服务器ip地址(局域网) 手动设置端口号 输入姓名 可连

  • java实现一个简单TCPSocket聊天室功能分享

    本文实例为大家分享了java实现TCPSocket聊天室功能的相关代码,供大家参考,具体内容如下 1.TCPserver.java import java.net.*; import java.io.*; import java.util.*; import java.util.concurrent.*; public class TCPserver{ private static final int SERVERPORT = 8888; private ServerSocket MyServe

  • 使用java基于pushlet和bootstrap实现的简单聊天室

    这是一个简单的不能再简单的聊天室,本代码包含以下功能 1.用户注册. 2.用户登录. 3.当然还可以聊天. DBUtil.java 复制代码 代码如下: package com.hongyuan.core;   import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statemen

  • Java基于UDP协议实现简单的聊天室程序

    最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. 先看一下效果: 实现的效果可以说是非常非常简单,但还是可以简单的看到一个实现原理.  "聊天室001"的用户,小红和小绿相互聊了两句,"聊天室002"的小黑无人理会,在一旁寂寞着. 看一下代码实现: 1.首先是消息服务器的实现,功能很简单: •将客户端的信息(进入了哪一

  • 使用Java和WebSocket实现网页聊天室实例代码

    在没介绍正文之前,先给大家介绍下websocket的背景和原理: 背景 在浏览器中通过http仅能实现单向的通信,comet可以一定程度上模拟双向通信,但效率较低,并需要服务器有较好的支持; flash中的socket和xmlsocket可以实现真正的双向通信,通过 flex ajax bridge,可以在javascript中使用这两项功能. 可以预见,如果websocket一旦在浏览器中得到实现,将会替代上面两项技术,得到广泛的使用.面对这种状况,HTML5定义了WebSocket协议,能更

  • Java Socket聊天室编程(一)之利用socket实现聊天之消息推送

    相关阅读:Java Socket聊天室编程(二)之利用socket实现单聊聊天室 网上已经有很多利用socket实现聊天的例子了,但是我看过很多,多多少有一些问题存在. 这里我将实现一个比较完整的聊天例子,并解释其中的逻辑. 由于socket这一块比较大,所以我将分出几篇来写一个比较完整的socket例子. 这里我们先来实现一个最简单的,服务器与客户端通讯,实现消息推送的功能. 目的:服务器与客户端建立连接,客户端可以向服务器发送消息,服务器可以向客户端推送消息. 1,使用java建立socke

随机推荐