package gui;
import qq.classes.TreeNodeRenderer;
import qq.classes.OnlineUser;
import qq.classes.ClientReceiveThread;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Hashtable;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;
@SuppressWarnings("serial")
public class ListFrame extends javax.swing.JFrame {
Socket s;
BufferedReader in;
PrintWriter out;
//客户端消息接收线程
ClientReceiveThread clientThread;
//在线用户字符串
String onlineUsers;
private OnlineUser user;
String account;
//聊天窗体引用集合
public static Hashtable chatFrames;
private JButton head;
private JPanel topPanel,bottomPanel1;
private JComboBox statusCombo;
private JTree jTree1;
private JTree jTree2;
private JTree jTree3;
private JButton btmenu;
private JScrollPane mainPanel1;
private JLabel statusLabel;
private JLabel nameLabel;
private JTabbedPane tabbedPane1;
private JTextField moodtf;
private Toolkit toolkit = Toolkit.getDefaultToolkit();
private JTabbedPane jTabbedPane1;
private DefaultMutableTreeNode root1;
private JPopupMenu pMenu;
public static void main(String[] args) {
new ListFrame(null,null,null,null);
}
public ListFrame(Socket s,BufferedReader in,PrintWriter out,String account) {
this.s = s;
this.out = out;
this.in = in;
this.account = account;
user = new OnlineUser();
user.setIn(in);
user.setOut(out);
user.setS(s);
user.setAccount(account);
this.setTitle("qq2009");
this.setIconImage(toolkit.getImage("images/list.jpg"));
initGUI();
//刷新好友列表数据
refreshInterface();
//创建传出聊天窗体引用的哈希表
chatFrames = new Hashtable();
jTree1.addMouseListener(new MouseAdapter (){
public void mouseReleased(MouseEvent e) {
DefaultMutableTreeNode selected= (DefaultMutableTreeNode)ListFrame.this.jTree1.getLastSelectedPathComponent();
try{
if(selected.getPath().length==1){
return;
}
else if(selected.getPath().length==2){
if(selected.toString().equals(user.getAccount())){
return;
}
new ChatFrame(user.getAccount(),selected.toString(),user.getOut(),chatFrames);
}
}catch(Exception e1){}
}
});
this.setVisible(true);
}
private void refreshInterface(){
@SuppressWarnings("unused")
String nickname = null;
@SuppressWarnings("unused")
String headpic = null;
String action = null;
this.user.getOut().write("friendData\n");
this.user.getOut().flush();
//发送用户账号信息
this.user.getOut().write(account+"\n");
this.user.getOut().flush();
//接收服务器的相应数据
try{
action = this.user.getIn().readLine();
//nickname = in.readLine();
//headpic = in.readLine();
//接收在线人员
if(action.equals("friendData")){
onlineUsers = this.user.getIn().readLine();
String []userinfo = onlineUsers.split("#");
//为root创建子节点
for(int i=0;i<userinfo.length;i++){
root1.add(new DefaultMutableTreeNode(userinfo[i]));
}
nameLabel.setText(user.getAccount());
}
} catch (IOException e) {
e.printStackTrace();
}
clientThread = new ClientReceiveThread(this.user,jTree1,chatFrames,this);
Thread t = new Thread(clientThread);
t.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("休眠异常");
e.printStackTrace();
}
}
@SuppressWarnings("serial")
private void initGUI() {
//横向居中显示
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); // 获取屏幕的尺寸
int screenWidth = screenSize.width/2; // 获取屏幕的宽
int width = this.getWidth();
setLocation((screenWidth-width)/2,0);
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
try{
ListFrame.this.out.write("offline\n");
ListFrame.this.out.flush();
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
this.setFocusable(false);
getContentPane().setBackground(new java.awt.Color(8,181,237));
//------------------------- 顶部面板 -----------------------//
final ImageIcon topimage = new ImageIcon(getClass().getClassLoader().getResource("images/topPanel1.jpg"));
topPanel = new JPanel(){
public void paint(Graphics g){
g.clearRect(0, 0, getSize().width, getSize().height);
topimage.paintIcon(this, g, 0, 0);
paintComponents(g);
}
};
topPanel.setLayout(null);
topPanel.setPreferredSize(new Dimension (217,95));
topPanel.setBackground(new java.awt.Color(0,255,255));
getContentPane().add(topPanel,"North");
head = new JButton();
topPanel.add(head);
head.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/head1.jpg")));
head.setBounds(0, 0, 51, 53);
ComboBoxModel statusComboModel =
new DefaultComboBoxModel(
new String[] { "在线", "隐身" });
statusCombo = new JComboBox();
statusCombo.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
statusLabel.setText(e.getItem().toString());
}
});
topPanel.add(statusCombo);
statusCombo.setModel(statusComboModel);
statusCombo.setBounds(58, 2, 53, 22);
moodtf = new JTextField();
topPanel.add(moodtf);
moodtf.setText("心情很好");
moodtf.setBounds(56, 30, 56, 23);
nameLabel = new JLabel();
topPanel.add(nameLabel);
nameLabel.setText("名字");
nameLabel.setBounds(123, 4, 35, 15);
nameLabel.setFont(new Font("宋体", Font.BOLD, 14));
nameLabel.setBackground(Color.DARK_GRAY);
nameLabel.setForeground(Color.red);
statusLabel = new JLabel();
topPanel.add(statusLabel);
statusLabel.setText(statusCombo.getSelectedItem().toString());
statusLabel.setBounds(164, 4, 35, 15);
//----------------- 中央面板 ------------------------//
mainPanel1 = new JScrollPane();
mainPanel1.setLayout(null);
mainPanel1.setSize(210, 280);
mainPanel1.setBackground(new java.awt.Color(0,255,0));
jTabbedPane1 = new JTabbedPane();
getContentPane().add(jTabbedPane1,"Center");
root1 = new DefaultMutableTreeNode("我的好友");
jTree1 = new JTree(root1);
jTree1.setCellRenderer(new TreeNodeRenderer());
DefaultMutableTreeNode root2 = new DefaultMutableTreeNode("我的群组");
root2.add(new DefaultMutableTreeNode("群1"));
root2.add(new DefaultMutableTreeNode("群2"));
jTree2 = new JTree(root2);
jTree2.setCellRenderer(new TreeNodeRenderer());
DefaultMutableTreeNode root3 = new DefaultMutableTreeNode("最近联系人");
root3.add(new DefaultMutableTreeNode("a"));
root3.add(new DefaultMutableTreeNode("土豆"));
jTree3 = new JTree(root3);
jTree3.setCellRenderer(new TreeNodeRenderer());
JButton bt3 = new JButton();
bt3.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/firstNode.jpg")));
jTabbedPane1.addTab("好友", null, jTree1, "联系人");
jTabbedPane1.addTab("群组", null, jTree2, "群/讨论组");
jTabbe
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
模拟ATM机 java课程设计 (144个子文件)
Server.bat 20B
Login.bat 14B
ListFrame.class 10KB
ServerFrame.class 10KB
Login.class 7KB
ServerListenThread.class 7KB
Regist.class 7KB
modifyFrame.class 7KB
ChatFrame.class 6KB
ClientReceiveThread.class 5KB
ConnDb.class 4KB
ServerReceiveThread.class 3KB
ComboBoxRenderer.class 2KB
OnlineUser.class 2KB
ListFrame$7.class 2KB
OnlineUser.class 2KB
TreeNodeRenderer.class 2KB
Login$2.class 2KB
ListFrame$1.class 2KB
Regist$1.class 1KB
modifyFrame$1.class 1KB
Login$3.class 1KB
ServerFrame$1.class 1KB
Login$1.class 1KB
ListFrame$5.class 987B
ChatFrame$6.class 985B
ListFrame$3.class 984B
ChatFrame$7.class 982B
ChatFrame$2.class 982B
ChatFrame$3.class 982B
ListFrame$2.class 910B
ListFrame$4.class 885B
ListFrame$6.class 736B
modifyFrame$2.class 680B
ChatFrame$4.class 655B
ChatFrame$5.class 654B
ServerFrame$2.class 654B
ServerFrame$4.class 652B
Regist$2.class 651B
Login$4.class 646B
ChatFrame$1.class 632B
ServerFrame$3.class 623B
Login$5.class 615B
.classpath 336B
.classpath 284B
Thumbs.db 32KB
Thumbs.db 32KB
80王佳帅07计本系统编程文档.doc 391KB
80王佳帅07计本项目总结.doc 16KB
serverip.gif 37KB
serverip.gif 37KB
qqshow_boy.gif 12KB
qqshow_girl.gif 12KB
mysql-connector-java-5.1.0-bin.jar 553KB
looks-2.1.4.jar 400KB
msbase.jar 294KB
mssqlserver.jar 67KB
msutil.jar 63KB
ListFrame.java 10KB
ServerFrame.java 9KB
ServerListenThread.java 7KB
Login.java 7KB
Regist.java 7KB
modifyFrame.java 7KB
ChatFrame.java 6KB
ClientReceiveThread.java 5KB
ServerReceiveThread.java 3KB
ConnDb.java 3KB
TreeNodeRenderer.java 2KB
ComboBoxRenderer.java 2KB
OnlineUser.java 1KB
OnlineUser.java 1KB
chat2.jpg 184KB
chat3.jpg 184KB
chat.jpg 184KB
main1.jpg 143KB
chat11.jpg 86KB
about.jpg 79KB
register.jpg 55KB
server2.jpg 54KB
chat02.jpg 40KB
chat01.jpg 36KB
topPanel1.jpg 35KB
Write.jpg 32KB
registerlogo.jpg 32KB
list.jpg 30KB
server1.jpg 28KB
chat04.jpg 27KB
loginlogo.jpg 27KB
topPanel2.jpg 21KB
bottomPanel.jpg 17KB
btnRegister.jpg 17KB
QQ截图未命名2.jpg 16KB
chat03.jpg 16KB
btnExit.jpg 16KB
btnLogin.jpg 15KB
btnCancel.jpg 15KB
btnClose.jpg 14KB
btnSend.jpg 14KB
menuon.jpg 13KB
共 144 条
- 1
- 2
资源评论
xinyue_baby
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功