📄 myclient.java
字号:
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.Vector;
import java.util.Date;
class UserData implements Serializable
{
String id;
String pwd;
String name;
String sex;
String age;
String phone;
String mail;
public UserData(String id,String pwd,String name,String sex,String age,String phone,String mail)
{
this.id = id;
this.pwd = pwd;
this.name = name;
this.sex = sex;
this.age = age;
this.phone = phone;
this.mail = mail;
}
}
public class MyClient implements ActionListener,Runnable
{
Socket socket;
ObjectOutputStream oos;
ObjectInputStream ois;
Font ft = new Font("宋体",0,15);
Color red = Color.red;
EnrolFrm ef;
SettingFrm sf;
//*******************************************************************登陆窗口
JFrame frm;
JPanel pLogin;
GridLayout gdl;
JButton btnLogin,btnEnrol;
JLabel lblId,lblPWD,lblNetAddress,lblNetPort;
JTextField txtId;
JPasswordField txtPWD;
JComboBox cmbNetAddress,cmbNetPort;
public MyClient()
{
frm = new JFrame("登陆聊天室");
pLogin = new JPanel();
gdl = new GridLayout(5,2,2,2);
pLogin.setLayout(gdl);
btnLogin = new JButton("登录");
btnLogin.setFont(ft);
btnEnrol = new JButton("注册");
btnEnrol.setFont(ft);
lblId = new JLabel("登录帐号");
lblId.setFont(ft);
lblPWD = new JLabel("密码");
lblPWD.setFont(ft);
lblNetAddress = new JLabel("服务器地址");
lblNetAddress.setFont(ft);
lblNetPort = new JLabel("端口");
lblNetPort.setFont(ft);
txtId = new JTextField(10);
txtId.setFont(ft);
txtId.setText("mark");
txtPWD = new JPasswordField(10);
txtPWD.setFont(ft);
txtPWD.setText("123");
cmbNetAddress = new JComboBox();
cmbNetAddress.addItem(new String("192.168.1.100"));
cmbNetAddress.setFont(ft);
cmbNetAddress.setEditable(true);
cmbNetPort = new JComboBox();
cmbNetPort.setFont(ft);
cmbNetPort.addItem(new String("1986"));
cmbNetPort.setEditable(true);
pLogin.add(lblNetAddress); pLogin.add(cmbNetAddress);
pLogin.add(lblNetPort); pLogin.add(cmbNetPort);
pLogin.add(lblId); pLogin.add(txtId);
pLogin.add(lblPWD); pLogin.add(txtPWD);
pLogin.add(btnLogin); pLogin.add(btnEnrol);
btnLogin.addActionListener(this);
btnEnrol.addActionListener(this);
frm.getContentPane().add(pLogin);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setSize(300,200);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frm.getSize();
frm.setLocation((screenSize.width - frameSize.width)/2,(screenSize.height - frameSize.height)/2);
frm.setResizable(false);
frm.setVisible(true);
}
public void actionPerformed(ActionEvent ae)
{
try
{
JButton jb = (JButton)ae.getSource();
if(jb.equals(btnLogin))
{
if(socket == null)
{
String netAdd = (String)cmbNetAddress.getSelectedItem();
int port = Integer.parseInt((String)cmbNetPort.getSelectedItem());
socket = new Socket(netAdd,port);
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
Thread gm = new Thread(this);
gm.start();
}
String id = txtId.getText();
String pwd = new String(txtPWD.getPassword());
while(true)
{
if(id.equals("")||pwd.equals(""))
{
JOptionPane.showMessageDialog(frm,"帐号或密码不能未空,请重新输入!");
break;
}
else
{
oos.writeObject(new String("Login"));
oos.writeObject(id);
oos.writeObject(pwd);
break;
}
}
}
else if(jb.equals(btnEnrol))
{
if(socket == null)
{
String netAdd = (String)cmbNetAddress.getSelectedItem();
int port = Integer.parseInt((String)cmbNetPort.getSelectedItem());
socket = new Socket(netAdd,port);
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
Thread gm = new Thread(this);
gm.start();
}
ef = new EnrolFrm();
}
}
catch(Exception e)
{
JOptionPane.showMessageDialog(frm,"服务器没有启动!");
System.out.println(e.toString());
}
}
//***********************************************************************End
//*******************************************************************注册窗口
class EnrolFrm implements ActionListener
{
JFrame frmEnrol;
JPanel pEnrol;
GridLayout gdl;
JButton btnOK,btnCancel;
JLabel lblId,lblPWD,lblPWD2,lblName,lblSex,lblAge,lblPhone,lblMail;
JTextField txtId,txtName,txtAge,txtPhone,txtMail;
JPasswordField txtPWD,txtPWD2;
JComboBox cmbSex;
public EnrolFrm()
{
frmEnrol = new JFrame("注册");
pEnrol = new JPanel();
gdl = new GridLayout(9,2,2,2);
pEnrol.setLayout(gdl);
btnOK = new JButton("提交");
btnOK.setFont(ft);
btnCancel = new JButton("取消");
btnCancel.setFont(ft);
lblId = new JLabel("登录帐号");
lblId.setFont(ft);
lblId.setForeground(red);
lblPWD = new JLabel("密码");
lblPWD.setFont(ft);
lblPWD.setForeground(red);
lblPWD2 = new JLabel("确认密码");
lblPWD2.setFont(ft);
lblPWD2.setForeground(red);
lblName = new JLabel("呢称");
lblName.setFont(ft);
lblName.setForeground(red);
lblSex = new JLabel("性别");
lblSex.setFont(ft);
lblAge = new JLabel("年龄");
lblAge.setFont(ft);
lblPhone = new JLabel("电话号码");
lblPhone.setFont(ft);
lblMail = new JLabel("E-Mail");
lblMail.setFont(ft);
txtId = new JTextField(10);
txtId.setFont(ft);
txtPWD = new JPasswordField(10);
txtPWD.setFont(ft);
txtPWD2 = new JPasswordField(10);
txtPWD2.setFont(ft);
txtName = new JTextField(10);
txtName.setFont(ft);
String cc[] = {"--","男","女"};
cmbSex = new JComboBox(cc);
cmbSex.setFont(ft);
txtAge = new JTextField(2);
txtAge.setFont(ft);
txtPhone = new JTextField(13);
txtPhone.setFont(ft);
txtMail = new JTextField(10);
txtMail.setFont(ft);
pEnrol.add(lblId); pEnrol.add(txtId);
pEnrol.add(lblPWD); pEnrol.add(txtPWD);
pEnrol.add(lblPWD2); pEnrol.add(txtPWD2);
pEnrol.add(lblName); pEnrol.add(txtName);
pEnrol.add(lblSex); pEnrol.add(cmbSex);
pEnrol.add(lblAge); pEnrol.add(txtAge);
pEnrol.add(lblPhone); pEnrol.add(txtPhone);
pEnrol.add(lblMail); pEnrol.add(txtMail);
pEnrol.add(btnOK); pEnrol.add(btnCancel);
btnOK.addActionListener(this);
btnCancel.addActionListener(this);
frmEnrol.getContentPane().add(pEnrol);
frmEnrol.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
frmEnrol.setSize(400,300);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frmEnrol.getSize();
frmEnrol.setLocation((screenSize.width - frameSize.width)/2,(screenSize.height - frameSize.height)/2);
frmEnrol.setResizable(false);
frmEnrol.setVisible(true);
}
public void condition()
{
String id = txtId.getText();
String pwd = new String(txtPWD.getPassword());
String pwd2 = new String(txtPWD2.getPassword());
String name = txtName.getText();
String sex = (String)cmbSex.getSelectedItem();
String age = txtAge.getText();
String phone = txtPhone.getText();
String mail = txtMail.getText();
try
{
while(true)
{
if(id.equals("")||pwd.equals("")||pwd2.equals("")||name.equals(""))
{
JOptionPane.showMessageDialog(frmEnrol,"带*的项不能为空!");
break;
}
else if(id.length() > 10)
{
JOptionPane.showMessageDialog(frmEnrol,"帐号不能超过10个英文字母、数字或汉字!");
break;
}
else if(pwd.length() > 10)
{
JOptionPane.showMessageDialog(frmEnrol,"密码不能超过10个字符!");
break;
}
else if(name.length() > 10)
{
JOptionPane.showMessageDialog(frmEnrol,"呢称不能超过10个英文字母、数字或汉字!");
break;
}
else if(pwd.equals(pwd2))
{
UserData user = new UserData(id,pwd,name,sex,age,phone,mail);
oos.writeObject(new String("Enrol"));
oos.writeObject(user);
break;
}
else
{
JOptionPane.showMessageDialog(frmEnrol,"两次密码输入不相同,请重新输入!");
txtPWD.setText("");
txtPWD2.setText("");
break;
}
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
public void actionPerformed(ActionEvent evt)
{
try
{
JButton bb = (JButton)evt.getSource();
if(bb.equals(btnOK))
{
condition();
}
else if(bb.equals(btnCancel))
{
frmEnrol.setVisible(false);
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
//***********************************************************************End
//*******************************************************************聊天窗口
class ChatFrm implements ActionListener,ItemListener,MouseListener
{
JFrame frmChat;
JPanel panel,pp;
JTabbedPane tp;
JTextArea txtPubMsg,txtPraMsg,txtSend;
JButton btnSend,btnSetting;
JLabel lblFont,lblFontSize,lblFontStyle,lblFontColor,lblOnline,lblPub,lblPri;
JComboBox cmbFont,cmbFontSize,cmbFontStyle,cmbFontColor;
JScrollPane spPubMsg,spPraMsg,spSend,spList;
JList lUser,praLis;
Border border = BorderFactory.createBevelBorder(BevelBorder.LOWERED);
Border border2 = BorderFactory.createBevelBorder(BevelBorder.RAISED);
UserData usr;
String userName;
Vector vUser,vUs;
ImageIcon img;
long clickTime = 0;
public ChatFrm(UserData data)
{
usr = data;
userName = usr.name;
frmChat = new JFrame("欢迎" + userName + "加入聊天室!");
img = new ImageIcon("photo.jpg");
panel = new JPanel()
{
public void paintComponent(Graphics g)
{
g.drawImage(img.getImage(),0,0,null);
super.paintComponent(g);
}
};
panel.setOpaque(false);
panel.setLayout(null);
vUser = new Vector();
vUs = new Vector();
//vUs.addElement(userName);
tp = new JTabbedPane(SwingConstants.TOP);
tp.setFont(ft);
tp.setBounds(20,20,500,300);
panel.add(tp);
txtPubMsg = new JTextArea(15,30); //PubMsg
txtPubMsg.setEditable(false);
txtPubMsg.setFont(ft);
txtPubMsg.setBackground(new Color(240,240,240));
spPubMsg = new JScrollPane(txtPubMsg);
spPubMsg.setBorder(border);
tp.addTab("公聊区",spPubMsg);
lblPub = new JLabel("↙你正在公聊中");
lblPub.setFont(new Font("宋体",1,18));
lblPub.setBorder(border2);
lblPub.setBounds(60,2,150,20);
panel.add(lblPub);
pp = new JPanel(); //PriMsg
pp.setLayout(null);
pp.setBorder(border);
txtPraMsg = new JTextArea(15,30);
txtPraMsg.setEditable(false);
txtPraMsg.setFont(ft);
spPraMsg = new JScrollPane(txtPraMsg);
spPraMsg.setBounds(105,0,390,270);
pp.add(spPraMsg);
praLis = new JList();
praLis.setFont(ft);
JScrollPane sp = new JScrollPane(praLis);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -