package chatroom.gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.io.IOException;
import java.net.InetAddress;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel; //import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import chatroom.action.ExitAction;
import chatroom.action.SendMessageAction;
import chatroom.bean.Sender;
import chatroom.bean.Settings;
@SuppressWarnings("unchecked")
public class MainFrame extends JFrame {
private static final long serialVersionUID = -4256282555569463643L;
private final JPanel pnlMain = new JPanel();
private final JScrollPane pnlCenter = new JScrollPane();
private final JScrollPane pnlEast = new JScrollPane();
private final JScrollPane pnlCenterSouth = new JScrollPane();
private final JList listMessage = new JList(new DefaultListModel());
private final JList listOnlineUser = new JList(new DefaultListModel());
private final JPanel pnlSouth = new JPanel();
private final JButton btnSend = new JButton("发 送");
private final JTextArea txtMessage = new JTextArea();
public MainFrame() {
initComponents();
// new Thread(new OnlineMessageThread()).start();
new Thread(new ReceiveMessageThread()).start();
}
public JTextArea getTextArea() {
return txtMessage;
}
private void initComponents() {
// set up centre panel
pnlCenter.getViewport().add(listMessage);
// set up east panel
pnlEast.getViewport().add(listOnlineUser);
// set up south scroll panel
pnlCenterSouth.getViewport().add(txtMessage);
// set up panel south
pnlSouth.setLayout(new BorderLayout());
pnlSouth.add(pnlCenterSouth);
pnlSouth.add(btnSend, BorderLayout.EAST);
// set up main panel
pnlMain.setLayout(new BorderLayout());
pnlCenter.setBorder(BorderFactory.createTitledBorder("聊天信息"));
pnlMain.add(pnlCenter);
pnlEast.setBorder(BorderFactory.createTitledBorder("在线用户"));
pnlEast.setPreferredSize(new Dimension(150, 0));
pnlMain.add(pnlEast, BorderLayout.EAST);
pnlSouth.setPreferredSize(new Dimension(0, 100));
pnlMain.add(pnlSouth, BorderLayout.SOUTH);
// set up main frame
pnlMain.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
setContentPane(pnlMain);
setSize(new Dimension(1000, 650));
setTitle("当前用户:" + Settings.Nickname + "##破玩意聊天室##");
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
getRootPane().setDefaultButton(btnSend);// 设置默认按键发送信息(Ctrl+Enter)
// event handler
addWindowListener(new ExitAction());
btnSend.addActionListener(new SendMessageAction(this));
}// end of method
// private class OnlineMessageThread implements Runnable {
// public void run() {
// try {
// while (true) {
// String message = Settings.Receiver.receive();
// if (message.startsWith("login_")) {
// String[] array = message.split("_");
// String text = array[1];
// ((DefaultListModel) listOnlineUser.getModel())
// .addElement(text);
// }
// }
// } catch (IOException e) {
// String text = "<html><font color=red>【系统异常】" + e.getMessage()
// + "</font></html>";
// ((DefaultListModel) listOnlineUser.getModel()).addElement(text);
// }
// }
// }
private class ReceiveMessageThread implements Runnable {
public void run() {
try {
while (true) {
String message = Settings.Receiver.receive();
if (message.startsWith("login_")) {
String[] array = message.split("_");
String text = "【系统信息】用户 " + array[1] + " "+ array[2] + " " + array[3] + "已登陆!";((DefaultListModel) listMessage.getModel()).addElement(text);
} else if (message.startsWith("exit_")) {
String[] array = message.split("_");
String text = "【系统信息】用户" + array[1] + " " + array[2]
+ " " + array[3] + "离开鸟";
((DefaultListModel) listMessage.getModel()).addElement(text);
} else if (message.startsWith("chat_")) {
String[] array = message.split("_");
array[4] = array[4].replace("\n", "<br/>");
String text = "<html>【" + array[1] + " " + array[2]
+ " " + array[3] + "】说:" + array[4]
+ "</html>";
((DefaultListModel) listMessage.getModel()) .addElement(text);
pnlCenter.getViewport().scrollRectToVisible(new Rectangle(100000, 1000000, 1000000,1000000));
} else if (message.endsWith("_is_online")) {
String[] array = message.split("_");
if (!((DefaultListModel) listOnlineUser.getModel())
.contains(array[0])) {
Settings.Sender = new Sender();
Settings.Sender.send(Settings.Nickname
+ "_is_online", InetAddress
.getByName(Settings.Broadcast_Host),
Settings.Broadcast_Port);
((DefaultListModel) listOnlineUser.getModel())
.addElement(array[0]);
}
}
}
} catch (IOException e) {
String text = "【系统异常】" + e.getMessage() + "";
((DefaultListModel) listMessage.getModel()).addElement(text);
}
}
}
}
简单UDP聊天室 java版
4星 · 超过85%的资源 需积分: 10 78 浏览量
2011-09-09
10:20:07
上传
评论 1
收藏 3.07MB ZIP 举报
我喜欢吃包子
- 粉丝: 5
- 资源: 12
最新资源
- 用C语言为母亲节献上一份特别的祝福.zip
- LCD1602液晶显示屏的深入探索与实用指南.zip
- 基于Matlab人脸肤色定理的教师人数统计+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab霍夫曼变换的表盘读数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab火灾烟雾检测源码带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的恶劣天气交通标志识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的霍夫曼变换的表盘示数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的车道线识别系统 +源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈