提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
效果如下
![在这里插入图片描
qq登录界面
好友列表界面
聊天界面
提示:以下是本篇文章正文内容,下面案例可供参考
二、使用步骤
1.
登录界面代码如下(示例):
package frame;
public class LoginFrame extends JFrame{
int width=Toolkit.getDefaultToolkit().getScreenSize().width;
int height=Toolkit.getDefaultToolkit().getScreenSize().height;
JPanel jpanel;
JButton jbutton;
JLabel jlabel,jlabel1;
JTextField jtextfield;
JPasswordField jpasswordfield;
JCheckBox jcheckbox1,jcheckbox2;
Socket s;
public static FriendListFrame friendlistframe;
public static HashMap<String,UserThread> threadmap=new HashMap<String,UserThread>();
public LoginFrame() {
this.setTitle("QQ");
this.setBounds((width-450)/2, (height-400)/2, 450, 400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
jlabel=new JLabel(new ImageIcon(LoginFrame.class.getResource("/image/top.jpg")));
this.add(jlabel,"North");
jpanel=new JPanel();
jpanel.setLayout(null);
this.add(jpanel);
jlabel1=new JLabel(new ImageIcon(LoginFrame.class.getResource("/image/qq.png")));
jlabel1.setBounds(40, 40, 80 ,80);
jpanel.add(jlabel1);
jtextfield=new JTextField();
jtextfield.setBounds(150,40,200,30);
jpanel.add(jtextfield);
jpasswordfield=new JPasswordField();
jpasswordfield.setBounds(150,90,200,30);
jpasswordfield.setText("123456");
jpanel.add(jpasswordfield);
jcheckbox1=new JCheckBox("记住密码");
jcheckbox1.setBounds(150,130,80,30);
jpanel.add(jcheckbox1);
jcheckbox2=new JCheckBox("自动登录");
jcheckbox2.setBounds(250,130,80,30);
jpanel.add(jcheckbox2);
jbutton=new JButton("登陆");
jbutton.setBounds(150,170,200,30);
jpanel.add(jbutton);
jbutton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource().equals(jbutton)) {
String userid=jtextfield.getText();
Message message=new Message(userid,jpasswordfield.getText());
if(userid.equals("")||jpasswordfield.getText().equals("")) {
JOptionPane.showMessageDialog(null, "账号或密码不能为空", "【出错啦】", JOptionPane.ERROR_MESSAGE);}
try {
s=new Socket("127.0.0.1",3333);
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
oos.writeObject(message);
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
Message messageget=(Message) ois.readObject();
if(messageget.getType()==1) {
friendlistframe=new FriendListFrame(userid);
LoginFrame.this.dispose();
UserThread userthread=new UserThread(s);
userthread.start();
threadmap.put(userid, userthread);
if(messageget.getOlfriends()!=null) {
friendlistframe.updateOnline(messageget.getOlfriends());
}
}
} catch (IOException e1) {e1.printStackTrace();
} catch (ClassNotFoundException e1) {e1.printStackTrace();}
}
}
});
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
LoginFrame loginframe=new LoginFrame();
}
}
好友列表界面代码
public class FriendListFrame extends JFrame{
int width=Toolkit.getDefaultToolkit().getScreenSize().width;
JScrollPane jscrollpane;
JPanel jpanel;
JLabel[] jlabel;
public static HashMap<String,ChatFrame> chatmap=new HashMap<String,ChatFrame>();
public FriendListFrame(String userid) {
this.setTitle(userid+"好友列表");
this.setBounds(width-400,100,300,600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
jpanel=new JPanel(new GridLayout(50,1,4,4));
jscrollpane=new JScrollPane(jpanel);
this.add(jscrollpane);
jlabel=new JLabel[15];
String[] name= {"lily","andy","jack","bob","tony","ben","jack1","jack2","jack3","jack4","jack5","jack6","jack7","jack8","jack9"};
for(int i=0;i<name.length;i++) {
jlabel[i]=new JLabel(name[i],new ImageIcon(FriendListFrame.class.getResource("/image/tx"+i+".png")),JLabel.LEFT);
jpanel.add(jlabel[i]);
jlabel[i].setEnabled(false);
if(jlabel[i].getText().equals(userid)) {jlabel[i].setEnabled(true);};
jlabel[i].addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) { }
@Override
public void mousePressed(MouseEvent e) { }
@Override
public void mouseExited(MouseEvent e) { }
@Override
public void mouseEntered(MouseEvent e) { }
@Override
public void mouseClicked(MouseEvent e) {
String friend=((JLabel) e.getSource()).getText();
ChatFrame chatframe=chatmap.get(friend);
if(chatframe==null) {
ChatFrame chatframe1=new ChatFrame(userid,friend);
chatmap.put(friend, chatframe1);
chatframe=chatframe1;
}
chatframe.setVisible(true);
Message message=UserThread.contentmap.get(friend);
if(message!=null) {
chatframe.appendContent(message.getTime(), message.getUserid(), message.getContent());
UserThread.contentmap.remove(friend,message);
}
}
});
this.setVisible(true);
}
}
public void updateOnline(String[] friends) {
for(int i=0;i<friends.length;i++) {
for(int a=0;a<jlabel.length;a++) {
if(friends[i].equals(jlabel[a].getText())) {
jlabel[a].setEnabled(true);
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
FriendListFrame f=new FriendListFrame("lily");
}
}
聊天界面代码
public class ChatFrame extends JFrame{
int width=Toolkit.getDefaultToolkit().getScreenSize().width;
int height=Toolkit.getDefaultToolkit().getScreenSize().height;
JScrollPane jscrollpane;
JTextArea jtextarea;
JPanel jpanel;
JTextField jtextfield;
JButton jbutton;
public ChatFrame(String userid,String friendid) {
this.setTitle(userid+"正在和"+friendid+"聊天");
this.setBounds((width-600)/2,(height-500)/2,600,500);
this.setResizable(false);
// this.setDefaultCloseOperation(EXIT_ON_CLOSE);
jtextarea=new JTextArea(26,25);
jtextarea.setEditable(false);
jscrollpane=new JScrollPane(jtextarea);
this.add(jscrollpane,"North");
jpanel=new JPanel();
jtextfield=new JTextField(25);
jbutton=new JButton("发送");
jpanel.add(jtextfield);
jpanel.add(jbutton);
this.add(jpanel);
this.setVisible(true);
jbutton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
SimpleDateFormat simpledateformat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time=simpledateformat.format(new Date());
Message message=new Message(userid,friendid,time,jtextfield.getText());
jtextarea.append(" "
+ " "+time+"\n"+userid+":\n"+jtextfield.getText()+"\n");
jtextfield.setText("");
UserThread userthread=LoginFrame.threadmap.get(userid);
try {
ObjectOutputStream oos=new ObjectOutputStream(userthread.getS().getOutputStream());
oos.writeObject(message);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
};
public void appendContent(String time,String userid,String content) {
jtextarea.append(" "
+ " "+time+"\n"+userid+":\n"+content+"\n");;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ChatFrame c=new ChatFrame(" "," ");
}
}
2.服务器端
代码如下(示例):
``public class Server {
ServerSocket ss;
Socket s;
public static HashMap<String,ServerThread> threadmap=new HashMap<String,ServerThread>();
public Server() throws IOException, ClassNotFoundException {
ss=new ServerSocket(3333);
System.out.print("服务器正在监听..\n");
while(true) {
s=ss.accept();
ObjectInputStream ois=new ObjectInputStream(s.getInputStream());
Message messageget=(Message) ois.readObject();
if(messageget.userpsw.equals("123456")) {
Message message=new Message();
message.setType(1);
Set<String> set=threadmap.keySet();
String[] friends=set.toArray(new String[set.size()]);
message.setOlfriends(friends);
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream());
oos.writeObject(message);
for(int i=0;i<friends.length;i++) {
ServerThread serverthread01=threadmap.get(friends[i]);
ObjectOutputStream oos01=new ObjectOutputStream(serverthread01.s.getOutputStream());
Message message01=new Message();
message01.setOlfriends(new String[] {messageget.userid});
oos01.writeObject(message01);
}
ServerThread serverthread=new ServerThread(s);
serverthread.start();
threadmap.put(messageget.userid, serverthread);
}
}
}
public static void main(String[] args) throws ClassNotFoundException, IOException {
// TODO Auto-generated method stub
Server s=new Server();
}
}
总结
:
资源下载地址:
https://download.csdn.net/download/u012922364/88763243?spm=1001.2014.3001.5501