package client.cjh.qq.ui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;
import com.cjh.qq.common.MyGroup;
import com.cjh.qq.common.User;
import client.cjh.qq.images.GetImage;
import client.cjh.qq.model.ClientThread;
import client.cjh.qq.model.ManageChatUI;
import client.cjh.qq.model.ManageClientThread;
import client.cjh.qq.model.OffLine;
public class MainUI extends JFrame implements MouseListener{
private JPanel jp0, jp0_1, jp0_1_1, jp0_1_2, jp1, jp1_0, jp1_1, jp1_2, jp_jtf,jp_bottom;
private JLabel jl0, jl1;
private JTextField jtf0, jtf1;
private JTabbedPane jtp;
private JScrollPane jsp0, jsp1;
private JButton jb0, jb1;
private MyTree myTree;
private JTree jt0, jt1;
private DefaultTreeModel model;
private PopupMenu pm;
private ImageIcon icon1 = GetImage.getSkin("right.png");
private ImageIcon icon2 = GetImage.getSkin("down.png");
private String myId;
private String myNickName;
private User user;
public MainUI(String myId,String myNickName) {
super("QQ For Java");
this.myId = myId;
this.myNickName = myNickName;
init();
}
public void init(){
// 改变展开/折叠图标
/*UIManager.put("Tree.collapsedIcon", icon1);
UIManager.put("Tree.expandedIcon", icon2);*/
//创建树
this.myTree = new MyTree(myId,new MyTreeModel());
myTree.addMouseListener(this);
// 头像区
jp0 = new JPanel(new BorderLayout());
jp0_1 = new JPanel(new GridLayout(2, 1));
jp0_1_1 = new JPanel();
jp0_1_2 = new JPanel();
jl0 = new JLabel(GetImage.getSkin(myId + ".png"));
jl1 = new JLabel(myNickName + "(" + myId + ")");
jtf0 = new JTextField();
jtf0.setEditable(false);
jtf0.setPreferredSize(new Dimension(180, 20));
jp0_1_1.add(jtf0);
jp0_1_2.add(jl1);
jp0.add(jl0, "West");
jp0_1.add(jp0_1_2);
jp0_1.add(jp0_1_1);
jp0.add(jp0_1);
// 好友列表等
jp1 = new JPanel(new BorderLayout());
jp_jtf = new JPanel();
jtf1 = new JTextField(23);
jtp = new JTabbedPane();
//jt0.getSelectionModel().setSelectionMode(
// TreeSelectionModel.SINGLE_TREE_SELECTION);
//jt0.addMouseListener(this);
// 设置是否显示根节点的“展开/折叠”图标,默认是false
// jt0.setShowsRootHandles(false);
// 设置节点是否可见,默认是true
// jt0.setRootVisible(false);
// 中间部分
jsp0 = new JScrollPane(myTree);
jsp1 = new JScrollPane();
jp1_0 = new JPanel();
jp1_1 = new JPanel();
jp1_2 = new JPanel();
jb0 = new JButton(GetImage.getSkin("find.png"));
jb0.setPreferredSize(new Dimension(20, 20));
// 下方按钮
jp_bottom = new JPanel();
jb1 = new JButton(GetImage.getSkin("find.png"));
jp_bottom.add(jb1);
// 按顺序添加组件
jp_jtf.add(jtf1);
jp_jtf.add(jb0);
jp1.add(jp_jtf, "North");
jsp1.add(jp1_1);
jtp.add("联系人", jsp0);
// jtp.add("群/讨论组",jsp1);
jp1.add(jtp);
jp1.add(jp1_2, "South");
this.add(jp0, "North");
this.add(jp1, "Center");
this.add(jp_bottom, "South");
this.setBounds(0, 0, 300, 650);
//this.setResizable(false);
this.setVisible(true);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
// 发送下线包,退出
try {
if (ManageClientThread.getThread(myId).isAlive()) {
new OffLine(myId).off();
try {
Thread.sleep(50);
} catch (Exception e1) {
e1.printStackTrace();
}
ManageClientThread.getThread(myId).stopService();
}
ManageChatUI.closeAllChatUI();
//ManageClientThread.removeThread(ManageClientThread.getThread(myId));
MainUI.this.setVisible(false);
MainUI.this.dispose();
} catch (Exception e1) {
e1.printStackTrace();
} finally {
System.exit(0);
}
}
});
}
public MyTree getMyTree(){
return this.myTree;
}
/*public void setUserName(String myId){
this.myId = myId;
}
public String getUserName(){
return myId;
}*/
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
TreePath selPath = myTree.getPathForLocation(e.getX(), e.getY());
if(selPath != null){
Object node = selPath.getLastPathComponent();
if(node != null){
if(node instanceof MyGroup){
MyGroup my = (MyGroup) node;
if(my.isOpen() == false){
myTree.expandPath(selPath);
//System.out.println("" + my.isOpen());
my.setOpen(true);
}else{
myTree.collapsePath(selPath);
//System.out.println("" + my.isOpen());
my.setOpen(false);
}
}
}
}
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
int selRow = myTree.getRowForLocation(e.getX(), e.getY());
TreePath selPath = myTree.getPathForLocation(e.getX(), e.getY());
if(e.getClickCount() == 2){
if (selRow != -1) {
myDoubleClick(selRow, selPath);
}
}
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
//自定义双击事件
private void myDoubleClick(int selRow, TreePath selPath) {
if(selPath != null){
Object node = selPath.getLastPathComponent();
if(node != null){
if(node instanceof User){
user = (User) node;
/*if (user.getIsOnline() == 0) {
JOptionPane.showMessageDialog(this,"对不起,不能与离线用户聊天!");
return;
}*/
//先尝试从hashmap中拿到聊天窗口
ChatUI ui = ManageChatUI.getChatUI(myId+user.getUserId());
if(ui != null){
myTree.setHasUnreadMsg(user.getUserId(),false);
ui.setVisible(true);
}else{
ui = new ChatUI(myId,myNickName,user.getUserId(),user.getUsername());
ui.setVisible(true);
String s = myId+user.getUserId();
ManageChatUI.addChatUI(s, ui);
}
}
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java_QQ.zip_一对多聊天
共147个文件
png:50个
class:39个
java:31个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 30 浏览量
2022-09-19
19:42:30
上传
评论
收藏 1.69MB ZIP 举报
温馨提示
本系统通过模仿时下流行的聊天软件,采用C/S模式进行开发,结合数据库实现了登录、一对一聊天、一对多聊天、在线提醒等功能,其中聊天的功能是通过服务器转发来实现的
资源推荐
资源详情
资源评论
收起资源包目录
java_QQ.zip_一对多聊天 (147个子文件)
ChatUI.class 7KB
SqlOperation.class 7KB
MainUI.class 6KB
LoginUI.class 6KB
MyTreeModel.class 5KB
ClientThread.class 5KB
ServerThread.class 5KB
MyTreeCellRenderer.class 5KB
ServerUI.class 4KB
StartServer.class 3KB
MyTree.class 3KB
ConToServer.class 3KB
ConfigUI.class 3KB
User.class 2KB
User.class 2KB
MyGroup.class 2KB
MyGroup.class 2KB
ManageChatUI.class 2KB
MyTextPane.class 2KB
OffLine.class 2KB
Message.class 2KB
Message.class 2KB
MainUI$1.class 2KB
SqlConnection.class 1KB
MyTimerUpTree.class 1KB
ManageServerThread.class 1KB
ServerUI$1.class 1KB
ManageClientThread.class 1KB
MyTreeCellRenderer$1.class 1KB
ManageMainUI.class 1023B
GetImage.class 971B
MyTimerUpTree$1.class 753B
ConfigUI$1.class 683B
ChatUI$1.class 682B
MessageType.class 555B
MessageType.class 555B
MyRoot.class 550B
MyRoot.class 550B
Login.class 531B
.classpath 609B
.classpath 301B
.fatjar 401B
.fatjar 400B
startserver.gif 1KB
startserver.gif 1KB
stopserver.gif 1KB
stopserver.gif 1KB
sendfile.gif 1KB
sendfile.gif 1KB
qq.gif 1KB
qq.gif 1KB
setface.gif 666B
setface.gif 666B
QQServer.jar 423KB
msbase.jar 280KB
QQClient.jar 265KB
mssqlserver.jar 65KB
msutil.jar 58KB
MainUI.java 6KB
SqlOperation.java 6KB
ChatUI.java 6KB
MyTreeModel.java 5KB
ServerThread.java 4KB
LoginUI.java 4KB
ClientThread.java 4KB
MyTreeCellRenderer.java 4KB
ServerUI.java 3KB
StartServer.java 3KB
MyTree.java 2KB
ConfigUI.java 2KB
User.java 2KB
User.java 2KB
ConToServer.java 2KB
Message.java 2KB
Message.java 2KB
SqlConnection.java 1KB
MyGroup.java 1KB
MyGroup.java 1KB
MyTextPane.java 999B
MyTimerUpTree.java 970B
ManageChatUI.java 852B
OffLine.java 795B
ManageServerThread.java 520B
ManageClientThread.java 475B
GetImage.java 396B
ManageMainUI.java 373B
MyRoot.java 240B
MyRoot.java 240B
Login.java 176B
girl.jpg 84KB
girl.jpg 84KB
MyQQ_Log.LDF 1024KB
MyQQ_Data.MDF 1024KB
qq2012.png 39KB
qq2012.png 39KB
logo.png 24KB
logo.png 24KB
bkg.png 13KB
bkg.png 13KB
1001.png 8KB
共 147 条
- 1
- 2
资源评论
alvarocfc
- 粉丝: 105
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功