zoukankan      html  css  js  c++  java
  • java在线聊天项目1.3版设计好友列表框功能补充,因只要用户登录就发送一串新列表,导致不同客户端好友列表不同问题

    解决完毕后效果图:

    好友列表Vector添加的时候进行判断,如果有相同的则不添加

    int flag=0;
    for (int i = 0; i < names.size(); i++) {
    if (name.equals(names.get(i))) {
    flag=1;
    }
    }
    if(flag==0) {
    names.add(name);
    }

    好友列表窗代码如下:

    package com.swift.frame;
    
    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    import java.net.SocketException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Vector;
    
    import javax.swing.DefaultListModel;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.JTabbedPane;
    import javax.swing.SwingConstants;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class FriendsFrame extends JFrame {
    
        private static final long serialVersionUID = 1L;
        private Socket s;
        private DataOutputStream dos;
        private DataInputStream dis;
        private boolean connected = false;
        Vector<String> names = new Vector<String>();
        JList<String> list = null;
    
        public FriendsFrame(String name, Socket socket) {
            super("欢迎 " + ":" + socket.getLocalPort());
            this.s = socket;
            connected = true;
            names.add("登录用户");
            try {
                this.dos = new DataOutputStream(s.getOutputStream());
                this.dis = new DataInputStream(s.getInputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }
            JFrame.setDefaultLookAndFeelDecorated(true);
            JDialog.setDefaultLookAndFeelDecorated(true);
    
            try {
                UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
            } catch (ClassNotFoundException e1) {
                e1.printStackTrace();
            } catch (InstantiationException e1) {
                e1.printStackTrace();
            } catch (IllegalAccessException e1) {
                e1.printStackTrace();
            } catch (UnsupportedLookAndFeelException e1) {
                e1.printStackTrace();
            }
    
            setBounds(100, 100, 247, 581);
            setVisible(true);
            final JPanel panel = new JPanel();
            panel.setLayout(new BorderLayout());
            getContentPane().add(panel, BorderLayout.NORTH);
    
            final JLabel label = new JLabel(new ImageIcon("Images/logo.jpg"));
            label.setText("New JLabel");
            panel.add(label, BorderLayout.WEST);
            label.setPreferredSize(new Dimension(74, 74));
    
            final JPanel panel_1 = new JPanel();
            panel_1.setLayout(new BorderLayout());
            panel.add(panel_1, BorderLayout.CENTER);
    
            final JLabel advancingSwiftLabel = new JLabel();
            advancingSwiftLabel.setText(name);
            panel_1.add(advancingSwiftLabel, BorderLayout.CENTER);
    
            final JLabel neverWasterLabel = new JLabel();
            neverWasterLabel.setText("Never waste time any more");
            panel_1.add(neverWasterLabel, BorderLayout.SOUTH);
    
            final JPanel panel_2 = new JPanel();
            panel_2.setLayout(new BorderLayout());
            getContentPane().add(panel_2, BorderLayout.SOUTH);
    
            final JPanel panel_3 = new JPanel();
            final FlowLayout flowLayout = new FlowLayout();
            flowLayout.setAlignment(FlowLayout.LEFT);
            panel_3.setLayout(flowLayout);
            panel_2.add(panel_3);
    
            final JButton button = new JButton();
            panel_3.add(button);
            button.setHorizontalTextPosition(SwingConstants.LEFT);
            button.setHorizontalAlignment(SwingConstants.LEFT);
            button.setText("设置");
    
            final JButton button_1 = new JButton();
            panel_3.add(button_1);
            button_1.setText("查找");
    
            final JPanel panel_4 = new JPanel();
            panel_2.add(panel_4, BorderLayout.EAST);
    
            final JButton button_2 = new JButton();
            panel_4.add(button_2);
            button_2.setText("退出");
    
            final JTabbedPane tabbedPane = new JTabbedPane();
            getContentPane().add(tabbedPane, BorderLayout.CENTER);
    
            final JPanel panel_5 = new JPanel();
            tabbedPane.addTab("好友列表", null, panel_5, null);
            list = new JList<String>();
    
            panel_5.add(list);
    
            final JPanel panel_6 = new JPanel();
            tabbedPane.addTab("群聊", null, panel_6, null);
    
            final JPanel panel_7 = new JPanel();
            tabbedPane.addTab("聊天记录", null, panel_7, null);
    
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    
            final JMenuBar menuBar = new JMenuBar();
            setJMenuBar(menuBar);
    
            final JMenu menu = new JMenu();
            menu.setText("操作");
            menuBar.add(menu);
    
            final JMenuItem newItemMenuItem = new JMenuItem();
            newItemMenuItem.setText("设置");
            menu.add(newItemMenuItem);
    
            final JMenuItem newItemMenuItem_1 = new JMenuItem();
            newItemMenuItem_1.setText("空间");
            menu.add(newItemMenuItem_1);
    
            final JMenuItem newItemMenuItem_2 = new JMenuItem();
            newItemMenuItem_2.setText("邮箱");
            menu.add(newItemMenuItem_2);
    
            final JMenu menu_1 = new JMenu();
            menu_1.setText("会员");
            menu.add(menu_1);
    
            final JMenuItem newItemMenuItem_3 = new JMenuItem();
            newItemMenuItem_3.setText("会员官网");
            menu_1.add(newItemMenuItem_3);
    
            final JMenuItem newItemMenuItem_4 = new JMenuItem();
            newItemMenuItem_4.setText("会员专区");
            menu_1.add(newItemMenuItem_4);
    
            menu.addSeparator();
    
            final JMenu menu_2 = new JMenu();
            menu_2.setText("安全");
            menu.add(menu_2);
    
            final JMenuItem newItemMenuItem_5 = new JMenuItem();
            newItemMenuItem_5.setText("紧急冻结");
            menu_2.add(newItemMenuItem_5);
    
            final JMenuItem newItemMenuItem_6 = new JMenuItem();
            newItemMenuItem_6.setText("密码保护");
            menu_2.add(newItemMenuItem_6);
    
            final JMenuItem newItemMenuItem_7 = new JMenuItem();
            newItemMenuItem_7.setText("退出");
            menu.add(newItemMenuItem_7);
            final FlowLayout flowLayout_1 = new FlowLayout();
            flowLayout_1.setAlignment(FlowLayout.RIGHT);
    
            this.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    disconnect();
                    System.exit(0);
                }
            });
    
            // 调用傻傻的等待接收列表信息
            new Thread(new WaitingReceive()).start();
            // 双击激活聊天对话框
            list.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    if (e.getClickCount() == 2) {
                        new ChatFrame(s);
                    }
                }
            });
    
        }
    
        public void disconnect() {
            try {
                if (dos != null)
                    dos.close();
                if (dis != null)
                    dis.close();
                if (s != null)
                    s.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        class WaitingReceive implements Runnable {
    
            @Override
            public void run() {
                try {
                    while (connected) {
                        String name = dis.readUTF();
                        System.out.println(name);
                        int flag=0;
                        for (int i = 0; i < names.size(); i++) {
                            if (name.equals(names.get(i))) {
                                flag=1;
                            }
                        }
                        if(flag==0) {
                            names.add(name);
                        }
                        list.setListData(names);
                    }
                } catch (SocketException e) {
                    System.out.println("a client has been closed!");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * WindowBuilder generated method.<br>
         * Please don't remove this method or its invocations.<br>
         * It used by WindowBuilder to associate the {@link javax.swing.JPopupMenu} with
         * parent.
         */
        private static void addPopup(Component component, final JPopupMenu popup) {
            component.addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    if (e.isPopupTrigger())
                        showMenu(e);
                }
    
                public void mouseReleased(MouseEvent e) {
                    if (e.isPopupTrigger())
                        showMenu(e);
                }
    
                private void showMenu(MouseEvent e) {
                    popup.show(e.getComponent(), e.getX(), e.getY());
                }
            });
        }
    }
  • 相关阅读:
    linux 解压tgz 文件指令
    shell 脚本没有执行权限 报错 bash: ./myshell.sh: Permission denied
    linux 启动solr 报错 Your Max Processes Limit is currently 31202. It should be set to 65000 to avoid operational disruption.
    远程查询批量导入数据
    修改 MZTreeView 赋权节点父节点选中子节点自动选中的问题
    关于乱码的问题解决记录
    我的网站优化之路
    对设计及重构的一点反思
    我的五年岁月
    奔三的路上
  • 原文地址:https://www.cnblogs.com/qingyundian/p/8088079.html
Copyright © 2011-2022 走看看