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());
                }
            });
        }
    }
  • 相关阅读:
    【Leetcode】【Medium】Group Anagrams
    【Leetcode】【Hard】Merge k Sorted Lists
    面向.Net程序员的Sql版本管理
    分享改进 完全定制自己的代码生成器
    面向.Net程序员的后端性能优化实战
    一个winform带你玩转rabbitMQ
    vs多项目模板及add-in开发
    面向.Net程序员的前端优化
    面向.Net程序员的dump分析
    【网络安全】(一) 0成本添加访问级监控
  • 原文地址:https://www.cnblogs.com/qingyundian/p/8088079.html
Copyright © 2011-2022 走看看