时下,聊天系统有很多,QQ已达到了登峰造极的程度,小弟并没有吃饱了撑的去挑战腾讯,只是想从一个项目中锻炼一下,各个方法的用法,和一个程序员应该有的设计思维。并且不断完善去改进次系统,并完善我们程序员的思维和代码的熟练度。希望有兴趣的马友们多提宝贵意见,意见可以有很多种,例如“增加其他的功能,用更简便的方法去实现已完成的功能”小弟感激不尽。
好了,话不多说,见代码
1.ChatClientMain类 //客户端开启类[code=java]package util;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class ChatClientMain {
public ChatClientMain(){
new ClientInterface();
}
public ChatClientMain(String name,String password){
new ClientInterface(name,password);
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
new ChatClientMain();
}
});
}
}[/code]2.ClientInterface类[code=java]package util;
import java.awt.Color;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.Reader;
import java.io.Writer;
import java.net.Socket;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.*;
public class ClientInterface extends JFrame{
private String userName="";
private JDialog login;
private JPanel login_pane;
private JLabel msg_label;
private JLabel reg;
private JDialog register;
private JPanel reg_pane;
private JLabel title;
private JLabel name;
private TextField name_value;
private JLabel name_msg;
private JLabel password;
private JPasswordField password_value;
private JLabel password_msg;
private JLabel password1;
private JPasswordField password_value1;
private JPasswordField password_value2;
private JLabel password_msg1;
private JLabel secondName;
private TextField secondName_value;
private JLabel secondName_msg;
private ButtonGroup bg;
private JRadioButton onLine;
private JRadioButton hide;
private JButton submit;
private JButton reset;
private JButton exit;
private Color c;
private Socket socket;
private DataOutputStream dos;
private DataInputStream dis;
private String reloginName="";
private String reloginPassword="";
private String state;
public ClientInterface(String name,String password){
reloginName = name;
reloginPassword = password;
new ClientInterface();
}
public ClientInterface(){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
}
});
try {
login = new JDialog(this,true);
login.setTitle("登录");
login.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent arg0) {
System.exit(0);
}
});
login.setLayout(null);
login.setBounds(350,200,300,200);
login_pane = new JPanel();
login_pane.setBounds(0,0,300,200);
login_pane.setLayout(null);
login.add(login_pane);
msg_label = new JLabel();
msg_label.setBounds(50,5,200,20);
msg_label.setForeground(Color.red);
login_pane.add(msg_label);
name = new JLabel("用户名:");
name.setBounds(30,30,50,20);
login_pane.add(name);
name_value = new TextField();
name_value.setBounds(80,30,130,20);
login_pane.add(name_value);
name_value.setText(reloginName);
reg = new JLabel("注册帐号");
reg.setBounds(225,30,55,20);
reg.setForeground(Color.gray);
reg.addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e) {
reg.setForeground(Color.red);
}
public void mouseExited(MouseEvent arg0) {
reg.setForeground(Color.gray);
}
public void mouseClicked(MouseEvent e) {
register = new JDialog(login);
register.setLayout(null);
register.setBounds(260,200,500,250);
reg_pane = new JPanel();
reg_pane.setLayout(null);
reg_pane.setBounds(0,0,500,250);
register.add(reg_pane);
title = new JLabel("用户注册");
title.setBounds(220,5,80,20);
reg_pane.add(title);
name = new JLabel("用户名:");
name.setBounds(25,40,50,20);
reg_pane.add(name);
name_value = new TextField();
name_value.setBounds(75,40,120,20);
name_value.addFocusListener(new FocusAdapter(){
public void focusLost(FocusEvent e) {
String getStr = name_value.getText();
if(getStr==null||getStr.equals("")||!Character.isLetter(getStr.charAt(0))||getStr.length()<6||getStr.length()>16){
name_msg.setForeground(Color.red);
return;
}
char chs[] = getStr.toCharArray();
for(int i = 0 ; i<chs.length;i++){
if(!(Character.isLetter(chs)||Character.isDigit(chs))){
name_msg.setForeground(Color.red);
return;
}
}
name_msg.setForeground(c);
}
});
name_value.addTextListener(new TextListener(){
public void textValueChanged(TextEvent arg0) {
if(!name_value.getText().equals("")){
if(!Character.isLetter(name_value.getText().charAt(0))||name_value.getText().length()<6||name_value.getText().length()>16){
name_msg.setForeground(Color.red);
return;
}
}
name_msg.setForeground(c);
}
});
reg_pane.add(name_value);
name_msg = new JLabel("*必须为英文和数字,且英文开头,长度在6-16之间");
name_msg.setBounds(200,40,270,20);
c = name_msg.getForeground();
reg_pane.add(name_msg);
password = new JLabel("密 码:");
password.setBounds(25,75,50,20);
reg_pane.add(password);
password_value = new JPasswordField();
password_value.setBounds(75,75,120,20);
password_value.addFocusListener(new FocusAdapter(){
public void focusLost(FocusEvent e) {
char chs[] = password_value.getPassword();
if(chs.length<6||chs.length>16){
password_msg.setForeground(Color.red);
return;
}
password_msg.setForeground(c);
}
});
reg_pane.add(password_value);
password_msg = new JLabel("*长度在6-16之间");
password_msg.setBounds(200,75,270,20);
reg_pane.add(password_msg);
password1 = new JLabel("密码确认:");
password1.setBounds(10,110,65,20);
reg_pane.add(password1);
password_value1 = new JPasswordField();
password_value1.setBounds(75,110,120,20);
password_value1.addFocusListener(new FocusAdapter(){
public void focusLost(FocusEvent e) {
if(!String.valueOf(password_value1.getPassword()).equals(String.valueOf(password_value.getPassword()))){
password_msg1.setForeground(Color.red);
return;
}
password_msg1.setForeground(c);
}
});
reg_pane.add(password_value1);
password_msg1 = new JLabel("*重新输入密码,以确认密码");
password_msg1.setBounds(200,110,270,20);
reg_pane.add(password_msg1);
secondName = new JLabel("呢 称:");
secondName.setBounds(25,145,50,20);
reg_pane.add(secondName);
secondName_value = new TextField();
secondName_value.setBounds(75,145,120,20);
secondName_value.addFocusListener(new FocusAdapter(){
public void focusLost(FocusEvent e) {
if(secondName_value.getText()==null ||secondName_value.equals("") ||secondName_value.getText().length()>13){
secondName_msg.setForeground(Color.red);
return;
}
secondName_msg.setForeground(c);
}
});
secondName_value.addTextListener(new TextListener(){
public void textValueChanged(TextEvent e) {
if(secondName_value.getText().length()<13){
secondName_msg.setForeground(c);
}else{
secondName_msg.setForeground(Color.red);
}
}
});
//未完,见(二)[/code] |