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

📄 loginform.java

📁 一个仿qq的程序源码 一个用纯java开发的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				if(keyboard.isVisible()) {
					keyboard.setVisible(false);
					setSize(300, 204);
				} else {
					keyboard.setVisible(true);
					setSize(588, 204);
				}
			}
		});
		//Shift键按下
		btShift.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				keyboard.setMode(btShift.isSelected());
			}
		});
		//找回密码
		lbFindPwd.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mouseReleased(java.awt.event.MouseEvent e) {
				FindPwdForm.getInstance(loginForm).setVisible(true);
			}
		});
		//注册
		btRegist.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				RegisterForm.getInstance(loginForm).setVisible(true);
			}
		});
		// Enter键按下
		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() {
							if (!timer.isRunning()) {
								btLoginPerformed();
							}
						}
					}).start();
					return;
				}
				if (evt.getSource() instanceof javax.swing.JTextField) {
					javax.swing.JTextField text = (javax.swing.JTextField) evt
							.getSource();
					if (text.getText().length() >= 16)
						text.setText(text.getText().substring(0, 15));
				}
			}
		};
		tbUserId.addKeyListener(keyAdapter);
		tbUserPwd.addKeyListener(keyAdapter);
		ltRooms.addKeyListener(keyAdapter);
		tbNewRoom.addKeyListener(keyAdapter);
		tbNickname.addKeyListener(keyAdapter);
		btMale.addKeyListener(keyAdapter);
		btFemale.addKeyListener(keyAdapter);
	}

	private void btLoginPerformed() {
		timer.start();
		
		String id = tbUserId.getText();
		String pwd = new String(tbUserPwd.getPassword());
		if(!id.isEmpty() || !pwd.isEmpty()) {
			userLogin(id, pwd);
			return;
		}
		
		String roomName = tbNewRoom.getText().trim();
		String nickName = tbNickname.getText().trim();
		chatRoomLogin(roomName, nickName);
	}
	
	private void userLogin(String id, String pwd) {
		if(id.isEmpty()) {
			resetProgress();
			javax.swing.JOptionPane.showMessageDialog(this, "账号不能为空!",
					"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
			return;
		} else if(pwd.isEmpty()) {
			resetProgress();
			javax.swing.JOptionPane.showMessageDialog(this, "密码不能为空!",
					"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
			return;
		}
		if(!id.matches("^[0-9]*$")) {
			resetProgress();
			javax.swing.JOptionPane.showMessageDialog(this, "账号只能为数字!",
					"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
			return;
		}
		UserMessage msg = new UserMessage(Const.CODE_USER_LOGIN, 
				new Peer(id, Tools.MD5(pwd)));
		Controller.getInstance().getUdpDispatcher().dispatchToServer(
				msg, Const.UdpIp);
		try {
			synchronized (Const.waitForLoginAck) {
				Const.waitForLoginAck.wait(2 * Const.WaitTimeOut);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		if (Controller.getInstance().getCurrentRoom() == null) {
			resetProgress();
			javax.swing.JOptionPane.showMessageDialog(this, "连接超时,登录失败!",
					"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
			return;
		}
		resetProgress();
		dispose();
	}
	
	private void chatRoomLogin(String roomName, String nickName) {
		if (nickName.isEmpty()) {
			resetProgress();
			javax.swing.JOptionPane.showMessageDialog(this, "昵称不能为空!",
					"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
			return;
		}
		if (ltRooms.getSelectedItem() == null && roomName.length() == 0) {
			resetProgress();
			javax.swing.JOptionPane.showMessageDialog(this, "请选择或创建房间!",
					"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
			return;
		}
		if(Controller.getInstance().containsRoom(roomName)) {
			resetProgress();
			javax.swing.JOptionPane.showMessageDialog(this, "房间已经存在!",
					"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
			return;
		}
		// 远程验证
		setTitle("信息核查中,请等待...");
		boolean nickAvail = true;
		nickAvail = Controller.getInstance().setNickName(nickName, getGender());
		if (!nickAvail) {
			resetProgress();
			javax.swing.JOptionPane.showMessageDialog(this, "昵称已经存在!",
					"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
			return;
		}
		
		if (!roomName.isEmpty()) {
			Controller.getInstance().setReqRoom(roomName);
			boolean roomAvail = true;
			roomAvail = Controller.getInstance().isRoomFree(roomName);
			if (roomAvail) {
				Room.createRoom(roomName);
				resetProgress();
				dispose();
			} else {
				resetProgress();
				javax.swing.JOptionPane.showMessageDialog(this, "房间已经存在!",
						"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
				return;
			}
		} else {
			String selRoom = (String) ltRooms.getSelectedItem();
			setTitle("请求进入:" + selRoom);
			try {
				Room.joinRoom(selRoom);
				synchronized (Const.waitForJoinAck) {
					Const.waitForJoinAck.wait(Const.WaitTimeOut);
				}
			} catch (Exception ex) {
				ex.printStackTrace();
			}
			if (Controller.getInstance().getCurrentRoom() == null) {
				resetProgress();
				javax.swing.JOptionPane.showMessageDialog(this, "连接超时,登录失败!",
						"提示", javax.swing.JOptionPane.INFORMATION_MESSAGE);
				return;
			}
			resetProgress();
			dispose();
		}
	}

	private void resetProgress() {
		count = 0;
		progressBar.setValue(0);
		timer.stop();
	}

	private char getGender() {
		return (btMale.isSelected() ? '男' : '女');
	}

	private void updateRoomList() {
		String[] strings = Controller.getInstance().getAvailRooms();
		ltRooms.removeAllItems();
		for (String i : strings) {
			if(i.length() < 16) ltRooms.addItem(i);
		}
	}
	
	public void dispose() {
		loginForm = null;
		super.dispose();
	}
	
	private class Keyboard extends javax.swing.JPanel {
		 static final long serialVersionUID = 1L;
		 
		javax.swing.JTextField pwdField;
		javax.swing.JButton[] btn;
		
		public Keyboard(javax.swing.JTextField pwdField) {
			this.pwdField = pwdField;
			btn = new javax.swing.JButton[36];
			for(int i = 0; i < btn.length; i++) 
				btn[i] = new javax.swing.JButton();
			setBackground(new java.awt.Color(235, 245, 255));
			setVisible(false);
		}
		
		public void setLayout(javax.swing.border.Border border, int line) {
			setMode(false);
			setLayout(null);
			for(int i = 0, j = 0; i < 36; i++) {
				j = i / line;
				btn[i].addActionListener(actionListener);
				add(btn[i]);
				btn[i].setBorder(border);
				btn[i].setBounds((i % line) * 46, j * 28 + 6, 45, 27);
			}
		}
		
		public void setMode(boolean isShift) {
			if(isShift) {
				for(int i = 0; i < 10; i++)
					btn[i].setText((char) (i + 33) + "");
				for(int i = 0; i < 26; i++)
					btn[10+i].setText((char)('A' + i) + "");
			} else {
				for(int i = 0; i < 10; i++)
					btn[i].setText(i + "");
				for(int i = 0; i < 26; i++)
					btn[10+i].setText((char)('a' + i) + "");
			}
		}
		
		java.awt.event.ActionListener actionListener = new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent evt) {
				javax.swing.JButton btn = (javax.swing.JButton) evt.getSource();
				if(pwdField.getText().length() >= 16)
					return;
				pwdField.setText(pwdField.getText() + btn.getText());
			}
		};
	}
}

⌨️ 快捷键说明

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