⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 userroomform.java

📁 一个仿qq的程序源码 一个用纯java开发的
💻 JAVA
字号:
package qianqian.p2pchat.gui;

import qianqian.p2pchat.constant.Const;
import qianqian.p2pchat.control.*;
import qianqian.p2pchat.message.UserMessage;

public class UserRoomForm extends RoomForm {
	private static final long serialVersionUID = 1L;

	private javax.swing.JScrollPane frndListScroller;
	private javax.swing.JMenuBar menuBar;
	private javax.swing.JMenu menu;
	private javax.swing.JTextField localSearch;
	private javax.swing.JMenuItem searchFrnd;
	private javax.swing.JMenuItem deleteFrnd;
	private javax.swing.JMenuItem updateUser;
	private javax.swing.JMenuItem registUser;
	private javax.swing.JMenuItem systemQuit;
	private java.awt.Color color;
	private javax.swing.border.MatteBorder border;
	private FriendTree nickList;
	private static UserRoomForm userForm;
	private boolean hidenX = false;
	private boolean hidenY = false;
	private java.awt.Dimension screen;

	public static synchronized UserRoomForm getInstance(Peer peer) {
		if (userForm == null)
			userForm = new UserRoomForm(peer);
		return userForm;
	}

	private UserRoomForm(Peer me) {
		initComponents();
		addListener();
		updateList(me.getFriends(), true);
		setBounds((int) screen.getWidth() - 195, 0, 195, 450);
		requestFocus();
		setAlwaysOnTop(true);
		setResizable(false);
	}

	public void dispose() {
		userForm = null;
		super.dispose();
		Controller.getInstance().quit();
	}

	private void addListener() {
		// 关闭窗口
		setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
		addWindowListener(new WindowQuit());
		java.awt.event.ActionListener listener = new java.awt.event.ActionListener() {
			public void actionPerformed(final java.awt.event.ActionEvent evt) {
				if (evt.getSource() == systemQuit) {
					dispose();
					return;
				}
				new Thread(new Runnable() {
					public void run() {
						if (evt.getSource() == searchFrnd) {
							SearchForm.getInstance(UserRoomForm.this)
									.setVisible(true);
							return;
						}
						if (evt.getSource() == deleteFrnd) {
							dealDelete();
							return;
						}
						if (evt.getSource() == updateUser) {
							ModifyForm.getInstance(UserRoomForm.this)
									.setVisible(true);
							return;
						}
						if (evt.getSource() == registUser) {
							RegisterForm.getInstance(userForm).setVisible(true);
							return;
						}
						if (evt.getSource() == systemQuit) {
							dispose();
						}
					}
				}).start();
			}
		};
		searchFrnd.addActionListener(listener);
		deleteFrnd.addActionListener(listener);
		updateUser.addActionListener(listener);
		registUser.addActionListener(listener);
		systemQuit.addActionListener(listener);
		// 键盘响应
		java.awt.event.KeyAdapter keyAdapter = new java.awt.event.KeyAdapter() {
			public void keyTyped(java.awt.event.KeyEvent evt) {
				if (evt.getKeyChar() == '\n') {
					new Thread(new Runnable() {
						public void run() {
							String match = localSearch.getText();
							localSearch.setText("");
							dealSearch(match);
						}
					}).start();
					return;
				}
			}
		};
		localSearch.addKeyListener(keyAdapter);
	}

	private void initComponents() {
		screen = getToolkit().getScreenSize();
		frndListScroller = new javax.swing.JScrollPane();
		nickList = new FriendTree();
		frndListScroller = new javax.swing.JScrollPane();
		menuBar = new javax.swing.JMenuBar();
		menu = new javax.swing.JMenu("菜单");
		color = new java.awt.Color(145, 200, 255);
		border = new javax.swing.border.MatteBorder(new java.awt.Insets(2, 3,
				2, 3), color);
		localSearch = new javax.swing.JTextField();
		menuBar = new javax.swing.JMenuBar();
		menuBar.setBackground(color);
		menu = new javax.swing.JMenu("菜单");
		searchFrnd = new javax.swing.JMenuItem("查找用户");
		deleteFrnd = new javax.swing.JMenuItem("删除好友");
		updateUser = new javax.swing.JMenuItem("修改信息");
		registUser = new javax.swing.JMenuItem("注册账号");
		systemQuit = new javax.swing.JMenuItem("关闭程序");

		frndListScroller.setAutoscrolls(true);
		frndListScroller.setViewportView(nickList);
		getContentPane().add(frndListScroller, "Center");
		nickList.setBorder(border);
		localSearch.setBorder(border);

		menu.add(searchFrnd);
		menu.add(deleteFrnd);
		menu.add(updateUser);
		menu.add(registUser);
		menu.add(systemQuit);
		menuBar.add(menu);
		menuBar.add(new javax.swing.JLabel(new javax.swing.ImageIcon(
				"icons/search.gif")));
		menuBar.add(localSearch);
		setJMenuBar(menuBar);

		if (Controller.getInstance().getMe().getGender() == '男') {
			setIconImage(new javax.swing.ImageIcon("icons/QG.gif").getImage());
		} else {
			setIconImage(new javax.swing.ImageIcon("icons/QM.gif").getImage());
		}

		pack();
	}

	private void dealDelete() {
		int i = nickList.getRowForPath(nickList.getSelectionPath()) - 1;
		if (i < 0)
			return;
		Peer me = Controller.getInstance().getMe();
		Peer frnd = me.getFriends().get(i);
		int result = javax.swing.JOptionPane.showConfirmDialog(this, "确定删除好友:"
				+ frnd.toString() + "?", "提示",
				javax.swing.JOptionPane.YES_NO_OPTION);
		if (result == 0) {
			UserMessage msg = new UserMessage(Const.CODE_DELETE_FRIEND, me,
					frnd.getUserId());
			Controller.getInstance().getUdpDispatcher().dispatchToServer(msg,
					Const.UdpIp);
		}
	}

	private void dealSearch(String match) {
		SearchForm.getInstance(this).setSearchText(match);
		SearchForm.getInstance(this).setVisible(true);
	}

	public void updateList(java.util.LinkedList<Peer> iPeers, boolean arg) {
		if(iPeers != null)
			nickList.update(iPeers, arg);
	}

	public void delFriend(String id) {
		java.util.LinkedList<Peer> frnds = Controller.getInstance().getMe()
				.getFriends();
		java.util.Iterator<Peer> friends = frnds.iterator();
		while (friends.hasNext()) {
			if (friends.next().getUserId().equals(id)) {
				friends.remove();
			}
		}
		updateList(frnds, false);
	}

	public void addFriend(Peer peer) {
		java.util.LinkedList<Peer> friends = Controller.getInstance().getMe()
				.getFriends();
		friends.add(peer);
		updateList(friends, true);
	}

	public void newFrndMsg(Peer peer) {
		Object[] options = { "同\0意", "拒\0绝" };
		int rst = javax.swing.JOptionPane.showOptionDialog(this, peer
				.toString()
				+ "加你为好友!", "好友信息", javax.swing.JOptionPane.DEFAULT_OPTION,
				javax.swing.JOptionPane.INFORMATION_MESSAGE, null, options,
				options[0]);
		if (rst == 0) {
			UserMessage msg = new UserMessage(Const.CODE_ADD_FRIEND, Controller
					.getInstance().getMe(), peer.getUserId());
			Controller.getInstance().getUdpDispatcher().dispatchToServer(msg,
					Const.UdpIp);
			addFriend(peer);
		}
	}

	private class WindowQuit extends java.awt.event.WindowAdapter {
		// 隐藏到屏幕外
		public void windowDeactivated(java.awt.event.WindowEvent e) {
			int x = getLocation().x;
			int y = getLocation().y;
			if (x >= screen.getWidth() - 195) {
				setLocation((int) screen.getWidth() - 6, y);
				hidenX = true;
			} else if (y <= 0) {
				setLocation(x, 6 - 450);
				hidenY = true;
			}
		}

		// 窗口恢复显示
		public void windowActivated(java.awt.event.WindowEvent e) {
			int x = getLocation().x;
			int y = getLocation().y;
			if (hidenX) {
				setLocation(x - 195 + 6, y);
				hidenX = false;
			} else if (hidenY) {
				setLocation(x, y + 450 - 6);
				hidenY = false;
			}
		}

		// 关闭程序
		public void windowClosing(java.awt.event.WindowEvent e) {
			dispose();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -