QQ好友列表树形列表java代码实现代码_java

以前在网上瞎转悠的时候就发现很多人为用Java实现QQ登陆后的面板的问题感到十分头疼,最近我因在写模拟QQ的项目,故不可或缺的遇到了这一个问题,在网上我google了,百度了,最终发现的是有很多人被这一问题困扰,却没有解决的方案,估计是那些写出来了的人,没有发布到网上来,如今,经过自己的多方面查找资料,终于把他写出来了,也不枉昨晚熬夜了,呵呵,好了先让我们来看看实现的效果截图: 

      好了,效果就是这样了,虽然实现了基本功能,但是还是不完美,比如说好友面板不能随着窗口改变大小而改变,不过应该已经可以解决了,只是还没实践,下面就发上源代码:

一共有三个类: 

MemberModel.java //显示类QQ似好友标签信息的模板类;        

TestPane.java    //添加多个模板的容器类;             

TestFrame.java   //窗体类;

核心部分是前面两个类,注意,第二个类的布局方式不能为空,否则不能是容器显示滚动条,这是实现这个面板功能的一个难题,因为我不怎么会使用其他的布局方式,就只经常用空布局,经过这次才知道,光用空布局是不行的,空布局的应用受到了太多的限制。

在TestPane.java中添加好友信息的方式应该是代码添加黑名单信息的方式,可在其他类中调用方法,传递参数(数组)过来,然后对信息模板进行初始化,还有面板上的信息模板从程序刚开始运行就生成了,只是设置了不可见,后点击相关分类标签后的可视与不可视是同理的,也就是说你有多少个好友就一直会有多少个JLabel存在你的面板上,只是你可能看不见他们,我感觉自己的实现方式不是很好。还有在我所用的这种布局方式中,显示Label的宽度是一定的,我不知道怎么设置他的宽度和高度,所以通过在Label上添加了一个白色图标(185 X 60)来使Label变宽,然后再添加模板JPanel,如果网友们还有好的解决方法,希望不吝赐教。

下面是源码:

package coolbaby6;

import javax.swing.ImageIcon;

import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.Rectangle;
import javax.swing.JLabel;
import java.awt.Dimension;
import java.awt.Font;

public class MemberModel{

 private static final long serialVersionUID = 1L;

 public JButton jButton = null;//显示好友头像;

 public JPanel jPanel = new JPanel();//模板容器;

 private JLabel lb_nickName = null;//显示昵称;

 private int pic;

 private String nickname = null;

 private JLabel lb_mood = null;//显示心情;

 public MemberModel(int pic, String nickname, int len) {
 super();
 this.pic = pic;//头像编(有多种方法可以实现,这种最简单)
 this.nickname = nickname;//昵称;
 initialize();
 }

 private void initialize() {
 lb_mood = new JLabel();
 lb_mood.setBounds(new Rectangle(51, 30, 131, 20));
 lb_mood.setFont(new Font("Dialog", Font.PLAIN, 12));
 lb_mood.setText("世界上最遥远的距离不是生与死,而是我站在你面前你却不知道我爱你!");
 lb_mood.addMouseListener(new java.awt.event.MouseAdapter() {
  public void mouseEntered(java.awt.event.MouseEvent e) {
  exchangeEnter();
  lb_mood.setToolTipText(lb_mood.getText());
  }
  public void mouseExited(java.awt.event.MouseEvent e) {
  exchangeExited();
  }

 });
 lb_nickName = new JLabel();
 lb_nickName.setBounds(new Rectangle(52, 10, 80, 20));
 lb_nickName.setFont(new Font("Dialog", Font.BOLD, 14));
 lb_nickName.setText(nickname);
 jPanel.setSize(new Dimension(185, 60));
 jPanel.setLayout(null);
 jPanel.add(getJButton(), null);
 jPanel.add(lb_nickName, null);
 jPanel.add(lb_mood, null);
 jPanel.addMouseListener(new java.awt.event.MouseAdapter() {
  public void mouseExited(java.awt.event.MouseEvent e) {
  exchangeExited();//鼠标移出模板区,改变背景颜色;
  }

  public void mouseEntered(java.awt.event.MouseEvent e) {
  exchangeEnter();//鼠标移进模板区,改变背景颜色;
  }
 });
 }

 private void exchangeEnter() {
 jPanel.setBackground(new Color(192,224,248));
 }

 private void exchangeExited() {
 jPanel.setBackground(null);
 }

 private JButton getJButton() {
 if (jButton == null) {
  jButton = new JButton();
  jButton.setBounds(new Rectangle(8, 10, 40, 40));
  jButton.setBackground(new Color(236, 255, 236));
  jButton.setIcon(new ImageIcon(pic + ".jpg"));
  jButton.addMouseListener(new java.awt.event.MouseAdapter() {
  public void mouseExited(java.awt.event.MouseEvent e) {
   exchangeExited();//鼠标移出模板区,改变背景颜色;
  }
  public void mouseEntered(java.awt.event.MouseEvent e) {
   exchangeEnter();//鼠标移进模板区,改变背景颜色;
  }
  });

 }
 return jButton;
 }
}
package coolbaby6;

import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;

public class TestPane extends JPanel {

 private static final long serialVersionUID = 1L;
 private JLabel jLabel = null;
 private JLabel jLabel1 = null;
 private JLabel jLabel11 = null;
 private JLabel jLabel12 = null;
 private int clickF=0;
 private int clickB=0;

 public TestPane() {
 super();
 initialize();
 }

 private void initialize() {

 jLabel12 = new JLabel();
 jLabel12.setIcon(new ImageIcon("img/bg.jpg"));
 jLabel12.add(new MemberModel(3,"CoolBabY3",200).jPanel);
 jLabel12.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

 jLabel11 = new JLabel();
 jLabel11.setIcon(new ImageIcon("img/bg.jpg"));
 jLabel11.add(new MemberModel(2,"CoolBabY2",200).jPanel);
 jLabel11.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

 jLabel1 = new JLabel();
 jLabel1.setIcon(new ImageIcon("img/bg.jpg"));
 jLabel1.add(new MemberModel(1,"CoolBabY1",200).jPanel);
 jLabel1.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

 jLabel = new JLabel();
 jLabel.setText("我的好友");
 jLabel.setIcon(new ImageIcon("img/ico.jpg"));
 jLabel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));

 jLabel.addMouseListener(new java.awt.event.MouseAdapter() {
  public void mouseClicked(java.awt.event.MouseEvent e) {
  clickF+=1;
  if(clickF%2==1){
   jLabel1.setVisible(false);
   jLabel11.setVisible(false);
   jLabel12.setVisible(false);
   jLabel.setIcon(new ImageIcon("img/ico2.jpg"));
   update();
  }else{
   jLabel1.setVisible(true);
   jLabel11.setVisible(true);
   jLabel12.setVisible(true);
   jLabel.setIcon(new ImageIcon("img/ico.jpg"));
   update();
  }
  }
 });
 this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
 this.setSize(200, 408);
 this.setLocation(20, 5);
 this.add(jLabel, null);
 this.add(jLabel1, null);
 this.add(jLabel11, null);
 this.add(jLabel12, null);
 addJLabel();
 }

 private void update(){//更新UI界面;
 this.updateUI();
 }

 private void clickBlack2(JLabel []jb){//点击标签,将后面的标签全部设为不可视;
 for(int i=1;i<jb.length;i++){
  try{
  jb[i].setVisible(false);
  }catch(Exception e){
  e.printStackTrace();
  }
 }
 update();
 }
 private void clickBlack(JLabel []jb){//点击标签,将后面的标签全部设为可视;
 for(int i=1;i<jb.length;i++){
  try{
  jb[i].setVisible(true);
  }catch(Exception e){
  e.printStackTrace();
  }

 }
 update();
 }

 private void addJLabel(){//添加黑名单的内容;
 final JLabel []jb=new JLabel[7];
 jb[0] = new JLabel();
 jb[0].setText("黑名单");
 jb[0].setIcon(new ImageIcon("img/ico2.jpg"));
 jb[0].setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
 jb[0].addMouseListener(new java.awt.event.MouseAdapter() {
  public void mouseClicked(java.awt.event.MouseEvent e) {

  clickB+=1;
  if(clickB%2==1){
   clickBlack(jb);
   jb[0].setIcon(new ImageIcon("img/ico.jpg"));
  }else{
   clickBlack2(jb);
   jb[0].setIcon(new ImageIcon("img/ico2.jpg"));
  }

  }
 });
 this.add(jb[0],null);
 for(int i=1;i<jb.length;i++){
  jb[i]=new JLabel();
  jb[i].setIcon(new ImageIcon("img/bg.jpg"));
  jb[i].setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
  jb[i].add(new MemberModel((i+3),"CoolBabY"+(i+3),200).jPanel);
  jb[i].setVisible(false);
  this.add(jb[i],null);
 }

 }

}
package coolbaby6;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;

public class TestFrame {

 private JFrame jFrame = null;

 private JPanel jContentPane = null;

 private JScrollPane scrollPane=null;

 public static void main(String[] args) {
 SwingUtilities.invokeLater(new Runnable() {
  public void run() {
  TestFrame application = new TestFrame();
  application.getJFrame().setVisible(true);
  }
 });
 }

 private JFrame getJFrame() {
 if (jFrame == null) {
  jFrame = new JFrame();
  jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  jFrame.setSize(230, 700);
  jFrame.setTitle("模拟实现QQ面板功能");
  jFrame.setContentPane(getJContentPane());
 }
 return jFrame;
 }

 private JScrollPane getScrollPane(){//给添加好友的容器JPanel添加滚动条;
 if(scrollPane==null){
  scrollPane=new JScrollPane(new TestPane());
  //scrollPane.setBounds(20,5, -1, 600);
  scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );//不显示水平滚动条;
 }
 return scrollPane;
 }

 private JPanel getJContentPane() {//实例化底层的容器JPanel;
 if (jContentPane == null) {
  jContentPane = new JPanel();
  jContentPane.setLayout(new BorderLayout());
  jContentPane.add(getScrollPane(), BorderLayout.CENTER);
 }
 return jContentPane;
 }
}

能成功编译成功我的源代码的方略: 
①、建一个项目,按我的类名建3个类,将源代码拷贝进去; 
②、在项目根目录下建一个名为img的文件夹,将要用到的图片放进去。(相关图片不再上传了,自己随便找几个图片测试即可) 
③、编译实现;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, QQ好友列表
java树形列表
java实现qq好友列表、qt实现qq好友列表、c 怎么实现qq好友列表、vuejs实现树形列表、css实现树形列表,以便于您获取更多的相关知识。

时间: 2024-12-02 10:49:16

QQ好友列表树形列表java代码实现代码_java的相关文章

QQ好友被全删恢复好友的【图文教程】

QQ好友恢复图文教程 进入QQ恢复系统有两种方法,第一种方法是通过QQ客户端直接进入,安全可靠不怕进入钓鱼网站. 通过QQ客户端进入QQ恢复系统的流程是:QQ客户度左下角功能按钮--工具--好友管理器--找回被删除的好友. QQ客户度左下角功能按钮--工具--好友管理器--找回被删除的好友 第二种进入QQ恢复系统的方法是记住域名huifu.qq.com. 进入QQ恢复系统之后,登录自己的QQ账号,然后点击"恢复QQ好友"或者恢复"QQ群",之久就能看到最近12个月内

android实现QQ好友分享

问题描述 android实现QQ好友分享 怎么样实现,求完整代码,我的点击就闪退,不知道怎么改 //qq分享 public void qq(View view) { Bundle bundle = new Bundle(); //这条分享消息被好友点击后的跳转URL. bundle.putString(QQShare.SHARE_TO_QQ_TARGET_URL, "http://www.baidu.com"); //分享的标题.注:PARAM_TITLE.PARAM_IMAGE_UR

如何用Java写出类似QQ好友列表那样的效果,求大神指教最好有代码

问题描述 如何用Java写出类似QQ好友列表那样的效果,求大神指教最好有代码 请问如何用Java写出类似QQ好友列表那样的效果,求大神指教最好有代码 解决方案 http://etwo.iteye.com/blog/1460375

用ExpandableListView实现类似QQ好友列表

  ExpandableListView是一个用来显示二级节点的listview. qq好友列表中子列表上下移动时,父节点在顶端会始终显示,这里我们可以自定义一个view来充当这个父节点.   主布局文件qq_listview如下,其中当我们拖动列表时,系统默认拖动过程中列表背景是黑的,我们可以通过android:cacheColorHint="#00000000"将其设置为透明,其中前两位是透明效果参数(00-99),后六位是颜色的设置.   Xml代码 <?xml versi

Android仿QQ好友列表实现列表收缩与展开_Android

ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:每一层都能够被独立的展开并显示其子项. 好友QQ列表,可以展开,可以收起,在android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到android的ExpandableListView,今天研究了一下这个的用法,也参考了很多资料动手写了一个小demo,实现了基本的功能,下面直接上效果图以及源代码

Android UI仿QQ好友列表分组悬浮效果

本文实例为大家分享了Android UI仿QQ好友列表分组悬浮效果的具体代码,供大家参考,具体内容如下 楼主是在平板上測试的.图片略微有点大,大家看看效果就好 接下来贴源代码: PinnedHeaderExpandableListView.java 要注意的是 在 onGroupClick方法中parent.setSelectedGroup(groupPosition)这句代码的作用是点击分组置顶, 我这边不须要这个效果.QQ也没实用到,所以给凝视了.大家假设须要能够解开凝视 package c

c#三方控第件-C#三方控第件 有哪些第三方控件可以做出qq好友列表

问题描述 C#三方控第件 有哪些第三方控件可以做出qq好友列表 除了sidebar以外有哪些第三方控件可以做出qq好友列表 解决方案 codeproject上有很多这种卷动的菜单和列表的例子,比如explorerbar.当然完全和qq一样的需要专门写代码 google 高仿qq C#也能找到http://bbs.cskin.net/thread-444-1-1.htmlhttp://www.55zm.com/a/20130804/41648.html 等等

c#-C# 根据qq号列表,点击某个号码的时候弹出 qq好友聊天窗口

问题描述 C# 根据qq号列表,点击某个号码的时候弹出 qq好友聊天窗口 C# 根据qq号列表,点击某个号码的时候弹出 qq好友聊天窗口 解决方案 你是要自己实现一个山寨的QQ还是要调用QQ 开放的API来实现? http://www.dotblogs.com.tw/axu/archive/2012/04/07/opensns_qq.aspx 解决方案二: http://www.cnblogs.com/sufei/archive/2012/12/13/2816737.html 解决方案三: 直接

IOS详解TableView:QQ好友列表的实现

上篇博客写了关于性能优化以及手工绘制自定义单元格内容,这篇我们利用TableView的Section的 Header来实现类似QQ好友列表的效果. TableView有一个代理方法 这个方法返回一个UIView对象,我们可以将一个Button对象设为这个Section的Header,在点击它的 时候展开列表内容. 简单地看下假的好友列表数据 一个array中包含多个 dictionary,字典中又包括组别的名字以及好友列表,好友也用一个字典来表示,分别有名称,是否在 线以及头像图片名字. 加载数