1. 程式人生 > >java在線聊天項目1.3版設計好友列表框功能補充,因只要用戶登錄就發送一串新列表,導致不同客戶端好友列表不同問題

java在線聊天項目1.3版設計好友列表框功能補充,因只要用戶登錄就發送一串新列表,導致不同客戶端好友列表不同問題

img trigge trace nim button lease local def 登錄用戶

解決完畢後效果圖:

技術分享圖片

好友列表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()); } }); } }

java在線聊天項目1.3版設計好友列表框功能補充,因只要用戶登錄就發送一串新列表,導致不同客戶端好友列表不同問題