直接上图!
用的是Redis的订阅功能
上代码!
package com.qukin.chatroom;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
import javax.swing.*;
import javax.swing.text.DefaultCaret;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Main extends JedisPubSub {
private static final String channel="chatroom"; // redis中的list数据结构名称和redis订阅名称
private static final JTextArea area = new JTextArea();
private static final JTextField text = new JTextField();
private static final JButton send=new JButton("发送");
private static final JScrollPane pane=new JScrollPane();
private static final JLabel label=new JLabel("姓名:");
private static final JTextField name=new JTextField();
private static boolean TF=false;
static List<String> list = new ArrayList<>();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public Main() {
send.addActionListener(e -> {
if (text.getText().trim().equals("") || name.getText().trim().equals("")){
JOptionPane.showMessageDialog(null,"姓名或输入框禁止为空");
}else{
TF=true;
Jedis jedis = new Jedis("localhost");
jedis.publish(channel, text.getText());
jedis.lpush(channel, "Time:" + df.format(new Date()) + ", Name:"+name.getText()+" , Message:" + text.getText());
text.setText("");
}
});
}
@Override
public void onMessage(String channel, String message) {
if (TF) {
list.add("\t" + df.format(new Date()) + "\n" + name.getText() + ": " + message);
TF=false;
}else
list.add("\t" + df.format(new Date()) + "\n" + "匿名用户: " + message);
area.setText("");
for (String s : list)
area.append(s + "\n");
}
public static void main(String[] args) {
JFrame frame=new JFrame("匿名聊天室");
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,300);
frame.setResizable(false);
frame.setVisible(true);
label.setBounds(10,220,40,30);
frame.add(label);
name.setText("QuKin");
name.setBounds(50,220,80,30);
frame.add(name);
send.setBounds(290,220,80,30);
frame.add(send);
text.setBounds(140, 220, 140, 30);
frame.add(text);
pane.setBounds(10, 10, 360, 200);
area.setEditable(false);
pane.setViewportView(area);
frame.add(pane);
Font f=area.getFont();
area.setFont(new Font(f.getFamily(),f.getStyle(),f.getSize()+2));
DefaultCaret caret = (DefaultCaret)area.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Jedis jedis = new Jedis("localhost");
Main main=new Main();
jedis.subscribe(main, channel);
}
}
应该够简介明了吧
如果大哥有币,请打赏吧!如果没有点个赞收个藏分个享也行啊