📄 loginform.java
字号:
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 + -