以前在网上瞎转悠的时候就发现很多人为用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的文件夹,将要用到的图片放进去。(相关图片不再上传了,自己随便找几个图片测试即可)

③、编译实现;

QQ好友列表树形列表简单实现方式相关推荐

  1. java仿qq好友列表_QQ好友列表树形列表java代码实现代码

    以前在网上瞎转悠的时候就发现很多人为用Java实现QQ登陆后的面板的问题感到十分头疼,最近我因在写模拟QQ的项目,故不可或缺的遇到了这一个问题,在网上我google了,百度了,最终发现的是有很多人被这 ...

  2. Ipad全线涨价;马斯克计划未来数月裁掉推特 75% 员工;支付宝已支持给微信QQ好友转账 | EA周报...

    EA周报 2022年10月21日 每个星期7分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事.掌握IT核心技术. 周报看点 1.马斯克计划未来数月裁掉推特 75% 员工 2.新款 iPad Pro 售 ...

  3. iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)

    iOS开发UI篇-使用UItableview完成一个简单的QQ好友列表(一) 一.项目结构和plist文件 二.实现代码 1.说明: 主控制器直接继承UITableViewController // ...

  4. C++ Qt5学习笔记 2020-12-10(qlabel对齐方式,dateEdit显示日历,设置滚动条及其一些属性,qss中使用参数,QToolBox的使用,及以此实现简易的QQ好友列表)

    1.qlabel对齐方式: ui->label->setWordWrap(true); //自动换行ui->label->setAlignment(Qt::AlignTop); ...

  5. python爬取qq邮箱_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  6. python获取qq好友ip_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  7. 自动抓取QQ好友列表?Windows UIA教你轻松实现

    目录:导读 引言 选择Windows UIA框架进行自动化测试的原因 查找窗口 读取QQ软件的好友列表 结语 引言 每个使用QQ的人都有自己的好友列表,但是如果你想要查看所有好友信息,手动一个个点击会 ...

  8. python模拟登录qq获取好友信息_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  9. qq好友列表获取之动态爬虫清洗爬取好友列表数据 - 获取qq好友、群、群成员列表

    qq好友列表获取之动态爬虫清洗爬取qq好友列表数据 - 获取qq好友ip.群.群成员列表.我们的好友列表要从 qzone 获取,现在打开 qzone 的链接 https://h5.qzone.qq.c ...

最新文章

  1. Android常见错误
  2. docker 从harbor 拉取镜像慢_Harbor丨使用的正确姿势
  3. 金蝶清空日志数据库脚本
  4. openstack中手动修改虚拟机IP后不能通信
  5. Android传感器开发详解
  6. python学习笔记(十五)标准库StringIO和BytesIO
  7. html绑定按键图片移动,如何使用JS实现用键盘控制图片移动呢?
  8. java排队系统模型,MMC排队系统模型
  9. 子列和列_最大子列和 - fanlinglong - 博客园
  10. vue 项目 upload上传图片 并实现拖拽排序
  11. 如何区分oracle服务器、oracle客户端、plsql?
  12. mac下 eclipse支持magic mouse/Trackpad 操作
  13. 脉冲神经网络 神经元模型-IF模型(2)
  14. Python程序员面试技巧
  15. x86 x64 IA64的关系和区别
  16. vue + ElementUI + BMap 百度地图实现地图选址定位并获取地址信息
  17. 韩咏梅:幸福只需要七分饱(转自新加坡联合早报)
  18. [渝粤教育] 华中科技大学 模拟电子技术基础 参考 资料
  19. Word文件打开之后有只读限制
  20. 权限管理AppOps

热门文章

  1. cad套索选择lisp_怎么将CAD2015,CAD2016的窗交窗口选择框的套索改为矩形吗
  2. 起枪还是ECO ? CSGO什么时候起长枪 CSGO超实用教学
  3. 360全景如何拼接制作?360全景拼接制作教程
  4. 拓嘉辰丰:拼多多订单退款流程有哪些?
  5. 三种通信方式——单工、半双工和双工通信
  6. c盘满了但是d盘有空间如何扩容-windows
  7. 哈尔滨苹果手机iphone不开机维修
  8. 如何获取百度地图API
  9. 微信小程序 音乐播放控件,监听播放事件, 音乐播放的基本实现
  10. MTCNN配置及训练详细步骤